{"id":292,"date":"2019-04-12T20:53:23","date_gmt":"2019-04-13T03:53:23","guid":{"rendered":"http:\/\/davidadriaanse.com\/?p=292"},"modified":"2019-09-06T07:31:50","modified_gmt":"2019-09-06T14:31:50","slug":"rpi-for-seamless-portable-fixed-ops","status":"publish","type":"post","link":"https:\/\/davidadriaanse.com\/?p=292","title":{"rendered":"RPi for seamless Portable &#038; Fixed Ops"},"content":{"rendered":"\n<p>Notes for a Headless Raspberry Pi Configuration for Remote and\nPortable Operations in a Mixed SDR and Conventional Radio Environment<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"2048\" height=\"1536\" src=\"http:\/\/davidadriaanse.com\/wp-content\/uploads\/2019\/04\/IMG_3720.jpg\" alt=\"\" class=\"wp-image-306\"\/><\/figure>\n\n\n\n<h2>Acknowledgements<\/h2>\n\n\n\n<p><strong>George Z., KJ6VU<\/strong>\n&#8211; for providing a great writeup on packaging the IC7100 inside of the Ridgid\ntool boxes.<\/p>\n\n\n\n<p><strong>Julian W., OH8STN<\/strong>\n\u2013 for providing a great set of videos discussing several aspects of field\ncommunications and insight on how to integrate digital mode needs in field with\nthe RPi SBC\u2019s.<\/p>\n\n\n\n<p>The work in this document compiles almost verbatim the\nwriteups and videos provided by these two gentlemen, with minor adjustments\nbased on personal preferences.<\/p>\n\n\n\n<h2>Introduction<\/h2>\n\n\n\n<p>TBD \u2013\nIntro to project and rationale behind using an RPi<\/p>\n\n\n\n<h2>Physical Installation<\/h2>\n\n\n\n<p>TBD \u2013\nDiscussion on physical arrangement of go-box<\/p>\n\n\n\n<h2>Base Image<\/h2>\n\n\n\n<p>For starters, we\u2019ll use the latest Raspbian image available\nfor download here. This guide is written based on the June 2018 release of\nRaspbian Stretch with Desktop (R2018-06-27, v4.14 \u201cStretch\u201d):<\/p>\n\n\n\n<figure class=\"wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-raspberry-pi\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"jh3dxtJROZ\"><a href=\"https:\/\/www.raspberrypi.org\/downloads\/raspbian\/\">Raspbian<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" src=\"https:\/\/www.raspberrypi.org\/downloads\/raspbian\/embed\/#?secret=jh3dxtJROZ\" data-secret=\"jh3dxtJROZ\" width=\"500\" height=\"282\" title=\"&#8220;Raspbian&#8221; &#8212; Raspberry Pi\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Imaged to MicroSD card using Etcher:  <br><a href=\"https:\/\/etcher.io\/\">https:\/\/etcher.io\/\ufeff<\/a> <\/p>\n\n\n\n<p>First boot will ask you to select your locale, time zone,\nchange the default administrator password, connect to a network and update the\noperating system to the latest packages. Once this is complete, you\u2019ll be\nprompted to reboot.<\/p>\n\n\n\n<p>Use sudo raspi-config\nto change the following:<\/p>\n\n\n\n<ul><li>Change the host-name to your liking<\/li><li>Set you console resolution to something useful,\nsuch as 1280&#215;720 or 1920&#215;1080 (this affects VNC)<\/li><li>Enable SSH for remote administration<\/li><li>Enable VNC for remote desktop (for mobile device\nuse)<\/li><\/ul>\n\n\n\n<p>We\u2019re now ready to configure the additional packages.<\/p>\n\n\n\n<h2>Additional Packages &amp; Configuration<\/h2>\n\n\n\n<h3>SoapySDRRemote<\/h3>\n\n\n\n<p>SoapySDRRemote is a layer that will stream SDR data over a\nnetwork. Installing SoapySDRRemote is easy enough, however to use it with\nSDRPlay devices, we will need to compile a plugin to use with SoapyRemoteServer.\nWe\u2019ll start by installing the Raspbian drivers from SDRPlay, available at the\nfollowing URL: <a href=\"https:\/\/www.sdrplay.com\/downloads\/\">https:\/\/www.sdrplay.com\/downloads\/<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/Downloads\/\nwget https:\/\/www.sdrplay.com\/software\/SDRplay_RSP_API-RPi-2.13.1.run\nchmod +x SDRplay_RSP_API-RPi-2.13.1.run\nsudo .\/SDRplay_RSP_API-RPi-2.13.1.run<\/code><\/pre>\n\n\n\n<p>Follow the instructions as prompted, reboot after the\ninstallation is complete. Next, we\u2019ll install the SoapySDR server and utilities.\nWe\u2019ll then build the SoapySDRPlay plugin to enable the use of SDRPlay devices\nwith Soapy. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get install soapyremote-server soapysdr-tools cmake \nlibsoapysdr-dev\ncd ~\/Downloads\/\ngit clone https:\/\/github.com\/pothosware\/SoapySDRPlay.git\ncd SoapySDRPlay\nmkdir build\ncd build\ncmake ..\nmake\nsudo make install<\/code><\/pre>\n\n\n\n<p>This installs the SoapySDR remote server and tools, and\nbuild and installs the SoapySDRPlay plugin. Next, well check to see if soapy\ncan see the SDRPlay device by running the following command<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SoapySDRUtil \u2013find<\/code><\/pre>\n\n\n\n<p>Which should return something that resembles the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>######################################################\n## Soapy SDR -- the SDR abstraction library\n######################################################\n\nlinux; GNU C++ version 6.2.0 20161010; Boost_106100; UHD_003.009.005-0-unknown\n\nFound device 0\n  default_input = False\n  default_output = False\n  device_id = 2\n  driver = audio\n  label = hw:USB Audio CODEC,0\n\nFound device 1\n  driver = sdrplay\n  label = SDRplay Dev0 RSP1A 180300CB94<\/code><\/pre>\n\n\n\n<p>I do get some errors regarding the Jack audio server, which\nI\u2019m ignoring since Jack is not installed. It does not seem to impact the SDR\nstream at all, so I\u2019ve left it alone for now. SoapySDR should now be usable\nover the network by an appropriate SDR client such as CubicSDR.<\/p>\n\n\n\n<h3>USB Virtualization over IP<\/h3>\n\n\n\n<p>The VirtualHere (VH) USB server acts to pass traffic\ndirectly between a client computer and the USB ports of a server device over\nethernet, creating a virtual set of USB devices on the client computer. This\nseems to work well; note that I was unable to get the SDR to work directly\nthrough VH (hence the use of SoapySDRRemote) with the RSP1a, which may be a\nbandwidth or latency issue. Regardless, VH USB is a very useful tool for\nconnecting to devices attached to the RPi and seems to work well in just about\nevery other device I\u2019ve tested, including my Icom IC7100 transceiver which has\na couple of serial ports and a soundcard interface handled through a single USB\nconnection.<\/p>\n\n\n\n<p>VH is not free software, however there is a trial mode that\nworks for 10 days and will let you connect one device. If you want to tinker\nwith a free solution, investigate USB-IP, otherwise VH is available for\npurchase for $49.00USD at the time that this was written.<\/p>\n\n\n\n<p>Obtain the VH client for the computer you will be using the\ncontrol the system. Obtain the VH server for ARM x32 devices here: <a href=\"https:\/\/virtualhere.com\/usb_server_software\">https:\/\/virtualhere.com\/<\/a>\n.<\/p>\n\n\n\n<p>At the time that this was written, you can grab the server directly\nfrom your RPi using the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/Downloads\/\nwget https:\/\/virtualhere.com\/sites\/default\/files\/usbserver\/vhusbdarm<\/code><\/pre>\n\n\n\n<p>you will need to give execute permissions and run the server\nas follows for testing purposes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x vhusbdarm\nsudo vhusbdarm<\/code><\/pre>\n\n\n\n<p>Launch the client on your operating computer, punch in the\nIP address of your RPi, although the autoscan tends to work well if you\u2019re on\nthe same network, and you should be able to connect to any of the RPi\u2019s USB devices\nat this time.<\/p>\n\n\n\n<p>In my case, the VH server made the SDR unavailable to SoapySDRRemote as on several environments it blocks\nkernel access to the ports once it gets the devices ready to serve. I also did\nnot want to server all devices plugged into the Pi as a virtual port. To fix\nthe kernel access issue and button up the install, we\u2019ll make some adjustments\nto the VH server and block all devices we do not want served over IP. In the\nclient, right click and do properties for <strong>the\ndevices you want enabled<\/strong> for remote access, note the manufacturer and\nproduct ID hex codes. Close the server by pressing ctrl+c. VH creates a\nconfig.ini file next to the vhusbdarm executable that we\u2019ll modify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano config.ini<\/code><\/pre>\n\n\n\n<p>add the following lines:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ServerName=K6DSA Interface Module\nAutoAttachToKernel=1\nAllowedDevices=08bb\/2901,10c4\/ea60<\/code><\/pre>\n\n\n\n<p>Press ctrl+o to save the file, ctrl+x to exit. The ServerName defines a name for the server to publish\nto the client and can be changed to whatever you want. <\/p>\n\n\n\n<p>The AutoAttachKernel\nstring tells VH to release the USB port to the linux kernel any time the port\nis disconnected from a client and is the actual fix for the SDR issue, it\nallows a device to be used by the local RPi system anytime it\u2019s not remotely\nconnected; this also comes in handy later on when we establish shared use\nbetween the transceiver\u2019s sound card interface between VH and the SIP VoIP\nclient.<\/p>\n\n\n\n<p>The AllowedDevices string\nis for general housekeeping (and by itself <em>also<\/em>\nfixed the SDR block issue) and is included so that only the devices I intend to\nshare over VH are displayed. The syntax is xxxx\/yyyy,xxxx\/yyyy,\u2026 where x is the\nmanufacturer ID hexacode with 0x dropped, and y is the product ID hexacode with\n0x dropped that were noted earlier, multiple devices are separated by comma. In\nthis case, 08bb\/2901 is the soundcard on the radio, and 10c4\/ea60 is for the\ntwo serial ports on the radio. Explicitly listing the devices that you want to\nkeep will force VH to ignore all devices not listed (you can also run this\nbackwards by allowing all and explicitly blocking only certain devices, see\ndocumentation).<\/p>\n\n\n\n<p>Launch the VH server again, and verify it works as desired and that your SoapySDRRemote devices work over the network with CubicSDR. Additional configuration options are documented here:  <br><a href=\"https:\/\/www.virtualhere.com\/configuration_faq\">https:\/\/www.virtualhere.com\/configuration_faq\ufeff<\/a> <\/p>\n\n\n\n<p>If it\u2019s all working, close the VH server and configure it to\nautomatically start on boot.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mv vhusbdarm config.ini \/root\/\nsudo nano \/etc\/rc.local<\/code><\/pre>\n\n\n\n<p>Add the following line at the end of the file, but <strong>before<\/strong> the exit\n0 string<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Amateur Radio USB Virtualization\n\/root\/vhusbdarm -b<\/code><\/pre>\n\n\n\n<p>Note that the -b flag will launch the server in background\nmode. Press ctrl+o to save the file, ctrl+x to exit. Reboot and verify that\neverything\u2019s working as expected.<\/p>\n\n\n\n<h3>SIP Client for VoIP (WAN connections)<\/h3>\n\n\n\n<p>While the USB sound card on the radio works well over a\nlocal network and is hands down the simplest option to use in a high bandwidth\nand low latency environment, and while it <em>can\n<\/em>work well over a WAN, it is sensitive to varying connectivity conditions.\nIn this case, a SIP audio stream can be used \u2013 while the audio quality is not\nas good in comparison, it still works fine for voice and certain AFSK data modes\n(such as RTTY, FT8, FT8Call and PSK31). <\/p>\n\n\n\n<p>SIP audio codecs are more robust in dealing with data stream\nissues related to low bandwidth and variable latency. On this setup, we\u2019ll use the\nLinphone headless client to establish peer-to-peer audio streams and\naccommodate bi-directional WAN audio streams. Utilizing a SIP client has the\nadditional benefit where audio can be patched to mobile devices such as phones\nand tablets or could even be integrated into other VoIP systems. <\/p>\n\n\n\n<p>Start by installing linphone, then running and quitting the\ncommand line client as follows, which generates a configuration file for us to\nmodify.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install linphone\nlinphonec\nquit<\/code><\/pre>\n\n\n\n<p>We\u2019ll need to modify the configuration file that\u2019s\ngenerated.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano ~\/.linphonerc<\/code><\/pre>\n\n\n\n<p>Scroll through the file to where the audio codecs are\ndefined, they will look as follows, and there will be several numbered\nsequentially:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[audio_codec_0]\nmime=opus\nrate=48000\nchannels=1\nenabled=1<\/code><\/pre>\n\n\n\n<p>For each audio codec with an enabled=1\nflag, change the line to enabled=0, <strong>except<\/strong> G.722. G722 seems to provide the\nbest performance for voice and AFSK signals with very reasonable bandwidth\nrequirements.<\/p>\n\n\n\n<p>Run a command line instance of linphone using the linphonec\ncommand; place a test call from your laptop, phone, tablet, etc \u2013 answer the\ncall by typing answer in the command line. On the other end you should be able\nto hear your radio\u2019s audio, presuming you are not connected to the virtual USB\ndevice. Quit the command by typing quit, and modify the rc.local file to add\nthe following lines at the end of the file, <strong>before<\/strong> the exit 0 string.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Amateur Radio VoIP Modules\nsu pi -c 'linphonecsh init -c \/home\/pi\/.linphonerc'\nsleep 5s\nsu pi -c \"linphonecsh generic 'autoanswer enable'\"<\/code><\/pre>\n\n\n\n<h3>Virtual private Network Server (Security)<\/h3>\n\n\n\n<p>Given that most of the services running on the RPi have no\nreal security features built in, meaning, they\u2019re wide open for anyone on the\nnetwork, it\u2019s important to provide some layer of physical security to the Pi.\nI\u2019m OK with open access on my local network, however rather than opening up a\nset of ports through a router facing the internet, opening the corresponding\nservices to a number of potential exploits, a VPN server is added to the RPi to\nallow for secure, remote use outside of the local network. <\/p>\n\n\n\n<p>PiVPN is a project which makes this incredibly easy to\ninstall and is based on OpenVPN.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -L https:\/\/install.pivpn.io | bash<\/code><\/pre>\n\n\n\n<p>This will initiate the install process; a guided install\nwalks you through every step along the way \u2013 note that the default settings\ntend to work just fine. Forwarding the default port of 1194 to the RPi IP\naddress on your router will allow you to connect to the RPi using an OpenVPN\nclient across the internet, and will let you treat the RPi as if it\u2019s on your\nlocal network.<\/p>\n\n\n\n<p>Once install is complete, you will need to generate client keys\nthat the VPN client on the remote computers will use to authenticate.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pivpn add<\/code><\/pre>\n\n\n\n<h3>Mobile Device VNC Access<\/h3>\n\n\n\n<p>TBD \u2013\nDiscussion on various apps<\/p>\n\n\n\n<h3>Field Hot-Spot<\/h3>\n\n\n\n<p>To easily use the software and service running on the RPi in\nthe field, we\u2019ll need to set up a wireless access point to connect to. Note\nthat I am not using the wireless chip on the RPi to connect to a home network\nwhich is hardwired via Cat5 for performance reasons. We\u2019ll use the HostAPd and\nDNSmasq services to this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install hostapd dnsmasq\nsudo systemctl stop hostapd\nsudo systemctl stop dnsmasq<\/code><\/pre>\n\n\n\n<p>HostAPd is used to establish an access point originating\nfrom the RPi; we\u2019ll need to create a configuration file for it to use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/hostapd\/hostapd.conf<\/code><\/pre>\n\n\n\n<p>Paste the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface=wlan0\ndriver=nl80211\nssid=K6DSA_FieldInterface\nhw_mode=g\nchannel=6\nwmm_enabled=0\nmacaddr_acl=0\nauth_algs=1\nignore_broadcast_ssid=0\nwpa=2\nwpa_passphrase=FieldAccess\nwpa_key_mgmt=WPA-PSK\nwpa_pairwise=TKIP\nrsn_pairwise=CCMP<\/code><\/pre>\n\n\n\n<p>ssid will be the name of the\nwireless network, you can change this to whatever you\u2019d like. Similarly, wpa_passphrase is used to set the password of the\nnetwork and should be changed as well. Save and close the file. We\u2019ll need to\ntell HostAPd to use our new configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/default\/hostapd<\/code><\/pre>\n\n\n\n<p>Find the line that says:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#DAEMON_CONF=\"\"<\/code><\/pre>\n\n\n\n<p>And change it to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DAEMON_CONF=\"\/etc\/hostapd\/hostapd.conf\"<\/code><\/pre>\n\n\n\n<p>Note that the line has been uncommented b removing the hash\nsign. Save and exit the file.<\/p>\n\n\n\n<p>Next, well modify the DNS Masquerading service to act as a\nbasic DHCP server \u2013 the hotspot will not provide any routing or internet\naccess, just a local network to use in connecting to the RPi (or any other\ndevices that join it):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/dnsmasq.conf<\/code><\/pre>\n\n\n\n<p>Paste the following at the end of the file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#Hotspot config - No Internet Access\ninterface=wlan0\ndomain-needed\nbogus-priv\ndhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,12h<\/code><\/pre>\n\n\n\n<p>We\u2019ll need to configure the DHCP client to assign a static\nIP address to the access point by modifying DHCPd\u2019s configuration file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/dhcpcd.conf<\/code><\/pre>\n\n\n\n<p>Paste the following at the end of the file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nohook wpa_supplicant\ninterface wlan0\nstatic ip_address=192.168.1.1\/24\nstatic routers=192.168.1.1<\/code><\/pre>\n\n\n\n<p>If you used the wireless chip in the RPi to connect to the\ninternet during the initial setup of the RPi image, you\u2019ll need to log into the\ndesktop (either directly or via VNC) and disconnect from any WiFi network its\nconnected to. The wireless icon should look like a pair of arrows, one point up,\non pointing down for access point mode to be able to activate.<\/p>\n\n\n\n<p><strong>Update 4.21.19 <\/strong>&#8211; In a recent update of Raspbian you will need to configure hostapd to autostart. To do this, run the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable hostapd<\/code><\/pre>\n\n\n\n<p>Everything should be set up at this point \u2013 we\u2019ll need to\nreboot.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo reboot<\/code><\/pre>\n\n\n\n<p>Verify that you can connect to the hot spot and are able to\naccess the RPi hosted services, such as SSH, VNC and the VH devices.<\/p>\n\n\n\n<p>SoapySDRRemote by default is not bound to the new interface.\nThis is easily fixed by stopping the SoapySDRRemote service, manually starting\nand re-binding an instance, and rebooting<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl stop soapyremote-server\nsudo SoapySDRRemote \u2013-bind\nctrl+c\nsudo reboot<\/code><\/pre>\n\n\n\n<h3>SMB Logbook Share<\/h3>\n\n\n\n<p>A number of the portable programs used via VNC will provide\nADIF files for consumption by a logging program. On my laptop at home, I use\nLog4OM, in order to grant it access to the RPi\u2019s ADIF files we\u2019ll need to\ninstall and configure Samba (SMB). We\u2019ll start off by installing SMB<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install samba<\/code><\/pre>\n\n\n\n<p>Then we\u2019ll need to configure the Samba configuration file to\ncreate a share for logging and allow it to follow symbolic links (this will\nmake sense later)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/samba\/smb.conf<\/code><\/pre>\n\n\n\n<p>After [global], add\nthe following to permit the use of symbolic links.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>allow insecure wide links = yes<\/code><\/pre>\n\n\n\n<p>Comment out all [homes] [printers] and [print$] shares, then\nat the end of the file add the following to create the logs share.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[ADIF Logs]\n  comment = ADIF Log Files\n  browseable = yes\n  path = \/home\/pi\/logs\n  guest ok = yes\n  read only = yes\n  follow symlinks = yes\n  wide links = yes<\/code><\/pre>\n\n\n\n<p>Next we\u2019ll need to create a folder for the logbook share to\nlocate the appropriate files. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir ~\/logs\/\ncd ~\/logs\/<\/code><\/pre>\n\n\n\n<p>And then we\u2019ll need to restart SMB to activate the revised\nconfiguration.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart smbd<\/code><\/pre>\n\n\n\n<p>To locate the log files in a single location yet also at the\nlocation required by each file\u2019s respective authoring program, we\u2019ll create\nsymbolic links inside of the logbook share that point to each pertinent ADIF\nfile. In my case, I added links for JS8Call, WSJT-X and Fldigi by creating the\nfollowing from within the logbook share folder (~\/logs)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ln -s ~\/.fldigi\/logs\/logbook.adif fldigi_log.adi\nln -s ~\/.local\/share\/FT8Call\/ft8call_log.adi\nln -s ~\/.local\/share\/WSJT-X\/wsjtx_log.adi<\/code><\/pre>\n\n\n\n<p>After this you should be able to mount a share to your RPi\u2019s\nIP address, with the standard username and password. The ADIF files within the\nshare are resilient to deletion \u2013 that is, if you delete the log (such as\nwithin JS8 or WSJT) and it recreates, the symbolic links will update\naccordingly.<\/p>\n\n\n\n<p>&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Notes for a Headless Raspberry Pi Configuration for Remote and Portable Operations in a Mixed SDR and Conventional Radio Environment Acknowledgements George Z., KJ6VU &#8211; for providing a great writeup on packaging the IC7100 inside of the Ridgid tool boxes. Julian W., OH8STN \u2013 for providing a great set of videos discussing several aspects of<br \/><a class=\"moretag\" href=\"https:\/\/davidadriaanse.com\/?p=292\">+ Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":306,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[14],"tags":[],"jetpack_featured_media_url":"https:\/\/davidadriaanse.com\/wp-content\/uploads\/2019\/04\/IMG_3720.jpg","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/poyh1-4I","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/posts\/292"}],"collection":[{"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=292"}],"version-history":[{"count":7,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/posts\/292\/revisions"}],"predecessor-version":[{"id":747,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/posts\/292\/revisions\/747"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=\/wp\/v2\/media\/306"}],"wp:attachment":[{"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidadriaanse.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}