Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
696ddd9bfb | ||
|
e0806e51da | ||
|
3612787274 | ||
|
41a0592f20 | ||
|
3ebb6f36cf | ||
|
c88bd17709 | ||
|
c1af07bf18 | ||
|
a88a386ef4 | ||
|
034c561a53 | ||
|
2108f02719 | ||
|
06282f5ea8 | ||
|
6bb5267b91 | ||
|
b87647756f | ||
|
505028ab44 | ||
|
9657719613 | ||
|
3e4c4d18ee | ||
|
9beea608ed | ||
|
69ca3a957c | ||
|
7c62016063 | ||
|
5d43526e85 | ||
|
749ef52656 | ||
|
d0c8b864ae |
@ -136,8 +136,8 @@ url[64]="http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz"
|
|||||||
fallocate -l "$imageSize" "$imageName"
|
fallocate -l "$imageSize" "$imageName"
|
||||||
loopdev="$(losetup --find --show "${imageName}")"
|
loopdev="$(losetup --find --show "${imageName}")"
|
||||||
parted --script "${loopdev}" mklabel msdos mkpart primary fat32 0% 200M mkpart primary ext4 200M 100%
|
parted --script "${loopdev}" mklabel msdos mkpart primary fat32 0% 200M mkpart primary ext4 200M 100%
|
||||||
mkfs.vfat -F32 "${loopdev}p1"
|
mkfs.vfat -F32 -n STRMX_BOOT "${loopdev}p1"
|
||||||
mkfs.ext4 -F "${loopdev}p2"
|
mkfs.ext4 -F -L STRMX_ROOT "${loopdev}p2"
|
||||||
mount "${loopdev}p2" /mnt
|
mount "${loopdev}p2" /mnt
|
||||||
mkdir /mnt/boot
|
mkdir /mnt/boot
|
||||||
mount "${loopdev}p1" /mnt/boot
|
mount "${loopdev}p1" /mnt/boot
|
||||||
@ -152,7 +152,8 @@ fi
|
|||||||
bsdtar -xpf "${imageFileName}" -C /mnt
|
bsdtar -xpf "${imageFileName}" -C /mnt
|
||||||
# Set -e in case it got unset for 32 bit image
|
# Set -e in case it got unset for 32 bit image
|
||||||
set -e
|
set -e
|
||||||
arch-chroot /mnt << EOF
|
PS1="(Chroot) [\u@\h \W] \$" arch-chroot /mnt << EOF
|
||||||
|
echo "Chroot started."
|
||||||
# set up pacman
|
# set up pacman
|
||||||
pacman-key --init
|
pacman-key --init
|
||||||
pacman-key --populate archlinuxarm
|
pacman-key --populate archlinuxarm
|
||||||
@ -193,7 +194,9 @@ pacman -Su --needed --noconfirm \
|
|||||||
python-daemonize \
|
python-daemonize \
|
||||||
python-evdev \
|
python-evdev \
|
||||||
python-dbus \
|
python-dbus \
|
||||||
|
python-pyenchant \
|
||||||
python-pyte \
|
python-pyte \
|
||||||
|
socat \
|
||||||
raspberrypi-utils \
|
raspberrypi-utils \
|
||||||
realtime-privileges \
|
realtime-privileges \
|
||||||
rhvoice-voice-bdl \
|
rhvoice-voice-bdl \
|
||||||
@ -208,6 +211,8 @@ pacman -Su --needed --noconfirm \
|
|||||||
xdg-user-dirs \
|
xdg-user-dirs \
|
||||||
xdg-utils
|
xdg-utils
|
||||||
|
|
||||||
|
# Restart gpg agents.
|
||||||
|
gpgconf --kill all
|
||||||
# set the language
|
# set the language
|
||||||
sed -i "s/#$imageLanguage/$imageLanguage/" /etc/locale.gen
|
sed -i "s/#$imageLanguage/$imageLanguage/" /etc/locale.gen
|
||||||
echo "LANG=$imageLanguage" > /etc/locale.conf
|
echo "LANG=$imageLanguage" > /etc/locale.conf
|
||||||
@ -228,17 +233,23 @@ echo -e "root\nroot" | passwd "root"
|
|||||||
echo -e "stormux\nstormux" | passwd "stormux"
|
echo -e "stormux\nstormux" | passwd "stormux"
|
||||||
# Change to the stormux user and install some packages
|
# Change to the stormux user and install some packages
|
||||||
sudo -iu stormux
|
sudo -iu stormux
|
||||||
|
# suppress git spam about default branch name
|
||||||
|
git config --global init.defaultBranch master
|
||||||
# Create desktop, downloads, music, and other directories.
|
# Create desktop, downloads, music, and other directories.
|
||||||
xdg-user-dirs-update
|
xdg-user-dirs-update
|
||||||
# Build AUR packages
|
# Build AUR packages
|
||||||
export aurPackages=(fenrir-git \
|
export aurPackages=(fenrir \
|
||||||
growpartfs \
|
growpartfs \
|
||||||
log2ram \
|
log2ram \
|
||||||
|
python-pythondialog \
|
||||||
yay)
|
yay)
|
||||||
export PKGDEST=~/packages
|
export PKGDEST=~/packages
|
||||||
for p in "\${aurPackages[@]}" ; do
|
for p in "\${aurPackages[@]}" ; do
|
||||||
git clone https://aur.archlinux.org/\${p}.git
|
git clone https://aur.archlinux.org/\${p}.git
|
||||||
cd ~/\${p}
|
cd ~/\${p}
|
||||||
|
if [[ "\${p}" == "python-pythondialog" ]]; then
|
||||||
|
gpg --import keys/pgp/*.asc
|
||||||
|
fi
|
||||||
makepkg -A
|
makepkg -A
|
||||||
cd ~
|
cd ~
|
||||||
rm -rf \${p}
|
rm -rf \${p}
|
||||||
|
1
pi4/files/boot/cmdline.txt
Normal file
1
pi4/files/boot/cmdline.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
root=LABEL=STRMX_ROOT rw rootwait console=serial0,115200 console=tty1 fsck.repair=yes
|
@ -1,32 +0,0 @@
|
|||||||
Section "ServerLayout"
|
|
||||||
Identifier "Layout0"
|
|
||||||
Screen 0 "Screen0"
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Section "Monitor"
|
|
||||||
Identifier "Monitor0"
|
|
||||||
Option "DPMS" "true"
|
|
||||||
HorizSync 28.0-80.0
|
|
||||||
VertRefresh 48.0-75.0
|
|
||||||
Modeline "1920x1080" 172.80 1920 2040 2248 2576 1080 1081 1084 1118
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Section "Device"
|
|
||||||
Identifier "Card0"
|
|
||||||
# Try standard driver
|
|
||||||
Driver "modesetting"
|
|
||||||
# Fallback to dummy
|
|
||||||
Option "FallbackDriver" "dummy"
|
|
||||||
VideoRam 256000
|
|
||||||
EndSection
|
|
||||||
|
|
||||||
Section "Screen"
|
|
||||||
Identifier "Screen0"
|
|
||||||
Device "Card0"
|
|
||||||
Monitor "Monitor0"
|
|
||||||
DefaultDepth 24
|
|
||||||
SubSection "Display"
|
|
||||||
Depth 24
|
|
||||||
Modes "1920x1080"
|
|
||||||
EndSubSection
|
|
||||||
EndSection
|
|
6
pi4/files/etc/fstab
Normal file
6
pi4/files/etc/fstab
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Static information about the filesystems.
|
||||||
|
# See fstab(5) for details.
|
||||||
|
|
||||||
|
# <file system> <dir> <type> <options> <dump> <pass>
|
||||||
|
LABEL=STRMX_BOOT /boot vfat defaults 0 1
|
||||||
|
LABEL=STRMX_ROOT / ext4 defaults,noatime 0 1
|
1
pi4/files/etc/modprobe.d/brcmfmac.conf
Normal file
1
pi4/files/etc/modprobe.d/brcmfmac.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
options brcmfmac feature_disable=0x82000
|
@ -1,47 +0,0 @@
|
|||||||
# This file is part of systemd.
|
|
||||||
#
|
|
||||||
# systemd is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the GNU Lesser General Public License as published by the Free
|
|
||||||
# Software Foundation; either version 2.1 of the License, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# Entries in this file show the compile time defaults. Local configuration
|
|
||||||
# should be created by either modifying this file, or by creating "drop-ins" in
|
|
||||||
# the journald.conf.d/ subdirectory. The latter is generally recommended.
|
|
||||||
# Defaults can be restored by simply deleting this file and all drop-ins.
|
|
||||||
#
|
|
||||||
# Use 'systemd-analyze cat-config systemd/journald.conf' to display the full config.
|
|
||||||
#
|
|
||||||
# See journald.conf(5) for details.
|
|
||||||
|
|
||||||
[Journal]
|
|
||||||
#Storage=auto
|
|
||||||
#Compress=yes
|
|
||||||
#Seal=yes
|
|
||||||
#SplitMode=uid
|
|
||||||
#SyncIntervalSec=5m
|
|
||||||
#RateLimitIntervalSec=30s
|
|
||||||
#RateLimitBurst=10000
|
|
||||||
SystemMaxUse=20M
|
|
||||||
#SystemKeepFree=
|
|
||||||
#SystemMaxFileSize=
|
|
||||||
#SystemMaxFiles=100
|
|
||||||
#RuntimeMaxUse=
|
|
||||||
#RuntimeKeepFree=
|
|
||||||
#RuntimeMaxFileSize=
|
|
||||||
#RuntimeMaxFiles=100
|
|
||||||
#MaxRetentionSec=
|
|
||||||
#MaxFileSec=1month
|
|
||||||
#ForwardToSyslog=no
|
|
||||||
#ForwardToKMsg=no
|
|
||||||
#ForwardToConsole=no
|
|
||||||
#ForwardToWall=yes
|
|
||||||
#TTYPath=/dev/console
|
|
||||||
#MaxLevelStore=debug
|
|
||||||
#MaxLevelSyslog=debug
|
|
||||||
#MaxLevelKMsg=notice
|
|
||||||
#MaxLevelConsole=info
|
|
||||||
#MaxLevelWall=emerg
|
|
||||||
#LineMax=48K
|
|
||||||
#ReadKMsg=yes
|
|
||||||
#Audit=yes
|
|
3
pi4/files/etc/systemd/journald.conf.d/99-ramlog.conf
Normal file
3
pi4/files/etc/systemd/journald.conf.d/99-ramlog.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[Journal]
|
||||||
|
Storage=volatile
|
||||||
|
SystemMaxUse=20M
|
3
pi4/files/etc/vconsole.conf
Normal file
3
pi4/files/etc/vconsole.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# This is the fallback vconsole configuration provided by systemd.
|
||||||
|
|
||||||
|
KEYMAP=us_alt
|
103
pi4/files/root/rename-user.sh
Executable file
103
pi4/files/root/rename-user.sh
Executable file
@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Renames a user
|
||||||
|
# Required arguments: old user name, new user name
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
question() {
|
||||||
|
echo
|
||||||
|
echo "$@"
|
||||||
|
read -r answer
|
||||||
|
answer="${answer:0:1}"
|
||||||
|
answer="${answer^}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $# -ne 2 ]]; then
|
||||||
|
echo "Usage: $0 old-user new-user"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
oldUser="$1"
|
||||||
|
newUser="$2"
|
||||||
|
|
||||||
|
# Make sure old user exists
|
||||||
|
if ! id "$oldUser" >/dev/null 2>&1; then
|
||||||
|
echo "The user $oldUser does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure old user is not logged in
|
||||||
|
if pgrep -u "$oldUser" >/dev/null; then
|
||||||
|
echo "The user $oldUser is currently logged in or has running processes. Cannot continue."
|
||||||
|
question "Would you like to forcibly log out $oldUser? (Y/N)"
|
||||||
|
if [[ "$answer" != "Y" ]]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
systemctl stop display-manager
|
||||||
|
loginctl terminate-user "$oldUser"
|
||||||
|
sleep 2
|
||||||
|
if pgrep -u "$oldUser" >/dev/null; then
|
||||||
|
echo "The user $oldUser still has running processes after termination. Cannot continue."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure new user does not exist
|
||||||
|
if id "$newUser" >/dev/null 2>&1; then
|
||||||
|
echo "The user name $newUser is already taken."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure the new name is acceptable
|
||||||
|
if ! [[ "$newUser" =~ ^[a-z_][a-z0-9_-]{0,31}$ ]]; then
|
||||||
|
echo "$newUser is not an acceptable user name."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Passed all safety checks, proceed with the rename
|
||||||
|
echo "Renaming $oldUser to $newUser..."
|
||||||
|
groups=$(id -nG "$oldUser")
|
||||||
|
groups="${groups// /,}"
|
||||||
|
usermod -G "$groups" -m -d "/home/$newUser" -l "$newUser" "$oldUser"
|
||||||
|
|
||||||
|
# Update nodm.conf if it exists
|
||||||
|
if [[ -e /etc/nodm.conf ]]; then
|
||||||
|
echo "Updating /etc/nodm.conf..."
|
||||||
|
sed -i -e "s#^NODM_USER=.*#NODM_USER='$newUser'#" -e "s#^NODM_XSESSION=.*#NODM_XSESSION='/home/$newUser/.xinitrc'#" /etc/nodm.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy over crontab if it exists
|
||||||
|
if crontab -u "$oldUser" -l >/tmp/${oldUser}_crontab.bak 2>/dev/null; then
|
||||||
|
echo "Copying over crontab..."
|
||||||
|
if crontab -u "$newUser" "/tmp/${oldUser}_crontab.bak"; then
|
||||||
|
rm "/tmp/${oldUser}_crontab.bak"
|
||||||
|
else
|
||||||
|
echo "Warning: failed to restore crontab for $newUser."
|
||||||
|
rm "/tmp/${oldUser}_crontab.bak"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update linger
|
||||||
|
if [[ -e "/var/lib/systemd/linger/$oldUser" ]]; then
|
||||||
|
echo "Enabling linger..."
|
||||||
|
mv "/var/lib/systemd/linger/$oldUser" "/var/lib/systemd/linger/$newUser"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Optionally update files in new home directory
|
||||||
|
echo
|
||||||
|
echo "Would you like to search for references to $oldUser and update them to $newUser in files located in /home/$newUser?"
|
||||||
|
question "This can take a while. (Y/N)"
|
||||||
|
if [[ "$answer" == "Y" ]]; then
|
||||||
|
echo "Updating files..."
|
||||||
|
find "/home/$newUser" -type f -exec grep -Iq . "{}" \; -and -exec sed -i "s|$oldUser|$newUser|g" "{}" \;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Rename complete. The user, $newUser, is now available."
|
||||||
|
question "Would you like to reboot?"
|
||||||
|
if [[ "${answer}" == "Y" ]]; then
|
||||||
|
reboot
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@ -54,6 +54,30 @@ set_timezone() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# make sure the system is at a decent volume
|
||||||
|
volume=50
|
||||||
|
wait=0
|
||||||
|
|
||||||
|
# Wait for pipewire to become available
|
||||||
|
while [[ $wait -lt 30 ]]; do
|
||||||
|
if pgrep pipewire &> /dev/null ; then
|
||||||
|
wait=30 # We don't want to continue the loop
|
||||||
|
else
|
||||||
|
sleep 1
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
while [[ $volume -le 130 ]]; do
|
||||||
|
clear
|
||||||
|
spd-say "If this is loud enough, press enter."
|
||||||
|
if read -t4 ; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
((volume+=10))
|
||||||
|
fi
|
||||||
|
pactl set-sink-volume @DEFAULT_SINK@ "${volume}%"
|
||||||
|
done
|
||||||
|
((wait++))
|
||||||
|
done
|
||||||
# Offer to switch fenrir layout.
|
# Offer to switch fenrir layout.
|
||||||
echo "Would you like to switch Fenrir to laptop layout?"
|
echo "Would you like to switch Fenrir to laptop layout?"
|
||||||
echo "Press y for yes or n for no followed by enter."
|
echo "Press y for yes or n for no followed by enter."
|
||||||
@ -81,17 +105,10 @@ fi
|
|||||||
|
|
||||||
if ! ping -c1 stormux.org &> /dev/null ; then
|
if ! ping -c1 stormux.org &> /dev/null ; then
|
||||||
echo "No internet connection detected. Press enter to open NetworkManager."
|
echo "No internet connection detected. Press enter to open NetworkManager."
|
||||||
echo "Note, it is best to put Fenrir into highlight mode while using NetworkManager."
|
|
||||||
echo "In desktop layout this is done by pressing Fenrir+numpad asterisk."
|
|
||||||
echo "That is the key just above numpad 9."
|
|
||||||
echo "In laptop mode, press Fenrir+y."
|
|
||||||
echo "In desktop mode the Fenrir key is numpad insert."
|
|
||||||
echo "In laptop mode the Fenrir key is the Super key, sometimes called the Windows key."
|
|
||||||
echo "After connecting to the internet, remember to go back to cursor mode."
|
|
||||||
echo "It is the same key used to switch to highlight mode."
|
|
||||||
echo "Press enter to continue."
|
|
||||||
read -r continue
|
read -r continue
|
||||||
|
echo "setting set focus#highlight=True" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
|
||||||
nmtui-connect
|
nmtui-connect
|
||||||
|
echo "setting set focus#highlight=False" | socat - UNIX-CLIENT:/tmp/fenrirscreenreader-deamon.sock
|
||||||
fi
|
fi
|
||||||
# Check for internet connectivity
|
# Check for internet connectivity
|
||||||
if ping -qc1 -W 1 stormux.org &> /dev/null; then
|
if ping -qc1 -W 1 stormux.org &> /dev/null; then
|
||||||
|
BIN
pi4/files/usr/share/kbd/keymaps/i386/qwerty/us_alt.map.gz
Normal file
BIN
pi4/files/usr/share/kbd/keymaps/i386/qwerty/us_alt.map.gz
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user