prepare for desktop and some improvements

This commit is contained in:
Laila van Reenen 2024-12-11 11:31:27 +01:00
parent c8f7181aad
commit 69ce912bd1
Signed by: LailaTheElf
GPG Key ID: 1F4E6EE3E6DDF769
6 changed files with 204 additions and 187 deletions

View File

@ -1,17 +1,12 @@
#!/bin/bash
# repos="$(curl \
# -X 'GET' 'https://gitea.finnvanreenen.nl/api/v1/user/repos?token=' \
# -H 'accept: application/json'\
# )"
token="b0e7fd2acc222a84e94a81c8de743a8e2a866d80"
token="$1"
page=1
project_dir="$HOME/projects"
base_url="https://gitea.finnvanreenen.nl/api/v1"
while [ "$page" -le 20 ]
while [[ $page < 21 ]]
do
echo
echo "## get repo list page $page"
@ -19,10 +14,11 @@ do
if [[ "$repos" != "[]" ]]
then
for repo in $(echo "$repos" | sed -e 's/^\[{//' -e 's/}]$//' -e 's/},{/\n/g' -e 's/ /%20/g')
for repo in $(echo "$repos" | sed -e 's/^\[{//' -e 's/}]$//' -e 's/},{/\n/g' -e 's/%/%p/g' -e 's/ /%20/g')
do
full_name="$(echo "$repo" | sed -e 's/^.*"full_name":"\([^"]*\)".*$/\1/' -e 's/%20/ /g')"
ssh_url="$(echo "$repo" | sed -e 's/^.*"ssh_url":"\([^"]*\)".*$/\1/' -e 's/%20/ /g')"
repo_json="$(echo "$repo" | sed -e 's/%20/ /g' -e 's/%p/%/g')"
full_name="$(echo "$repo_json" | sed -e 's/^.*"full_name":"\([^"]*\)".*$/\1/')"
ssh_url="$(echo "$repo_json" | sed -e 's/^.*"ssh_url":"\([^"]*\)".*$/\1/')"
echo
echo "### $full_name"
@ -30,7 +26,6 @@ do
then
cd "$project_dir/$full_name"
git fetch
git status
else
git clone "$ssh_url" "$project_dir/$full_name"
fi
@ -38,7 +33,7 @@ do
done
else
echo "No more repositories found."
page=200
page=999
fi
page=$(( $page + 1 ))

12
elfDesktop.sh Normal file
View File

@ -0,0 +1,12 @@
HOSTNAME="ELFDesktop"
UEFI_DISK="/dev/sdb"
DISK="/dev/sdb"
USERNAME="freenen"
SFDISK_FILE="./elfDesktop.sfdisk"
UEFI_PARTITION="${UEFI_DISK}1"
SWAP_PARTITION="${DISK}2"
ROOT_PARTITION="${DISK}3"
bash ./elf_os.sh

View File

@ -8,4 +8,4 @@ sector-size: 512
/dev/sdb1 : start= 2048, size= 2097152, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=486DA8A9-47F3-469D-9458-F29776D786A3, name="boot"
/dev/sdb2 : start= 2099200, size= 16777216, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=DCA4D33F-2283-48EE-98BF-739D527ABBBB
/dev/sdb3 : start= 18876416, size= 231192576, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=ACF561E3-BE4F-479A-A9EF-2C82B324E35E, name="root"
/dev/sdb3 : start= 18876416, size= 231192576, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=ACF561E3-BE4F-479A-A9EF-2C82B324E35E, name="elfroot"

View File

@ -4,169 +4,9 @@ UEFI_DISK="/dev/sdb"
DISK="/dev/sdb"
USERNAME="freenen"
SFDISK_FILE="./elfLaptop.sfdisk"
UEFI_PARTITION="${UEFI_DISK}1"
SWAP_PARTITION="${DISK}2"
ROOT_PARTITION="${DISK}3"
function run(){
echo "[ ] $1"
echo "# $1" >>install.log
echo "> $2" >>install.log
bash -c "$2" &>>install.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1"
bash -c "$3"
exit 10
}
echo >>install.log
}
function run-chroot(){
echo "[ ] $1"
echo "# $1" >>install.log
echo "> chroot /mnt $2" >>install.log
arch-chroot /mnt bash -c "$2" &>>install.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1"
bash -c "$3"
exit 20
}
echo >>install.log
}
echo "" >install.log
echo -n "disk encryption password: "
read -s PASS
echo
echo -n "retype password: "
read -s PASSRE
echo
if [ "$PASS" != "$PASSRE" ]; then
echo "password do not match"
exit 1
fi
echo -n "password for freenen: "
read -s PASS_USER
echo
echo -n "retype password: "
read -s PASSRE_USER
echo
if [ "$PASS_USER" != "$PASSRE_USER" ]; then
echo "password do not match"
exit 2
fi
echo
echo
echo === setup localisation
echo
run "enable ntp" "timedatectl set-ntp true"
run "set timezone" "timedatectl set-timezone Europe/Amsterdam"
echo
echo === setup partitions
echo
run "applly partion table" "sfdisk $DISK <./elfLaptop.sfdisk"
run "format boot partition" "mkfs.fat -F 32 ${UEFI_PARTITION}"
run "format swap partition" "mkswap ${SWAP_PARTITION}"
echo -n "$PASS" >keyfile.luks
run "encrypt root partition" "cryptsetup luksFormat --batch-mode --key-file keyfile.luks ${ROOT_PARTITION}" "rm keyfile.luks"
run "map root partitaion" "cryptsetup open --batch-mode --key-file keyfile.luks ${ROOT_PARTITION} cryptroot" "rm keyfile.luks"
rm keyfile.luks
run "format root partition" "mkfs.btrfs /dev/mapper/cryptroot"
run "mount root partition" "mount /dev/mapper/cryptroot /mnt"
run "create root btrfs subvolume" "btrfs subvolume create /mnt/@"
run "create home btrfs subvolume" "btrfs subvolume create /mnt/@home"
run "unmount btrfs" "umount /mnt"
run "mount root subvolume" "mount -o subvol=@ /dev/mapper/cryptroot /mnt"
run "mount boot partition" "mount --mkdir ${UEFI_PARTITION} /mnt/boot"
run "mount home subvolume" "mount --mkdir -o subvol=@home /dev/mapper/cryptroot /mnt/home"
run "enable swap" "swapon ${SWAP_PARTITION}"
echo
echo === install arch
echo
run "install base of arch" "pacstrap /mnt base linux linux-firmware"
run "intall utitlities" "pacstrap /mnt btrfs-progs man vim sudo"
run "intall networkmanager" "pacstrap /mnt networkmanager"
run "generate fstab" "genfstab -U /mnt >>/mnt/etc/fstab"
echo
echo === set locals
echo
run-chroot "set timezone" "ln -sf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime"
run-chroot "set hwclock to UTC" "hwclock --systohc"
run-chroot "update locals.gen" "sed --in-place -E -e 's/^#?en_GB.UTF-8/en_GB.UTF-8/' -e 's/^#?en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen"
run-chroot "generate locals" "locale-gen"
run-chroot "config locals" "echo \"LANG=en_GB.UTF-8\" >/etc/locale.conf"
run-chroot "set hostname" "echo \"$HOSTNAME\" >/etc/hostname"
run-chroot "create hosts file" "cat >/etc/hosts <<EOF
127.0.0.1 localhost
::1 localhost
127.0.1.1 $HOSTNAME
EOF
"
echo
echo === install bootloader
echo
run-chroot "config initramfs" "sed --in-place -e 's/HOOKS=(.*)/HOOKS=(base udev autodetect microcode modconf kms keyboard block encrypt filesystems fsck)/' /etc/mkinitcpio.conf"
run-chroot "generate initramfs" "mkinitcpio -P"
DISKUUID=$(blkid --output export ${DISK}3 | grep '^UUID' | sed 's/UUID=//')
run-chroot "install systemd-boot" "bootctl install"
run-chroot "create boot config for main" "cat >/boot/loader/entries/arch.conf <<EOF
title E.L.F. OS
linux /vmlinuz-linux
initrd /initramfs-linux.img
options cryptdevice=UUID=$DISKUUID:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=@ rd.luks.options=discard rw
EOF
"
run-chroot "create boot config fallback" "cat >/boot/loader/entries/arch-fallback.conf <<EOF
title E.L.F. OS fallback
linux /vmlinuz-linux
initrd /initramfs-linux-fallback.img
options cryptdevice=UUID=$DISKUUID:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=@ rd.luks.options=discard rw
EOF
"
run-chroot "create main boot config" "cat >/boot/loader/loader.conf <<EOF
default arch.conf
timeout 4
console-mode max
editor no
EOF
"
echo
echo === setup user
echo
run-chroot "add .ssh dir to skel" "mkdir -p /etc/skel/.ssh"
run-chroot "create admin group" "groupadd admin"
#run-chroot "update polkit" "sed --in-place -e 's/wheel/admin/g' /usr/share/polkit-1/rules.d/50-default.rules"
run-chroot "create user" "useradd --home-dir /home/${USERNAME} --create-home --skel /etc/skel ${USERNAME} --groups admin"
run-chroot "set password for user" "echo \"${USERNAME}:$PASS_USER\" | chpasswd"
run-chroot "add user to sudoers" "echo \"%admin ALL=(ALL:ALL) ALL\" >>/etc/sudoers"
run-chroot "touch authoized keys" "touch /home/${USERNAME}/.ssh/authorized_keys"
run-chroot "add sshkeys for new user" "curl -o /home/${USERNAME}/.ssh/authorized_keys https://github.com/FReenen.keys"
#run-chroot "update fail lock" "sed --in-place -e 's/^deny = .*$/deny = 10/' -e 's/^unlock_time = .*$/unlock_time = 60/'"
echo
echo === umount and reboot
echo
run "umount drives" "umount -R /mnt"
run "close cryptroot" "cryptsetup close cryptroot"
run "reboot" "shutdown -r now"
bash ./elf_os.sh

161
elf_os.sh Normal file
View File

@ -0,0 +1,161 @@
function run(){
echo "[ ] $1"
echo "# $1" >>install.log
echo "> $2" >>install.log
bash -c "$2" &>>install.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1"
bash -c "$3"
exit 10
}
echo >>install.log
}
function run-chroot(){
echo "[ ] $1"
echo "# $1" >>install.log
echo "> chroot /mnt $2" >>install.log
arch-chroot /mnt bash -c "$2" &>>install.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1"
bash -c "$3"
exit 20
}
echo >>install.log
}
echo "" >install.log
echo -n "disk encryption password: "
read -s PASS
echo
echo -n "retype password: "
read -s PASSRE
echo
if [ "$PASS" != "$PASSRE" ]; then
echo "password do not match"
exit 1
fi
echo -n "password for freenen: "
read -s PASS_USER
echo
echo -n "retype password: "
read -s PASSRE_USER
echo
if [ "$PASS_USER" != "$PASSRE_USER" ]; then
echo "password do not match"
exit 2
fi
echo
echo
echo === setup localisation
echo
run "enable ntp" "timedatectl set-ntp true"
run "set timezone" "timedatectl set-timezone Europe/Amsterdam"
echo
echo === setup partitions
echo
run "applly partion table" "sfdisk $DISK <$SFDISK_FILE"
run "format boot partition" "mkfs.fat -F 32 ${UEFI_PARTITION}"
run "format swap partition" "mkswap ${SWAP_PARTITION}"
echo -n "$PASS" >keyfile.luks
run "encrypt root partition" "cryptsetup luksFormat --batch-mode --key-file keyfile.luks ${ROOT_PARTITION}" "rm keyfile.luks"
run "map root partitaion" "cryptsetup open --batch-mode --key-file keyfile.luks ${ROOT_PARTITION} cryptelfroot" "rm keyfile.luks"
rm keyfile.luks
run "format root partition" "mkfs.btrfs /dev/mapper/cryptelfroot"
run "mount root partition" "mount /dev/mapper/cryptelfroot /mnt"
run "create root btrfs subvolume" "btrfs subvolume create /mnt/@"
run "create home btrfs subvolume" "btrfs subvolume create /mnt/@home"
run "unmount btrfs" "umount /mnt"
run "mount root subvolume" "mount -o subvol=@ /dev/mapper/cryptelfroot /mnt"
run "mount boot partition" "mount --mkdir ${UEFI_PARTITION} /mnt/boot"
run "mount home subvolume" "mount --mkdir -o subvol=@home /dev/mapper/cryptelfroot /mnt/home"
run "enable swap" "swapon ${SWAP_PARTITION}"
echo
echo === install arch
echo
run "install base of arch" "pacstrap /mnt base linux linux-firmware"
run "intall utitlities" "pacstrap /mnt btrfs-progs man vim sudo"
run "intall networkmanager" "pacstrap /mnt networkmanager"
run "generate fstab" "genfstab -U /mnt >>/mnt/etc/fstab"
echo
echo === set locals
echo
run-chroot "set timezone" "ln -sf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime"
run-chroot "set hwclock to UTC" "hwclock --systohc"
run-chroot "update locals.gen" "sed --in-place -E -e 's/^#?en_GB.UTF-8/en_GB.UTF-8/' -e 's/^#?en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen"
run-chroot "generate locals" "locale-gen"
run-chroot "config locals" "echo \"LANG=en_GB.UTF-8\" >/etc/locale.conf"
run-chroot "set hostname" "echo \"$HOSTNAME\" >/etc/hostname"
run-chroot "create hosts file" "cat >/etc/hosts <<EOF
127.0.0.1 localhost
::1 localhost
127.0.1.1 $HOSTNAME
EOF
"
echo
echo === install bootloader
echo
run-chroot "config initramfs" "sed --in-place -e 's/HOOKS=(.*)/HOOKS=(base udev autodetect microcode modconf kms keyboard block encrypt filesystems fsck)/' /etc/mkinitcpio.conf"
run-chroot "generate initramfs" "mkinitcpio -P"
DISKUUID=$(blkid --output export ${DISK}3 | grep '^UUID' | sed 's/UUID=//')
run-chroot "install systemd-boot" "bootctl install"
run-chroot "create boot config for main" "cat >/boot/loader/entries/arch.conf <<EOF
title E.L.F. OS
linux /vmlinuz-linux
initrd /initramfs-linux.img
options cryptdevice=UUID=$DISKUUID:cryptelfroot:allow-discards root=/dev/mapper/cryptelfroot rootflags=subvol=@ rd.luks.options=discard rw
EOF
"
run-chroot "create boot config fallback" "cat >/boot/loader/entries/arch-fallback.conf <<EOF
title E.L.F. OS fallback
linux /vmlinuz-linux
initrd /initramfs-linux-fallback.img
options cryptdevice=UUID=$DISKUUID:cryptelfroot:allow-discards root=/dev/mapper/cryptelfroot rootflags=subvol=@ rd.luks.options=discard rw
EOF
"
run-chroot "create main boot config" "cat >/boot/loader/loader.conf <<EOF
default arch.conf
timeout 4
console-mode max
editor no
EOF
"
echo
echo === setup user
echo
run-chroot "add .ssh dir to skel" "mkdir -p /etc/skel/.ssh"
run-chroot "create admin group" "groupadd admin"
run-chroot "create user" "useradd --home-dir /home/${USERNAME} --create-home --skel /etc/skel ${USERNAME} --groups admin"
run-chroot "set password for user" "echo \"${USERNAME}:$PASS_USER\" | chpasswd"
run-chroot "add user to sudoers" "echo \"%admin ALL=(ALL:ALL) ALL\" >>/etc/sudoers"
run-chroot "touch authoized keys" "touch /home/${USERNAME}/.ssh/authorized_keys"
run-chroot "add sshkeys for new user" "curl -o /home/${USERNAME}/.ssh/authorized_keys https://github.com/FReenen.keys"
echo
echo === umount and reboot
echo
run "umount drives" "umount -R /mnt"
run "close cryptelfroot" "cryptsetup close cryptelfroot"
run "reboot" "shutdown -r now"

View File

@ -12,22 +12,23 @@ function run(){
box="sudo -u $USERNAME distrobox enter --name $1 --"
fi
echo "[ ] $1: $2"
echo "# $2" >>install.log
echo "$1> $3" >>install.log
bash -c "$box $3" &>>install.log \
echo "# $2" >>first-boot.log
echo "$1> $3" >>first-boot.log
bash -c "$box $3" &>>first-boot.log \
&& echo -e "\e[1A\e[K[ \e[32mOK\e[0m ] $1: $2" \
|| {
echo -e "\e[1A\e[K[\e[31mFAIL\e[0m] $1: $2"
bash -c "$4"
exit
}
echo >>install.log
echo >>first-boot.log
}
echo
echo === install tools
echo
run root "start NetworkManager" "NetworkManager"
run root "install base tools" "pacman -Sy --noconfirm \
usbutils dosfstools exfat-utils net-tools nmap \
vim curl ncdu neofetch btop git flatpak"
@ -36,11 +37,18 @@ run root "install gnome" "pacman -S --noconfirm gnome"
run root "install distrobox" "pacman -S --noconfirm docker distrobox"
run root "add $USERNAME to docker group" "usermod -aG docker $USERNAME"
run root "create home dirs" "sudo -u $USERNAME mkdir -p /home/$USERNAME/.local/python-env /home/$USERNAME/.ssh /home/$USERNAME/projects"
run root "create home dirs" "sudo -u $USERNAME mkdir -p \
/home/$USERNAME/.local/python-env \
/home/$USERNAME/.ssh \
/home/$USERNAME/projects \
/home/$USERNAME/.local/share/flatpak/overrides/"
# run ubuntu "create python env" "python3 -m venv /home/$USERNAME/.local/python-env"
run root "copy ssh config" "cp $SCRIPT_DIR/configs/sshConfig /home/$USERNAME/.ssh/config"
run root "copy git config" "cp $SCRIPT_DIR/configs/gitconfig /home/$USERNAME/.gitconfig"
run root "copy vim config" "cp $SCRIPT_DIR/configs/vimrc /home/$USERNAME/.vimrc"
run root "copy vim config" "cp $SCRIPT_DIR/configs/auto_clone.sh /home/$USERNAME/projects/auto_clone.sh"
run root "update polkit" "sed --in-place -e 's/wheel/admin/g' /usr/share/polkit-1/rules.d/50-default.rules"
run root "update fail lock" "sed --in-place -e 's/^deny = .*$/deny = 10/' -e 's/^unlock_time = .*$/unlock_time = 60/'"
echo
echo === setup blutooth
@ -67,20 +75,20 @@ run root "vscodium: build backage" "cd /tmp/vscodium-bin/ && sudo -u $USER
run root "vscodium: install" 'cd /tmp/vscodium-bin/ && pacman -U --noconfirm $(ls /tmp/vscodium-bin/vscodium-bin-*.pkg.tar.zst)'
run root "vscodium: add extentions" "codium --install-extension lvm-vs-code-extensions.vscode-clangd mhutchie.git-graph twxs.cmake"
run root "vscodium: add theros" "codium --install-extension teros-technology.teroshdl"
run root "install theros deps" "/home/$USERNAME/.local/python-env/bin/python3 -m pip teroshdl"
# run root "install theros deps" "/home/$USERNAME/.local/python-env/bin/python3 -m pip teroshdl"
# run root "vscodium: add theros" "codium --install-extension teros-technology.teroshdl"
echo
echo === install esp-idf
echo
run root "install esp-idf deps" "pacman -S flex bison gperf ninja ccache libffi dfu-util libusb"
run root "install esp-idf deps" "pacman -S --noconfirm flex bison gperf ninja ccache libffi dfu-util libusb"
run root "create folder for esp-idf" "mkdir /home/$USERNAME/.local/espressif"
run root "clone idf-extra-components" "git clone https://github.com/espressif/esp-idf.git /home/$USERNAME/.local/espressif/esp-idf"
run root "clone esp-idf" "git clone https://github.com/espressif/idf-extra-components.git /home/$USERNAME/.local/espressif/idf-extra-components"
run root "clone esp-protocols" "git clone https://github.com/espressif/esp-protocols.git /home/$USERNAME/.local/espressif/esp-protocols"
run root "clone esp-zigbee-sdk" "git clone https://github.com/espressif/esp-zigbee-sdk.git /home/$USERNAME/.local/espressif/esp-zigbee-sdk"
run root "install esp-idf" "IDF_TOOLS_PATH=/home/freenen/.local/espressif /home/$USERNAME/.local/espressif/esp-idf/install.sh all"
run root "install esp-idf" "IDF_TOOLS_PATH=/home/$USERNAME/.local/espressif /home/$USERNAME/.local/espressif/esp-idf/install.sh all"
echo
echo === install flatpaks
@ -91,16 +99,17 @@ function install_flatpak() {
}
run root "copy flatpak overrides" "cp $SCRIPT_DIR/configs/flatpak/* /home/$USERNAME/.local/share/flatpak/overrides/"
install_flatpak org.mozilla.firefox
install_flatpak md.obsidian.Obsidian
install_flatpak org.mozilla.Thunderbird
# install_flatpak org.mozilla.Firefox
install_flatpak com.discordapp.Discord
install_flatpak com.github.tchx84.Flatseal
install_flatpak com.yubico.yubioath
install_flatpak org.filezillaproject.Filezilla
install_flatpak org.gnome.moserial
# install_flatpak org.gnome.moserial
install_flatpak com.gitlab.cutecom.cutecom
install_flatpak org.raspberrypi.rpi-imager
install_flatpak org.sdrangel.SDRangel
# install_flatpak org.sdrangel.SDRangel
install_flatpak fr.handbrake.ghb
install_flatpak org.inkscape.Inkscape
install_flatpak org.gnome.Rhythmbox3