Initial commit
commit
05577b5c91
|
@ -0,0 +1,6 @@
|
|||
authorized_keys
|
||||
entries/
|
||||
entries.tar
|
||||
*.img
|
||||
*.raw
|
||||
*.raw.xz
|
|
@ -0,0 +1,38 @@
|
|||
# Serial Pi
|
||||
|
||||
Download and extract Fedora Minimal image:
|
||||
|
||||
```sh
|
||||
curl -fLO 'https://dl.fedoraproject.org/pub/fedora-secondary/releases/39/Spins/aarch64/images/Fedora-Minimal-39-1.5.aarch64.raw.xz'
|
||||
unxz Fedora-Minimal-39-1.5.aarch64.raw.xz
|
||||
```
|
||||
|
||||
Resize the disk to match the SD card:
|
||||
|
||||
```sh
|
||||
truncate -s $((31291392 * 512)) serialpi.img
|
||||
virt-resize --expand /dev/sda3 --no-expand-content Fedora-Minimal-39-1.5.aarch64.raw serialpi.img
|
||||
```
|
||||
|
||||
The `--no-expand-content` argument is necessary because otherwise,
|
||||
`virt-resize` fails with an error, as the ext4 filesystem in the image uses
|
||||
features it does not support.
|
||||
|
||||
|
||||
Populate `authorized_keys`:
|
||||
|
||||
```sh
|
||||
cp ~/.ssh/id_ed25519_sk.pub authorized_keys
|
||||
```
|
||||
|
||||
Customize with `guestfish`:
|
||||
|
||||
```sh
|
||||
guestfish -a serialpi.img -f customize.guestfish
|
||||
```
|
||||
|
||||
Write image to SD card:
|
||||
|
||||
```sh
|
||||
pv serialpi.img | dd of=/dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000001206-0:0 bs=1M oflag=sync conv=sparse
|
||||
```
|
|
@ -0,0 +1,47 @@
|
|||
[Unit]
|
||||
Description=Wait for chrony to synchronize system clock
|
||||
Documentation=man:chronyc(1)
|
||||
After=chrony.service chronyd.service
|
||||
After=network-online.target
|
||||
Before=time-sync.target
|
||||
Wants=time-sync.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
# Wait for chronyd to update the clock and the remaining
|
||||
# correction to be less than 0.1 seconds
|
||||
ExecStart=/usr/bin/chronyc -h 127.0.0.1,::1 waitsync 0 0.1 0.0 1
|
||||
TimeoutStartSec=5m
|
||||
RemainAfterExit=yes
|
||||
StandardOutput=null
|
||||
|
||||
CapabilityBoundingSet=
|
||||
DevicePolicy=closed
|
||||
DynamicUser=yes
|
||||
IPAddressAllow=localhost
|
||||
IPAddressDeny=any
|
||||
LockPersonality=yes
|
||||
MemoryDenyWriteExecute=yes
|
||||
PrivateDevices=yes
|
||||
PrivateUsers=yes
|
||||
ProcSubset=pid
|
||||
ProtectClock=yes
|
||||
ProtectControlGroups=yes
|
||||
ProtectHome=yes
|
||||
ProtectHostname=yes
|
||||
ProtectKernelLogs=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectProc=invisible
|
||||
ProtectSystem=strict
|
||||
RestrictAddressFamilies=AF_INET AF_INET6
|
||||
RestrictNamespaces=yes
|
||||
RestrictRealtime=yes
|
||||
SystemCallArchitectures=native
|
||||
SystemCallFilter=@system-service
|
||||
SystemCallFilter=~@privileged @resources
|
||||
UMask=0777
|
||||
|
||||
[Install]
|
||||
WantedBy=time-sync.target
|
|
@ -0,0 +1,40 @@
|
|||
#/usr/bin/guestfish -f
|
||||
run
|
||||
mount /dev/sda3 /
|
||||
mount /dev/sda2 /boot
|
||||
mount /dev/sda1 /boot/efi
|
||||
|
||||
!rm -rf entries
|
||||
!mkdir entries
|
||||
tar-out /boot/loader/entries - | tar -C entries -x
|
||||
!sed -i '/options/s/\bro\b/rw/' entries/*.conf
|
||||
!tar -cf entries.tar -C entries .
|
||||
tar-in entries.tar /boot/loader/entries
|
||||
!rm -rf entries.tar entries
|
||||
|
||||
write-append /boot/efi/config.txt dtoverlay=disable-bt
|
||||
write-append /boot/efi/config.txt dtoverlay=disable-wifi
|
||||
|
||||
write /etc/hostname serial1.pyrocufflink.blue
|
||||
write /etc/machine-id uninitialized
|
||||
|
||||
write /etc/sysconfig/ssh-host-cert-sign SSHCA_SERVER=https://sshca.pyrocufflink.blue
|
||||
upload ssh-host-certificate.conf /etc/ssh/sshd_config.d/10-hostcertificate.conf
|
||||
|
||||
upload authorized_keys /root/.ssh/authorized_keys
|
||||
|
||||
rm-f /etc/systemd/system/multi-user.target.wants/initial-setup.service
|
||||
|
||||
mkdir-p /etc/systemd/system-preset
|
||||
upload serialpi.preset /etc/systemd/system-preset/50-serialpi.preset
|
||||
|
||||
upload chrony-wait.service /etc/systemd/system/chrony-wait.service
|
||||
mkdir-p /etc/systemd/system/time-sync.target.wants
|
||||
|
||||
upload dch.repo /etc/yum.repos.d/dch.repo
|
||||
|
||||
upload dch-firstboot.sh /usr/local/libexec/dch-firstboot.sh
|
||||
chmod 0755 /usr/local/libexec/dch-firstboot.sh
|
||||
upload dch-firstboot.service /etc/systemd/system/dch-firstboot.service
|
||||
|
||||
selinux-relabel /etc/selinux/targeted/contexts/files/file_contexts /
|
|
@ -0,0 +1,16 @@
|
|||
[Unit]
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
Wants=time-sync.target
|
||||
After=time-sync.target
|
||||
Wants=systemd-growfs-root.service
|
||||
After=systemd-growfs-root.service
|
||||
|
||||
[Service]
|
||||
Type=idle
|
||||
ExecStart=/usr/local/libexec/dch-firstboot.sh
|
||||
ExecStartPost=-/usr/bin/systemctl disable %n
|
||||
StandardOutput=journal+console
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
|
||||
dnf install -y \
|
||||
picocom \
|
||||
sshca-cli-systemd \
|
||||
tmux \
|
||||
&& :
|
||||
|
||||
systemctl enable --now ssh-host-certs-renew.timer
|
||||
|
||||
systemctl start ssh-host-certs.target
|
||||
|
||||
useradd -G dialout,wheel dustin
|
||||
install -o dustin -g dustin -m u=rwx,go= -d ~dustin/.ssh
|
||||
cp ~root/.ssh/authorized_keys ~dustin/.ssh/authorized_keys
|
|
@ -0,0 +1,6 @@
|
|||
[dch]
|
||||
name=DCH - Fedora $releasever
|
||||
baseurl=https://files.pyrocufflink.blue/yum/dch/fedora/$releasever
|
||||
gpgkey=https://files.pyrocufflink.blue/yum/dch/gnupg.pub
|
||||
gpgcheck=1
|
||||
skip_if_unavailable=true
|
|
@ -0,0 +1,11 @@
|
|||
enable dch-firstboot.service
|
||||
|
||||
enable chrony-wait.service
|
||||
|
||||
disable pcscd.socket
|
||||
disable sssd-kcm.socket
|
||||
disable systemd-homed.service
|
||||
disable systemd-userdbd.*
|
||||
disable udisks2.service
|
||||
|
||||
disable dnf-makecache.timer
|
|
@ -0,0 +1,3 @@
|
|||
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub
|
||||
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
|
||||
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
|
Loading…
Reference in New Issue