Installing Debian (Raspbian) Linux armhf on a RaspberryPi
Optionally including ARDOP and PAT to connect WINLINK 2000
Release date: 2024-08-05
Even though it would be possible to use a predefined image to run a RaspberryPi it is still possible to create a custom installation with limited effort. In the following lines I will try to give you some additional information concerning this issue.
The resulting image should be able to run on any RaspberryPi. On RaspberryPi 1, 2 and ZERO it is neccessary to use armhf, on all RaspberryPi's from RaspberryPi 3 onwards (including ZERO 2) you could also use arm64.
HAM radio amateurs can use such a light system to connect the WINLINK 2000 system to send emails over short wave radio without internet connection. The web-based client is PAT and the data is exchanged over ARDOP. Time and position can optionally be configured with a usb GPS dongle.
You will need a 32 GB SD-card, a host system with a recent Debian Linux and a working SD-card reader to perform the installation.
I recommend two-partition installation, using vfat for the first partition and ext4 for the second. All data on the sd-card will be erased!
You use all of this information at your own risk!!! There is absolutely no warranty!!!
Prepare the host-system
- The following packages need to be installed on the host-system: u-boot-tools, qemu-user-static, debootstrap, binfmt-support
On a recent Debian/Linux they can be installed with:
aptitude install u-boot-tools qemu-user-static debootstrap binfmt-support
Prepare the client-system
- First identify the sd-card using dmesg to get its device (eg /dev/sdX) and substitute this value for ${rpicard}. Please be absolutely sure of the device name.
- Please be absolutely sure that ${rpicard} points to the right device! Severe data-loss could be caused if wrong!!!
- IF YOU ARE NOT ABSOLUTELY SURE OF THE DEVICE NAME, ABORT NOW ! ! !
- Do NOT FORGET to substitute the right device name for ${rpicard} EVERY TIME
- All data on the device (hopefully your new empty sd-card) will be erased if you continue!
- Make sure /usr/sbin and /sbin are in your path
export PATH=$PATH:/usr/sbin:/sbin
- Set the device-name of the sd-card (eg /dev/sdb)
export rpicard=/dev/sdX
- Set the hostname of the new system (also used as wifi-ssid, etc.)
export rpihostname=raspberrypi
- To be on safe side erase the first part of your SD Card (also clears the partition table)
dd if=/dev/zero of=${rpicard} bs=1M count=600
- Partition the harddisk using fdisk
(use 512 MB for the first partition and reserve all availabe space for the second partition)
/sbin/sfdisk --label dos ${rpicard} <<\EndOfFile
,512m,c
,
EndOfFile
- Create an ext4-filesystem on the newly created second partition and mount it unter /mnt
(may be "${rpicard}p2" instead of "${rpicard}2" on some systems)
/sbin/mkfs.ext4 -L RASPIROOT "${rpicard}2"
/sbin/tune2fs -c0 -i0 "${rpicard}2"
mount "${rpicard}2" /mnt -o rw
- Create a vfat-filesystem on the newly first partition and mount it unter /mnt/boot/fat
(may be "${rpicard}p1" instead of "${rpicard}1" on some systems)
/sbin/mkfs.vfat -n RASPIBOOT "${rpicard}1"
/bin/mkdir -p /mnt/boot
mount "${rpicard}1" /mnt/boot -o rw
- /etc/fstab
mkdir -p /mnt/etc
cat <<\EndOfFile > /mnt/etc/fstab
# /etc/fstab: static file system information.
#
#<file system> <mount point> <type> <options> <dump> <pass>
LABEL=RASPIROOT / ext4 errors=continue,relatime 0 1
LABEL=RASPIBOOT /boot vfat errors=continue,relatime 0 2
tmpfs /tmp tmpfs defaults,auto 0 0
EndOfFile
- Generate temporary keyring
curl -L "https://ftp-master.debian.org/keys/archive-key-12.asc" "http://archive.raspberrypi.org/debian/raspberrypi.gpg.key" "http://raspbian.raspberrypi.com/raspbian.public.key" | gpg --import --no-default-keyring --keyring ./raspberrypi.gpg
Install Debian Linux on the client-system
- Install Debian Linux armhf for example with the following command:
/usr/sbin/debootstrap --keyring=$(realpath ./raspberrypi.gpg) --include=net-tools,wpasupplicant,aptitude,joe,locales,console-data,tzdata,console-setup,keyboard-configuration,dbus,sudo,kmod,linux-base,initramfs-tools,ssh,wireless-tools,rfkill,dphys-swapfile,dnsmasq,iw,hostapd,avahi-daemon,avahi-utils,netcat-traditional,curl,iptables,gpsd,pat,chrony,lighttpd,php-cgi,alsa-utils,ca-certificates,alsa-ucm-conf,fake-hwclock,libnss-mdns,samba --arch armhf --components=main,contrib,non-free,rpi,firmware bookworm /mnt http://raspbian.raspberrypi.com/raspbian/
Configure the client-system
(You need to create/adapt the following files)
- /etc/apt/sources.list
cat <<\EndOfFile > /mnt/etc/apt/sources.list
deb http://raspbian.raspberrypi.com/raspbian/ bookworm main contrib non-free rpi firmware
deb http://archive.raspberrypi.com/debian/ bookworm main
EndOfFile
- Install the LINUX kernel
curl -L --output /mnt/etc/apt/trusted.gpg.d/raspberrypi.gpg.asc "http://archive.raspberrypi.org/debian/raspberrypi.gpg.key"
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
cp /usr/bin/qemu-arm-static /mnt/usr/bin/
cp /etc/resolv.conf /mnt/etc/resolv.conf
LANG=C /usr/sbin/chroot /mnt /usr/bin/qemu-arm-static /bin/bash <<\EndOfFile
aptitude -y update
aptitude -y full-upgrade
aptitude -y install raspberrypi-archive-keyring raspberrypi-kernel raspberrypi-bootloader firmware-linux firmware-realtek firmware-brcm80211 bluez-firmware
EndOfFile
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
- Configure the bootloader
cat <<\EndOfFile > /mnt/boot/cmdline.txt
console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0
EndOfFile
- /etc/network/interfaces
cat <<\EndOfFile >> /mnt/etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# comment out the following line if your hardware is capable of using wlan0 and uap0 simultaneously
pre-up ifdown uap0 || true
allow-hotplug wlan1
iface wlan1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#auto uap0
iface uap0 inet static
address 10.0.0.1
netmask 255.255.255.0
broadcast 10.0.0.255
hostapd /etc/hostapd/hostapd.conf.uap0
pre-up sed -i -e "/^channel=/ s/=.*/=$(ping -w4 www.google.com >/dev/null 2>&1 && iw dev wlan0 info >/dev/null 2>&1 && LANG=C iw dev wlan0 info | grep channel | awk '{print $2}' || echo 6)/" /etc/hostapd/hostapd.conf.uap0 || true
pre-up ifdown wlan0; iw phy phy0 interface add uap0 type __ap || true
# uncomment the following line if your hardware is capable of using wlan0 and uap0 simultaneously
#post-up ifup wlan0 || true
post-up service dnsmasq restart
post-up iptables -t nat -A PREROUTING -s 10.0.0.0/24 -i uap0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80
EndOfFile
- /etc/hostapd/hostapd.conf.uap0
cat <<EndOfFile > /mnt/etc/hostapd/hostapd.conf.uap0
# Local WIFI Access Point
interface=uap0
ssid=${rpihostname}
hw_mode=g
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa_passphrase=12345678
# use wpa2 security
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
# 802.11n support
ieee80211n=1
# QoS support, also required for full speed on 802.11n/ac/ax
wmm_enabled=1
# Use the newer mac80211 driver
driver=nl80211
#specify the wifi channel
channel=1
EndOfFile
- /etc/dnsmasq.conf
cat <<\EndOfFile >> /mnt/etc/dnsmasq.conf
# Local WIFI Access Point
interface=uap0
no-dhcp-interface=eth0,wlan0,wlan1
dhcp-range=interface:uap0,10.0.0.20,10.0.0.99,24h
domain-needed
bogus-priv
EndOfFile
- /etc/sysctl.conf
cat <<\EndOfFile >> /mnt/etc/sysctl.conf
# Local WIFI Access Point
net.ipv4.ip_forward=1
EndOfFile
- /etc/hostname
cat <<EndOfFile > /mnt/etc/hostname
${rpihostname}
EndOfFile
sed -i -e '/^127.0.0.1.*/a 127.0.1.1\t'${rpihostname} /mnt/etc/hosts
- /etc/samba/smb.conf
cat <<\EndOfFile >> /mnt/etc/samba/smb.conf
[data]
comment = Network storage
browseable = yes
path = /data
writeable = yes
create mask = 0666
directory mask = 0777
## uncommenting the following lines could make things easier but
## less secure and could introduce problems with Windows-clients
#guest ok = yes
#force user = pi
#force group = pi
EndOfFile
cat <<\EndOfFile > /mnt/etc/avahi/services/smb.service
<?xml
version="1.0" standalone='no'?>
<!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_smb._tcp</type>
<port>445</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
</service-group>
EndOfFile
mkdir -p /mnt/data
chmod 777 /mnt/data
- /etc/systemd/system/rc-local.service
cat <<\EndOfFile > /mnt/etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
EndOfFile
ln -sf /etc/systemd/system/rc-local.service /mnt/etc/systemd/system/multi-user.target.wants
- /etc/rc.local
cat <<\EndOfFile > /mnt/etc/rc.local
#!/bin/sh
passwd --quiet --delete root
useradd -m -s /bin/bash pi
echo pi:pi | chpasswd
adduser pi sudo
adduser pi audio
(echo pi; echo pi;) | smbpasswd -sa pi
chown -R pi:pi /data
chmod -R 777 /data
mkdir -p ~pi/ardop_logs ~pi/.config/pat
[ -f /etc/pat.config.skel ] && cp /etc/pat.config.skel ~pi/.config/pat/config.json && chmod 600 ~pi/.config/pat/config.json
chown -R pi:pi ~pi/ardop_logs ~pi/.config
aptitude -y install
( rm -r /debootstrap > /dev/null 2>&1; exit 0; )
cp /etc/profile /etc/profile.SIC
/bin/echo -e 'sudo dpkg-reconfigure locales keyboard-configuration tzdata console-setup\n\nsudo mv /etc/profile.SIC /etc/profile\n' >> /etc/profile
/bin/cat /etc/rc.local.skel > /etc/rc.local
exit 0
EndOfFile
chmod 755 /mnt/etc/rc.local
cat <<\EndOfFile > /mnt/etc/rc.local.skel
#!/bin/sh
iptables -t nat -A POSTROUTING -j MASQUERADE
# Activate WIFI accesspoint
#( sleep 15; ifup uap0; exit 0; ) &
# Activate WIFI accesspoint if there is no internet
( sleep 60 ; { ping -w4 www.google.com >/dev/null 2>&1 || ifup uap0 ; } ; exit 0 ; ) &
exit 0
EndOfFile
Completing the installation
- Setup your wifi account
Substitute ${ssid} and ${passphrase} for the real values in your network
wpa_passphrase ${ssid} ${passphrase} > /mnt/etc/wpa_supplicant/wpa_supplicant.conf
- OPTIONAL: Create aliases for "dir"
This somewhat dirty hack can be used to change the behaviour of the dir command if wanted
for i in etc/bash.bashrc etc/profile etc/skel/.bashrc etc/skel/.profile root/.bashrc root/.profile; do /bin/echo -e "\nalias dir='ls -ahl --color'\n" >> /mnt/$i; done
- OPTIONAL: Install dropbox_uploader
curl -L "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o "/mnt/usr/local/bin/dropbox_uploader_$(date -I).sh"
sed -i -e 's/^CONFIG_FILE=.*/CONFIG_FILE=\/etc\/dropbox_uploader.conf/g' /mnt/usr/local/bin/dropbox_uploader_$(date -I).sh
chmod +x /mnt/usr/local/bin/dropbox_uploader_$(date -I).sh
ln -sf dropbox_uploader_$(date -I).sh /mnt/usr/local/bin/dropbox_uploader.sh
ln -sf dropbox_uploader.sh /mnt/usr/local/bin/dropbox_uploader
curl -L "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropShell.sh" -o "/mnt/usr/local/bin/dropShell_$(date -I).sh"
chmod +x /mnt/usr/local/bin/dropShell_$(date -I).sh
ln -sf dropShell_$(date -I).sh /mnt/usr/local/bin/dropShell.sh
ln -sf dropShell.sh /mnt/usr/local/bin/dropShell
NOTA bene: On first use start with: sudo dropbox_uploader; sudo chmod 666 /etc/dropbox_uploader.conf
- OPTIONAL: Install HAM radio winlink programs
curl -L -o /mnt/usr/local/bin/ardopcf_arm_Linux_32-1.0.4.1.2 "https://github.com/pflarue/ardop/releases/download/1.0.4.1.2/ardopcf_arm_Linux_32"
chmod +x /mnt/usr/local/bin/ardopcf_arm_Linux_32-1.0.4.1.2
ln -sf ardopcf_arm_Linux_32-1.0.4.1.2 /mnt/usr/local/bin/ardopcf
ln -sf ardopcf /mnt/usr/local/bin/ardopc
cat <<\EndOfFile > /mnt/etc/systemd/system/ardop@.service
[Unit]
Description=ardopc - ARDOP softmodem for %i
After=network.target sound.target
[Service]
User=%i
#ExecStart=/usr/local/bin/ardopcf --logdir /home/%i/ardop_logs 8515 ARDOP ARDOP
ExecStart=/usr/local/bin/ardopcf -H "LOGLEVEL 8" --webgui 8514 --logdir /home/%i/ardop_logs 8515 ARDOP ARDOP
Restart=always
RestartSec=60s
[Install]
WantedBy=multi-user.target
EndOfFile
ln -sf /etc/systemd/system/ardop@.service /mnt/etc/systemd/system/multi-user.target.wants/ardop@pi.service
cat <<\EndOfFile > /mnt/etc/asound.conf
pcm.ARDOP {type rate slave {pcm "plughw:0,0" rate 48000}}
EndOfFile
cat <<\EndOfFile > /mnt/etc/systemd/system/pat@.service
[Unit]
Description=pat - Winlink client for %I
Documentation=https://github.com/la5nta/pat/wiki
After=ax25.service network.target
[Service]
User=%i
ExecStart=/usr/bin/pat-winlink http
Restart=on-failure
[Install]
WantedBy=multi-user.target
EndOfFile
ln -sf /etc/systemd/system/pat@.service /mnt/etc/systemd/system/multi-user.target.wants/pat@pi.service
mkdir -p /mnt/etc/alsa
touch /mnt/etc/alsa/DEACTIVATED.state-daemon.conf
ln -sf /lib/systemd/system/alsa-restore.service /mnt/etc/systemd/system/multi-user.target.wants
ln -sf /lib/systemd/system/alsa-state.service /mnt/etc/systemd/system/multi-user.target.wants
cat <<\EndOfFile > /mnt/etc/pat.config.skel
{
"mycall": "",
"secure_login_password": "",
"auxiliary_addresses": [],
"locator": "",
"service_codes": [
"PUBLIC"
],
"http_addr": ":8080",
"motd": [
"Open source Winlink client - getpat.io"
],
"connect_aliases": {
"telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
},
"listen": [],
"hamlib_rigs": {},
"ax25": {
"port": "wl2k",
"beacon": {
"every": 3600,
"message": "Winlink P2P",
"destination": "IDENT"
},
"rig": ""
},
"serial-tnc": {
"path": "/dev/ttyUSB0",
"serial_baud": 9600,
"hbaud": 1200,
"type": "Kenwood"
},
"ardop": {
"addr": "localhost:8515",
"arq_bandwidth": {
"Forced": false,
"Max": 2000
},
"rig": "",
"ptt_ctrl": false,
"beacon_interval": 0,
"cwid_enabled": true
},
"telnet": {
"listen_addr": ":8774",
"password": ""
},
"varahf": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 2300,
"rig": "",
"ptt_ctrl": false
},
"varafm": {
"host": "localhost",
"cmdPort": 8300,
"dataPort": 8301,
"bandwidth": 0,
"rig": "",
"ptt_ctrl": false
},
"gpsd": {
"enable_http": true,
"allow_forms": true,
"use_server_time": true,
"addr": "localhost:2947"
},
"schedule": {},
"version_reporting_disabled": false
}
EndOfFile
NOTA bene: On first use start with: pat-winlink configure to configure pat. Configure at least: mycall, secure_login_password and locator
NOTA bene: Check for the correct sound device in /etc/asound.conf
NOTA bene: On first use you need to use alsamixer to adjust the volume
Additional informaiton can be found at:
- OPTIONAL: GPS Time server
sed -i -e '/^makestep /s/.*/#&\nmakestep 0.1 -1/g' /mnt/etc/chrony/chrony.conf
cat <<\EndOfFile >> /mnt/etc/chrony/chrony.conf
# use GPS to set time if available
refclock SHM 0 offset 0.5 delay 0.2 refid NMEA
# add network range you allow to receive time syncing requests from clients
#allow 10.0.0.0/24
EndOfFile
sed -i -e 's/^DEVICES=.*/DEVICES="\/dev\/ttyACM0"/g' /mnt/etc/default/gpsd
sed -i -e 's/^GPSD_OPTIONS=.*/GPSD_OPTIONS="-n"/g' /mnt/etc/default/gpsd
ln -sf /lib/systemd/system/gpsd.service /mnt/etc/systemd/system/multi-user.target.wants
ln -sf /lib/systemd/system/gpsd.socket /mnt/etc/systemd/system/sockets.target.wants
- OPTIONAL: Web server with PHP
ln -sf ../conf-available/10-fastcgi.conf /mnt/etc/lighttpd/conf-enabled
ln -sf ../conf-available/15-fastcgi-php.conf /mnt/etc/lighttpd/conf-enabled
cat <<EndOfFile > /mnt/var/www/html/index.php
<!DOCTYPE html>
<html>
<head>
<title>${rpihostname}</title>
</head>
<body>
<h1>${rpihostname}</h1>
<p><BR></p>
EndOfFile
cat <<\EndOfFile >> /mnt/var/www/html/index.php
<?php
system ("/usr/bin/test -x /usr/local/bin/ardopc", $RETVAL); if ($RETVAL == "0") {
echo "<p><h2>To connect the local PAT-WINLINK server:</h2><i>(reload if empty...)</i></p>\n";
system("serverip_pat");
echo "<p><BR></p>\n";
echo "<p><h2>To connect the local ARDOP monitor:</h2><i>(reload if empty...)</i></p>\n";
system("serverip_ardop");
echo "<p><BR></p>\n";
echo '<p><form action="restart_ardop.php"><input type="submit" value="RESTART ARDOP"></form></p>' . "\n";
};
?>
<?php
system ("/usr/bin/test -x /usr/bin/wsjtx", $RETVAL); if ($RETVAL == "0") {
echo '<p><form action="wsjtx.php"><input type="submit" value="START WSJTX"></form></p>' . "\n";
echo '<p><form action="upload_wsjtx_log.php"><input type="submit" value="UPLOAD WSJTX LOG"></form></p>' . "\n";
}; ?>
<p><form action="poweroff.php"><input type="submit" value="POWEROFF"></form></p>
</body>
</html>
EndOfFile
cat <<\EndOfFile > /mnt/var/www/html/poweroff.php
<!DOCTYPE html>
<html>
<body>
<?php
system("sudo poweroff"); ?>
</body>
</html>
EndOfFile
cat <<\EndOfFile > /mnt/var/www/html/restart_ardop.php
<!DOCTYPE html>
<html>
<body>
<?php
system("sudo -u pi /bin/kill -9 $(ps -A | grep ardopc | head -1 | awk '{print $1}')"); ?>
</body>
</html>
EndOfFile
cat <<\EndOfFile > /mnt/var/www/html/wsjtx.php
<!DOCTYPE html>
<html>
<body>
<p><h1>Starting WSJTX ... </h1></p>
<?php
if (strpos($_SERVER['REMOTE_ADDR'], ":") == FALSE) { $DISPLAY=$_SERVER['REMOTE_ADDR'] . ":0"; } else { $DISPLAY="[" . $_SERVER['REMOTE_ADDR'] . "]:0"; };
$WSJTX="DISPLAY=" . $DISPLAY . " sudo -u pi /usr/bin/wsjtx &";
system("sudo -u pi /bin/kill -9 $(ps -A | grep ardopc | head -1 | awk '{print $1}')");
system("sleep 5; $WSJTX");
?>
</body>
</html>
EndOfFile
cat <<\EndOfFile > /mnt/var/www/html/upload_wsjtx_log.php
<!DOCTYPE html>
<html>
<body>
<?php
system("/usr/local/bin/upload_wsjtx_log"); ?>
</body>
</html>
EndOfFile
cat <<\EndOfFile >> /mnt/etc/sudoers
www-data ALL = NOPASSWD: /sbin/poweroff
www-data ALL = (pi) NOPASSWD: /bin/kill
www-data ALL = (pi) NOPASSWD: /usr/bin/wsjtx
www-data ALL = (pi) NOPASSWD: /bin/tar
EndOfFile
cat <<\EndOfFile > /mnt/usr/local/bin/serverip_pat
#!/bin/sh
LANG=C
for i in $(/sbin/ifconfig | grep "inet " | awk '{print $2}' | grep -v 127.0.0.1 | xargs); do echo '<'a href=\"http://$i:8080\"'>'http://$i:8080'<'/a'>''<'p'>'; done
exit 0
EndOfFile
chmod 755 /mnt/usr/local/bin/serverip_pat
cat <<\EndOfFile > /mnt/usr/local/bin/serverip_ardop
#!/bin/sh
LANG=C
for i in $(/sbin/ifconfig | grep "inet " | awk '{print $2}' | grep -v 127.0.0.1 | xargs); do echo '<'a href=\"http://$i:8514\"'>'http://$i:8514'<'/a'>''<'p'>'; done
exit 0
EndOfFile
chmod 755 /mnt/usr/local/bin/serverip_ardop
- EXPERIMENTAL: Install HAM radio digimode programs (FT8, FT4, JT9, etc.)
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
LANG=C /usr/sbin/chroot /mnt /usr/bin/qemu-arm-static /bin/bash <<\EndOfFile
aptitude -y install wsjtx
EndOfFile
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
cat <<\EndOfFile > /mnt/usr/local/bin/upload_wsjtx_log
#!/bin/sh
# Upload WSJTX logfile
USER=pi
INPUT=$(realpath /home/$USER/.local/share/WSJT-X/wsjtx_log.adi)
DATE=$(date +%Y_%m_%d-%H.%M.%S)
OUTPUT=/data/wsjtx_log/$(basename $INPUT)-$DATE.tar.gz
[ -f "$INPUT" ] || exit 1
[ -d $(dirname "$OUTPUT") ] || exit 1
sudo -u $USER /bin/tar --directory=$(dirname $INPUT) -czf $OUTPUT $(basename $INPUT)
dropbox_uploader.sh mkdir /wsjtx_log > /dev/null 2>&1
dropbox_uploader.sh upload $OUTPUT /wsjtx_log/
EndOfFile
chmod 755 /mnt/usr/local/bin/upload_wsjtx_log
mkdir -p /mnt/data/wsjtx_log
NOTA bene: You will need an X-Server running on your client device, like Mocha X11 Lite for Android
- Unmount the sd-card
umount /mnt/boot
umount /mnt
- Insert the sd-card into the RaspberryPi Zero 2 W, power it up and hope for the best ...
- Wait for some minutes ...
- Login with username "pi" and password "pi" ...
- either on the console
- or via ssh: ssh pi@${rpihostname}
- After successful booting and login set the root password and change password for pi
sudo passwd root
sudo passwd pi
sudo smbpasswd pi
- OPTIONAL: HAM radio / WINLINK: After successful booting connect your usb soundcard and configure PAT and ARDOP
pat-winlink configure
alsamixer
IMPORTANT: Configure at least: mycall, secure_login_password and locator
Additional informaiton can be found at:
- OPTIONAL: After everything including network is working, you could consider to install a graphical desktop...
sudo aptitude update
sudo aptitude full-upgrade
sudo aptitude install task-lxde-desktop
References
https://www.cantab.net/users/john.wiseman/Documents/ARDOPC.html
https://github.com/pflarue/ardop
https://github.com/la5nta/pat/wiki
https://github.com/23ewrdtf/Captive-Portal
https://github.com/raspberrypi/firmware/tree/master/boot
https://raspberrypi.stackexchange.com/questions/74896/u-boot-for-raspberry-pi-3
https://elinux.org/RPi_U-Boot#Copy_U-Boot_to_your_SD_card
https://blog.christophersmart.com/2016/10/27/building-and-booting-upstream-linux-and-u-boot-for-raspberry-pi-23-arm-boards/
https://www.raspberrypi.org/documentation/configuration/config-txt/README.md
https://wiki.debian.org/Arm64Port#Unofficial_Debian-ports_bootstrap
https://github.com/Debian/raspi3-image-spec/issues/12
https://code.overdrivenetworks.com/blog/2018/07/debian-buster-on-a-raspberry-pi-3-model-b-plus/
http://sunxi.org/Bootable_SD_card#Cleaning
https://wiki.debian.org/InstallingDebianOn/Allwinner
http://wiki.lemaker.org/BananaPro/Pi:Setting_up_the_Linux_distribution_root_file_system
http://linux-sunxi.org/Mainline_Debian_HowTo#Setting_up_the_SD-card
http://linux-sunxi.org/Mainline_U-Boot
HOME
© 2018-2024 by Bodo Giannone
Alle Angaben ohne Gewähr !!! Caveat lector