17 Commits

Author SHA1 Message Date
d706c613f3 Removed commented out section for installing packages now handled by 'partition.sh' 2025-07-11 22:07:29 -04:00
8ed4ca0653 Added condition to create 'lpadmin' group if missing 2025-07-11 22:06:42 -04:00
adf5b299bb Added 'zstd' to list of packages to install into chroot 2025-07-11 22:05:54 -04:00
aa422f434e '/mnt/etc/apt/sources.list' will get removed due to being redundent and not in deb822(?) format 2025-07-11 21:32:53 -04:00
66204958d9 Moved 'dosfstool' and 'systemd-timesyncd' package installation from 'install.sh' to 'partition.sh' 2025-07-11 21:30:53 -04:00
2ddb6bdfb8 Added '--format=directory' for 'mmdebstrap' 2025-07-11 21:28:39 -04:00
fca5e6c6fc Added '--mode=root' for 'mmdebstrap' 2025-07-11 21:28:11 -04:00
7135728394 Removed 'firmware-ipw2x00' package from installation list due to license agreement issues with 'mmdebstrap' 2025-07-11 21:23:39 -04:00
f0bfcbad56 Added '--components=main,non-free-firmware,contrib' for 'mmdebstrap' 2025-07-11 21:22:28 -04:00
2fdc93d9a1 Added '*kate-swp' to '.gitignore' 2025-07-11 21:20:39 -04:00
fc18016a9e Put packages back on sepeate lines, each with their own --include= preceding them 2025-07-11 21:13:25 -04:00
aafbd7ef8f MAde all packages for --include in mmdebstrap one line 2025-07-11 21:01:42 -04:00
fcf09e2ffc Added --skip=check/empty to mmdebstrap 2025-07-11 21:00:45 -04:00
cda85111e7 Changed a hostname lookup from the ${HOST} variable to the hostname command 2025-07-11 20:48:36 -04:00
d1e3cedd1f Changed a hostname lookup from the ${HOST} variable to the hostname command 2025-07-11 20:47:43 -04:00
d85a175989 Fixed contrib.sources not writing to correct path. Changed tee's redirection from &> to 1> 2025-07-11 20:46:31 -04:00
39065008aa Replaced debootstrap with mmdebstrap, added packages from install.sh to --include for mmdebstrap, and commented out relevent section in install.sh 2025-07-11 20:24:57 -04:00
8 changed files with 601 additions and 705 deletions

View File

@@ -1,78 +0,0 @@
#!/bin/bash
set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
source \
/etc/os-release
source \
"${BASEDIR}/system.conf"
if [[ "${1}" == '-1' ]]; then
mmdebstrap \
--skip=check/empty \
--components=main,non-free-firmware,contrib \
--mode=root \
--format=directory \
--include=console-setup \
--include=cryptsetup \
--include=curl \
--include=dosfstools \
--include=dpkg-dev \
--include=efibootmgr \
--include=ethtool \
--include=firmware-{ast,atheros,bnx{2,2x},brcm80211,iwlwifi,libertas,linux,realtek,zd1211} \
--include=flatpak \
--include=keyboard-configuration \
--include=linux-{headers,image}-amd64 \
--include=locales \
--include=nano \
--include=network-manager \
--include=openssh-{client,server} \
--include=popularity-contest \
--include=printer-driver-all \
--include=systemd-timesyncd \
--include=tasksel \
--include=zstd \
"${VERSION_CODENAME}" \
/mnt
elif [[ "${1}" == '-2' ]]; then
NETWORK_INTERFACE=($(ip -br addr show | sed 's| .*$||g' | grep -v '^lo' | grep -v 'tailscale' | grep -v '^wg'))
shopt -s extglob
for ((i = 0; i < ${#NETWORK_INTERFACE[@]}; i++)); do
cat << EOF | tee /mnt/etc/network/interfaces.d/${NETWORK_INTERFACE[$i]} &> /dev/null
allow-hotplug ${NETWORK_INTERFACE[$i]}
iface ${NETWORK_INTERFACE[$i]} inet dhcp
EOF
done
elif [[ "${1}" == '-3' ]]; then
cat << EOF | tee /mnt/etc/apt/sources.list.d/${VERSION_CODENAME}.sources &> /dev/null
# ${VERSION_CODENAME^}
Enabled: yes
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: ${VERSION_CODENAME}
Components: main non-free-firmware contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# ${VERSION_CODENAME^} Security
Enabled: yes
Types: deb deb-src
URIs: http://deb.debian.org/debian-security/
Suites: ${VERSION_CODENAME}-security
Components: main non-free-firmware contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# ${VERSION_CODENAME^} Updates
Enabled: yes
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: ${VERSION_CODENAME}-updates
Components: main non-free-firmware contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
rm /mnt/etc/apt/sources.list
fi

View File

@@ -1,50 +0,0 @@
#!/bin/bash
set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
source \
/etc/os-release
source \
"${BASEDIR}/system.conf"
if [[ "${1}" == '-1' ]]; then
mmdebstrap \
--include='' \
"${UBUNTU_VERSION_CODENAME}" \
/mnt
elif [[ "${1}" == '-2' ]]; then
cat <<EOF >/mnt/etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME} main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME} main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-updates main restricted universe multiverse
EOF
cat <<EOF >/mnt/etc/apt/sources.list.d/elementary.list
deb https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu ${UBUNTU_VERSION_CODENAME} main
deb-src https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu ${UBUNTU_VERSION_CODENAME} main
EOF
cat <<EOF >/mnt/etc/apt/sources.list.d/patches.list
deb https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu ${UBUNTU_VERSION_CODENAME} main
deb-src https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu ${UBUNTU_VERSION_CODENAME} main
EOF
elif [[ "${1}" == '-3' ]]; then
rsync -pogAXtlHrDx \
/etc/skel \
/mnt/etc
elif [[ "${1}" == '-4' ]]; then
cp \
/etc/os-release \
/mnt/etc
cp \
/etc/apt/trusted.gpg.d/{elementary,patches}.key.asc \
/mnt/etc/apt/trusted.gpg.d/
fi

View File

@@ -1,36 +0,0 @@
#!/bin/bash
set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
source \
/etc/os-release
source \
"${BASEDIR}/system.conf"
if [[ "${1}" == '-1' ]]; then
mkdir -p /run/install
if [[ "${VERSION_ID}" -lt '41' ]]; then
mount /dev/mapper/live-base /run/install
else
mount /dev/live-base /run/install
fi
rsync -pogAXtlHrDx \
--stats \
--exclude=/boot/efi/* \
--exclude=/etc/machine-id \
--info=progress2 \
/run/install/ /mnt
elif [[ "${1}" == '-2' ]]; then
mv /mnt/etc/resolv.conf \
/mnt/etc/resolv.conf.orig
cp -L \
/etc/resolv.conf \
/mnt/etc
elif [[ "${1}" == '-3' ]]; then
#
fi

View File

@@ -26,10 +26,10 @@ while [[ ! "${OPTION}" == 'Exit' ]]; do
################# #################
EOF EOF
select OPTION in 'List' 'Configure' 'Pre Install' 'Install' 'WiFi Setup' 'Post Install' 'Finalize' 'Exit' select OPTION in 'List' 'Configure' 'Partition' 'Install' 'WiFi Setup' 'Post Install' 'Finalize' 'Exit'
do do
case "${OPTION}" in case "${OPTION}" in
'List'|'Configure'|'Pre Install'|'Install'|'WiFi Setup'|'Post Install'|'Finalize'|'Exit') 'List'|'Configure'|'Partition'|'Install'|'WiFi Setup'|'Post Install'|'Finalize'|'Exit')
break break
;; ;;
*) *)
@@ -44,8 +44,8 @@ EOF
"${BASEDIR}/list.sh" "${BASEDIR}/list.sh"
elif [[ "${OPTION}" == 'Configure' ]]; then elif [[ "${OPTION}" == 'Configure' ]]; then
"${BASEDIR}/configure.sh" "${BASEDIR}/configure.sh"
elif [[ "${OPTION}" == 'Pre Install' ]]; then elif [[ "${OPTION}" == 'Partition' ]]; then
"${BASEDIR}/pre-inst.sh" "${BASEDIR}/partition.sh"
elif [[ "${OPTION}" == 'Install' ]]; then elif [[ "${OPTION}" == 'Install' ]]; then
"${BASEDIR}/install.sh" "${BASEDIR}/install.sh"
elif [[ "${OPTION}" == 'WiFi Setup' ]]; then elif [[ "${OPTION}" == 'WiFi Setup' ]]; then

View File

@@ -1,274 +0,0 @@
#!/bin/bash
set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
source \
/etc/os-release
source \
"${BASEDIR}/system.conf"
if [[ ! "${DISK}" == **/dev/disk/by-id/** ]]; then
if [[ "${DISK}" == **/dev/nvme** ]]; then
PART3='p3'
else
PART3='3'
fi
else
PART3='-part3'
fi
# if [[ ! "${*}" = *--no-part* ]]; then
if [[ "${ENCRYPTION}" == 'yes' ]]; then
ZPOOL_PASSWORD='A'
ZPOOL_PASSWORD_VERIFY='B'
printf \
'\033[?47h\033[2J\033[H'
while [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]] || [[ -z "${ZPOOL_PASSWORD}" ]] || [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; do
printf \
"\nEnter a password to encrypt your root pool (minimum 8 characters):\n"
read \
-r \
-s \
ZPOOL_PASSWORD
printf \
"\nVerify the password to encrypt your root pool:\n"
read \
-r \
-s \
ZPOOL_PASSWORD_VERIFY
if [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]]; then
printf \
"ERROR:\tPasswords do not match!\n"
elif [[ -z "${ZPOOL_PASSWORD}" ]]; then
printf \
"ERROR:\tPassword is empty!\n"
elif [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; then
printf \
"ERROR:\tPassword is too short!\n"
fi
done
printf \
'\033[?47l'
mkdir \
-p \
/etc/zfs/keys/
printf \
"${ZPOOL_PASSWORD}\n" | tee /etc/zfs/keys/${HOSTNAME,,}.key &> /dev/null
chmod \
000 \
/etc/zfs/keys/${HOSTNAME,,}.key
zpool create \
-o ashift=12 \
-o autotrim=on \
-o compatibility=openzfs-2.1-linux \
-O encryption=on \
-O keylocation=file:///etc/zfs/keys/${HOSTNAME,,}.key \
-O keyformat=passphrase \
-O acltype=posixacl \
-O xattr=sa \
-O dnodesize=auto \
-O compression=zstd-3 \
-O normalization=formD \
-O relatime=on \
-O canmount=off \
-O mountpoint=/ \
-R /mnt \
${HOSTNAME,,} \
${DISK}${PART3}
else
zpool create \
-o ashift=12 \
-o autotrim=on \
-o compatibility=openzfs-2.1-linux \
-O encryption=off \
-O acltype=posixacl \
-O xattr=sa \
-O dnodesize=auto \
-O compression=zstd-3 \
-O normalization=formD \
-O relatime=on \
-O canmount=off \
-O mountpoint=/ \
-R /mnt \
${HOSTNAME,,} \
${DISK}${PART3}
fi
zfs create \
-o canmount=off \
-o mountpoint=none \
${HOSTNAME,,}/ROOT
# else
# zpool import \
# -N \
# -R \
# /mnt \
# ${HOSTNAME,,}
#
# zfs load-key \
# -r \
# -L prompt \
# ${HOSTNAME,,}
# fi
zfs create \
-o canmount=noauto \
-o mountpoint=/ \
${HOSTNAME,,}/ROOT/${ID}
zfs mount \
${HOSTNAME,,}/ROOT/${ID}
# if [[ ! "${*}" = *--no-part* ]]; then
zfs create \
${HOSTNAME,,}/home
zfs create \
-o mountpoint=/root \
${HOSTNAME,,}/home/root
chmod \
700 \
/mnt/root
zfs create \
-o canmount=off \
-o mountpoint=/var \
${HOSTNAME,,}/var
zfs create \
-o canmount=off \
${HOSTNAME,,}/var/lib
zfs create \
${HOSTNAME,,}/var/log
zfs create \
${HOSTNAME,,}/var/spool
zfs create \
-o com.sun:auto-snapshot=false \
${HOSTNAME,,}/var/cache
zfs create \
-o com.sun:auto-snapshot=false \
${HOSTNAME,,}/var/lib/nfs
zfs create \
-o com.sun:auto-snapshot=false \
${HOSTNAME,,}/var/tmp
chmod \
1777 \
/mnt/var/tmp
zfs create \
-o mountpoint=/srv \
${HOSTNAME,,}/srv
zfs create \
-o canmount=off \
-o mountpoint=/usr \
${HOSTNAME,,}/usr
zfs create \
${HOSTNAME,,}/usr/local
zfs create \
${HOSTNAME,,}/var/games
zfs create \
${HOSTNAME,,}/var/lib/AccountsService
zfs create \
${HOSTNAME,,}/var/lib/NetworkManager
zfs create \
${HOSTNAME,,}/var/www
zfs create \
-o com.sun:auto-snapshot=false \
-o mountpoint=/tmp \
${HOSTNAME,,}/tmp
if [[ "${ENCRYPTION}" == 'yes' ]]; then
zfs create \
-o com.sun:auto-snapshot=false \
-o mountpoint=/etc/zfs/keys \
${HOSTNAME,,}/keystore
fi
zpool set \
bootfs=${HOSTNAME,,}/ROOT/${ID} \
${HOSTNAME,,}
# else
# zfs mount \
# ${HOSTNAME,,}/home
#
# zfs mount \
# ${HOSTNAME,,}/home/root
#
# zfs mount \
# ${HOSTNAME,,}/var/log
#
# zfs mount \
# ${HOSTNAME,,}/var/spool
#
# zfs mount \
# ${HOSTNAME,,}/var/cache
#
# zfs mount \
# ${HOSTNAME,,}/var/lib/nfs
#
# zfs mount \
# ${HOSTNAME,,}/var/tmp
#
# zfs mount \
# ${HOSTNAME,,}/srv
#
# zfs mount \
# ${HOSTNAME,,}/usr/local
#
# zfs mount \
# ${HOSTNAME,,}/var/games
#
# zfs mount \
# ${HOSTNAME,,}/var/lib/AccountsService
#
# zfs mount \
# ${HOSTNAME,,}/var/lib/NetworkManager
#
# zfs mount \
# ${HOSTNAME,,}/var/www
#
# zfs mount \
# ${HOSTNAME,,}/keystore
# fi
if [[ "${ID}" == 'fedora' ]]; then
"${BASEDIR}/base-fedora.sh" -1
fi
# if [[ ! "${*}" = *--no-part* ]]; then
zfs create \
${HOSTNAME,,}/var/mail
chmod \
1777 \
/mnt/tmp
# else
# zfs mount \
# ${HOSTNAME,,}/var/mail
# fi

View File

@@ -3,6 +3,27 @@ set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")" BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
printf \
'\033[?47l\012'
cat << EOF
#######################################
## ##
## $(cat "${BASEDIR}/title") Script ##
## ##
## Jean <jean@easthighnerd.net> ##
## ##
#######################################
#################
## ##
## Partition ##
## ##
#################
EOF
source \ source \
/etc/os-release /etc/os-release
source \ source \
@@ -18,41 +39,584 @@ else
PART3='-part3' PART3='-part3'
fi fi
if [[ "${ID}" == 'debian' ]]; then
if [[ ! "$(hostname)" == "debian-live" ]]; then
cat << EOF | tee /etc/apt/sources.list.d/contrib.sources 1> /dev/null
Enabled: yes
Types: deb
URIs: http://deb.debian.org/debian/
Suites: ${VERSION_CODENAME}
Components: contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
fi
fi
if [[ -f '/usr/bin/gsettings' ]]; then
gsettings \
set \
org.gnome.desktop.media-handling \
automount \
false
fi
if [[ "${ID}" == 'debian' ]]; then
apt \
update && \
apt \
install \
--yes \
mmdebstrap \
gdisk \
zfsutils-linux \
systemd-timesyncd
elif [[ "${ID}" == 'fedora' ]]; then
if [[ "${VERSION_ID}" -lt '41' ]]; then
dnf config-manager \
--disable \
updates
else
dnf config-manager \
setopt \
updates.enabled=0
fi
dnf install \
-y \
https://zfsonlinux.org/fedora/zfs-release-${ZOL_FEDORA_VER}$(rpm --eval "%{dist}").noarch.rpm
dnf install \
-y \
https://dl.fedoraproject.org/pub/fedora/linux/releases/${VERSION_ID}/Everything/x86_64/os/Packages/k/kernel-devel-$(uname -r).rpm
dnf install \
-y \
zfs \
gdisk
modprobe \
zfs
fi
timedatectl
if [[ ! "$(hostname)" == "debian-live" ]]; then
zgenhostid \
-f \
0x00bab10c
fi
swapoff \ swapoff \
--all --all
wipefs \ if [[ ! "${*}" = *--no-part* ]]; then
-a \ wipefs \
${DISK} -a \
if [[ ! "${DISK_TYPE}" == 'HDD' ]]; then
blkdiscard \
-f \
${DISK} ${DISK}
fi
sgdisk \ if [[ ! "${DISK_TYPE}" == 'HDD' ]]; then
--zap-all \ blkdiscard \
${DISK} -f \
${DISK}
sgdisk \ fi
-n1:0:+512M \
-t1:EF00 \
-c1:EFI \
${DISK}
if [[ "${ENABLE_SWAP}" == "yes" ]]; then
SWAP_SIZE="$(((($(vmstat -sS M | grep 'total memory' | sed 's/ M total memory//') / 1024) + 1) * 2))"
sgdisk \ sgdisk \
-n2:0:+${SWAP_SIZE}G \ --zap-all \
-t2:BF02 \
-c2:swap \
${DISK} ${DISK}
sgdisk \
-n1:0:+512M \
-t1:EF00 \
-c1:EFI \
${DISK}
if [[ "${ENABLE_SWAP}" == "yes" ]]; then
SWAP_SIZE="$(((($(vmstat -sS M | grep 'total memory' | sed 's/ M total memory//') / 1024) + 1) * 2))"
sgdisk \
-n2:0:+${SWAP_SIZE}G \
-t2:BF02 \
-c2:swap \
${DISK}
fi
sgdisk \
-n3:0:0 \
-t3:BF00 \
-c3:${ID} \
${DISK}
sleep 5
if [[ "${ENCRYPTION}" == 'yes' ]]; then
ZPOOL_PASSWORD='A'
ZPOOL_PASSWORD_VERIFY='B'
printf \
'\033[?47h\033[2J\033[H'
while [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]] || [[ -z "${ZPOOL_PASSWORD}" ]] || [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; do
printf \
"\nEnter a password to encrypt your root pool (minimum 8 characters):\n"
read \
-r \
-s \
ZPOOL_PASSWORD
printf \
"\nVerify the password to encrypt your root pool:\n"
read \
-r \
-s \
ZPOOL_PASSWORD_VERIFY
if [[ ! "${ZPOOL_PASSWORD}" == "${ZPOOL_PASSWORD_VERIFY}" ]]; then
printf \
"ERROR:\tPasswords do not match!\n"
elif [[ -z "${ZPOOL_PASSWORD}" ]]; then
printf \
"ERROR:\tPassword is empty!\n"
elif [[ "${#ZPOOL_PASSWORD}" -lt '8' ]]; then
printf \
"ERROR:\tPassword is too short!\n"
fi
done
printf \
'\033[?47l'
mkdir \
-p \
/etc/zfs/keys/
printf \
"${ZPOOL_PASSWORD}\n" | tee /etc/zfs/keys/${HOSTNAME,,}.key &> /dev/null
chmod \
000 \
/etc/zfs/keys/${HOSTNAME,,}.key
zpool create \
-o ashift=12 \
-o autotrim=on \
-o compatibility=openzfs-2.1-linux \
-O encryption=on \
-O keylocation=file:///etc/zfs/keys/${HOSTNAME,,}.key \
-O keyformat=passphrase \
-O acltype=posixacl \
-O xattr=sa \
-O dnodesize=auto \
-O compression=zstd-3 \
-O normalization=formD \
-O relatime=on \
-O canmount=off \
-O mountpoint=/ \
-R /mnt \
${HOSTNAME,,} \
${DISK}${PART3}
else
zpool create \
-o ashift=12 \
-o autotrim=on \
-o compatibility=openzfs-2.1-linux \
-O encryption=off \
-O acltype=posixacl \
-O xattr=sa \
-O dnodesize=auto \
-O compression=zstd-3 \
-O normalization=formD \
-O relatime=on \
-O canmount=off \
-O mountpoint=/ \
-R /mnt \
${HOSTNAME,,} \
${DISK}${PART3}
fi
zfs create \
-o canmount=off \
-o mountpoint=none \
${HOSTNAME,,}/ROOT
else
zpool import \
-N \
-R \
/mnt \
${HOSTNAME,,}
zfs load-key \
-r \
-L prompt \
${HOSTNAME,,}
fi fi
sgdisk \ zfs create \
-n3:0:0 \ -o canmount=noauto \
-t3:BF00 \ -o mountpoint=/ \
-c3:${ID} \ ${HOSTNAME,,}/ROOT/${ID}
${DISK}
zfs mount \
${HOSTNAME,,}/ROOT/${ID}
if [[ ! "${*}" = *--no-part* ]]; then
zfs create \
${HOSTNAME,,}/home
zfs create \
-o mountpoint=/root \
${HOSTNAME,,}/home/root
chmod \
700 \
/mnt/root
zfs create \
-o canmount=off \
-o mountpoint=/var \
${HOSTNAME,,}/var
zfs create \
-o canmount=off \
${HOSTNAME,,}/var/lib
zfs create \
${HOSTNAME,,}/var/log
zfs create \
${HOSTNAME,,}/var/spool
zfs create \
-o com.sun:auto-snapshot=false \
${HOSTNAME,,}/var/cache
zfs create \
-o com.sun:auto-snapshot=false \
${HOSTNAME,,}/var/lib/nfs
zfs create \
-o com.sun:auto-snapshot=false \
${HOSTNAME,,}/var/tmp
chmod \
1777 \
/mnt/var/tmp
zfs create \
-o mountpoint=/srv \
${HOSTNAME,,}/srv
zfs create \
-o canmount=off \
-o mountpoint=/usr \
${HOSTNAME,,}/usr
zfs create \
${HOSTNAME,,}/usr/local
zfs create \
${HOSTNAME,,}/var/games
zfs create \
${HOSTNAME,,}/var/lib/AccountsService
zfs create \
${HOSTNAME,,}/var/lib/NetworkManager
zfs create \
${HOSTNAME,,}/var/www
zfs create \
-o com.sun:auto-snapshot=false \
-o mountpoint=/tmp \
${HOSTNAME,,}/tmp
if [[ "${ENCRYPTION}" == 'yes' ]]; then
zfs create \
-o com.sun:auto-snapshot=false \
-o mountpoint=/etc/zfs/keys \
${HOSTNAME,,}/keystore
fi
zpool set \
bootfs=${HOSTNAME,,}/ROOT/${ID} \
${HOSTNAME,,}
else
zfs mount \
${HOSTNAME,,}/home
zfs mount \
${HOSTNAME,,}/home/root
zfs mount \
${HOSTNAME,,}/var/log
zfs mount \
${HOSTNAME,,}/var/spool
zfs mount \
${HOSTNAME,,}/var/cache
zfs mount \
${HOSTNAME,,}/var/lib/nfs
zfs mount \
${HOSTNAME,,}/var/tmp
zfs mount \
${HOSTNAME,,}/srv
zfs mount \
${HOSTNAME,,}/usr/local
zfs mount \
${HOSTNAME,,}/var/games
zfs mount \
${HOSTNAME,,}/var/lib/AccountsService
zfs mount \
${HOSTNAME,,}/var/lib/NetworkManager
zfs mount \
${HOSTNAME,,}/var/www
zfs mount \
${HOSTNAME,,}/keystore
fi
if [[ "${ID}" == 'fedora' ]]; then
mkdir -p /run/install
if [[ "${VERSION_ID}" -lt '41' ]]; then
mount /dev/mapper/live-base /run/install
else
mount /dev/live-base /run/install
fi
rsync -pogAXtlHrDx \
--stats \
--exclude=/boot/efi/* \
--exclude=/etc/machine-id \
--info=progress2 \
/run/install/ /mnt
fi
if [[ ! "${*}" = *--no-part* ]]; then
zfs create \
${HOSTNAME,,}/var/mail
chmod \
1777 \
/mnt/tmp
else
zfs mount \
${HOSTNAME,,}/var/mail
fi
mkdir \
-p \
/mnt/run
mount \
-t \
tmpfs \
tmpfs \
/mnt/run
mkdir \
-p \
/mnt/run/lock
if [[ "${ID}" == 'elementary' ]]; then
mmdebstrap \
--include='' \
"${UBUNTU_VERSION_CODENAME}" \
/mnt
elif [[ "${ID}" == 'debian' ]]; then
mmdebstrap \
--skip=check/empty \
--components=main,non-free-firmware,contrib \
--mode=root \
--format=directory \
--include=console-setup \
--include=cryptsetup \
--include=curl \
--include=dosfstools \
--include=dpkg-dev \
--include=efibootmgr \
--include=ethtool \
--include=firmware-{ast,atheros,bnx{2,2x},brcm80211,iwlwifi,libertas,linux,realtek,zd1211} \
--include=flatpak \
--include=keyboard-configuration \
--include=linux-{headers,image}-amd64 \
--include=locales \
--include=nano \
--include=network-manager \
--include=openssh-{client,server} \
--include=popularity-contest \
--include=printer-driver-all \
--include=systemd-timesyncd \
--include=tasksel \
--include=zstd \
"${VERSION_CODENAME}" \
/mnt
fi
printf \
"${HOSTNAME}\n" | tee /mnt/etc/hostname &> /dev/null
printf \
"127.0.1.1\t${HOSTNAME}\n" | tee --append /mnt/etc/hosts &> /dev/null
if [[ "${ID}" == 'debian' ]]; then
NETWORK_INTERFACE=($(ip -br addr show | sed 's| .*$||g' | grep -v '^lo' | grep -v 'tailscale' | grep -v '^wg'))
shopt -s extglob
for ((i = 0; i < ${#NETWORK_INTERFACE[@]}; i++)); do
cat << EOF | tee /mnt/etc/network/interfaces.d/${NETWORK_INTERFACE[$i]} &> /dev/null
allow-hotplug ${NETWORK_INTERFACE[$i]}
iface ${NETWORK_INTERFACE[$i]} inet dhcp
EOF
done
fi
if [[ "${ID}" == 'elementary' ]]; then
cat <<EOF >/mnt/etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME} main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME} main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ ${UBUNTU_VERSION_CODENAME}-updates main restricted universe multiverse
EOF
cat <<EOF >/mnt/etc/apt/sources.list.d/elementary.list
deb https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu ${UBUNTU_VERSION_CODENAME} main
deb-src https://ppa.launchpadcontent.net/elementary-os/stable/ubuntu ${UBUNTU_VERSION_CODENAME} main
EOF
cat <<EOF >/mnt/etc/apt/sources.list.d/patches.list
deb https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu ${UBUNTU_VERSION_CODENAME} main
deb-src https://ppa.launchpadcontent.net/elementary-os/os-patches/ubuntu ${UBUNTU_VERSION_CODENAME} main
EOF
elif [[ "${ID}" == 'debian' ]]; then
cat << EOF | tee /mnt/etc/apt/sources.list.d/${VERSION_CODENAME}.sources &> /dev/null
# ${VERSION_CODENAME^}
Enabled: yes
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: ${VERSION_CODENAME}
Components: main non-free-firmware contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# ${VERSION_CODENAME^} Security
Enabled: yes
Types: deb deb-src
URIs: http://deb.debian.org/debian-security/
Suites: ${VERSION_CODENAME}-security
Components: main non-free-firmware contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# ${VERSION_CODENAME^} Updates
Enabled: yes
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: ${VERSION_CODENAME}-updates
Components: main non-free-firmware contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
rm /mnt/etc/apt/sources.list
fi
mount \
--rbind \
/dev \
/mnt/dev
mount \
--rbind \
/proc \
/mnt/proc
mount \
--rbind \
/sys \
/mnt/sys
cp \
/etc/hostid \
/mnt/etc/
if [[ "${ID}" == 'fedora' ]]; then
mv /mnt/etc/resolv.conf \
/mnt/etc/resolv.conf.orig
cp -L \
/etc/resolv.conf \
/mnt/etc
fi
rsync -pogAXtlHrDx \
"${BASEDIR}" \
/mnt
if [[ "${ID}" == 'elementary' ]]; then
rsync -pogAXtlHrDx \
/etc/skel \
/mnt/etc
fi
if [[ ! "${*}" = *--no-part* ]]; then
if [[ -f "/etc/zfs/keys/${HOSTNAME,,}.key" ]]; then
cp \
/etc/zfs/keys/${HOSTNAME,,}.key \
/mnt/etc/zfs/keys/
fi
fi
if [[ "${ID}" == 'elementary' ]]; then
cp \
/etc/os-release \
/mnt/etc
cp \
/etc/apt/trusted.gpg.d/{elementary,patches}.key.asc \
/mnt/etc/apt/trusted.gpg.d/
fi
printf \
"\nNow chrooting into /mnt...\n\n"
chroot \
/mnt \
bash \
--login
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -I {} umount -Rlf {}
if [[ "${ID}" == 'fedora' ]]; then
umount \
-nR \
/mnt
fi
zpool \
export \
-a
printf \
'\033[?47h\033[2J\033[H'
cat <<EOF
Script has finished running
Please reboot your computer
Press any key to return to the main menu
EOF
read -srn 1

View File

@@ -115,9 +115,7 @@ Pin: release n=${UBUNTU_VERSION_CODENAME}-backports
Pin-Priority: -1 Pin-Priority: -1
EOF EOF
elif [[ "${ID}" == 'debian' ]]; then elif [[ "${ID}" == 'debian' ]]; then
cat << EOF | tee --append /etc/apt/sources.list.d/${VERSION_CODENAME}.sources &> /dev/null cat << EOF | tee /etc/apt/sources.list.d/backports.sources &> /dev/null
# ${VERSION_CODENAME^} Backports
Enabled: yes Enabled: yes
Types: deb deb-src Types: deb deb-src
URIs: http://deb.debian.org/debian/ URIs: http://deb.debian.org/debian/
@@ -208,7 +206,7 @@ chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}
sudo -u ${USERNAME} cp -a /etc/skel/. /home/${USERNAME} sudo -u ${USERNAME} cp -a /etc/skel/. /home/${USERNAME}
if [[ ! -z "\$(find -P /home/${USERNAME}/ | grep '\.face')" ]]; then if [[ ! -z "$(find -P /home/${USERNAME}/ | grep '\.face')" ]]; then
find -P /home/${USERNAME}/ | grep '\.face' | xargs -d '\n' -I {} rm {} find -P /home/${USERNAME}/ | grep '\.face' | xargs -d '\n' -I {} rm {}
fi fi
@@ -233,11 +231,11 @@ EOF
if [[ "${ID}" == 'fedora' ]]; then if [[ "${ID}" == 'fedora' ]]; then
printf \ printf \
"@reboot\tsudo -u ${USERNAME} '${BASEDIR}/finalize.sh'\n@reboot\t/usr/bin/home-fix.sh\n" | \ '@reboot /usr/bin/home-fix.sh\n' | \
tee /var/spool/cron/root &> /dev/null tee /var/spool/cron/root &> /dev/null
elif [[ "${ID}" == 'debian' ]]; then elif [[ "${ID}" == 'debian' ]]; then
printf \ printf \
"@reboot\tsudo -u ${USERNAME} '${BASEDIR}/finalize.sh'\n@reboot\t/usr/bin/home-fix.sh\n" | \ '@reboot /usr/bin/home-fix.sh\n' | \
tee /var/spool/cron/crontabs/root &> /dev/null tee /var/spool/cron/crontabs/root &> /dev/null
chown \ chown \
@@ -250,14 +248,6 @@ EOF
fi fi
fi fi
if [[ ! -f '/usr/bin/shutdown' ]]; then
ln -s /sbin/shutdown /usr/bin/shutdown
fi
if [[ ! -f '/usr/bin/reboot' ]]; then
ln -s /sbin/reboot /usr/bin/reboot
fi
zfs \ zfs \
snapshot \ snapshot \
${HOSTNAME,,}/ROOT/${ID}@post-install ${HOSTNAME,,}/ROOT/${ID}@post-install
@@ -269,7 +259,7 @@ cat << EOF
Script has finished running Script has finished running
Please exit the chroot Please reboot your computer
Press any key to return to the main menu Press any key to return to the main menu
EOF EOF

View File

@@ -1,220 +0,0 @@
#!/bin/bash
set -euo pipefail
BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")"
printf \
'\033[?47l\012'
cat << EOF
#######################################
## ##
## $(cat "${BASEDIR}/title") Script ##
## ##
## Jean <jean@easthighnerd.net> ##
## ##
#######################################
####################
## ##
## Pre ##
## Installation ##
## ##
####################
EOF
source \
/etc/os-release
source \
"${BASEDIR}/system.conf"
if [[ "${ID}" == 'debian' ]]; then
if [[ ! "$(hostname)" == "debian-live" ]]; then
cat << EOF | tee /etc/apt/sources.list.d/contrib.sources 1> /dev/null
Enabled: yes
Types: deb
URIs: http://deb.debian.org/debian/
Suites: ${VERSION_CODENAME}
Components: contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
fi
fi
if [[ -f '/usr/bin/gsettings' ]]; then
gsettings \
set \
org.gnome.desktop.media-handling \
automount \
false
fi
if [[ "${ID}" == 'debian' ]]; then
apt \
update && \
apt \
install \
--yes \
mmdebstrap \
gdisk \
systemd-timesyncd \
whois \
zfsutils-linux
elif [[ "${ID}" == 'fedora' ]]; then
if [[ "${VERSION_ID}" -lt '41' ]]; then
dnf config-manager \
--disable \
updates
else
dnf config-manager \
setopt \
updates.enabled=0
fi
dnf install \
-y \
https://zfsonlinux.org/fedora/zfs-release-${ZOL_FEDORA_VER}$(rpm --eval "%{dist}").noarch.rpm
dnf install \
-y \
https://dl.fedoraproject.org/pub/fedora/linux/releases/${VERSION_ID}/Everything/x86_64/os/Packages/k/kernel-devel-$(uname -r).rpm
dnf install \
-y \
zfs \
gdisk
modprobe \
zfs
fi
timedatectl
if [[ ! "$(hostname)" == "debian-live" ]]; then
zgenhostid \
-f \
0x00bab10c
fi
"${BASEDIR}/partition.sh"
sleep 5
"${BASEDIR}/mkfs.zfs.sh"
mkdir \
-p \
/mnt/run
mount \
-t \
tmpfs \
tmpfs \
/mnt/run
mkdir \
-p \
/mnt/run/lock
if [[ "${ID}" == 'elementary' ]]; then
"${BASEDIR}/base-elementary.sh" -1
elif [[ "${ID}" == 'debian' ]]; then
"${BASEDIR}/base-debian.sh" -1
fi
printf \
"${HOSTNAME}\n" | tee /mnt/etc/hostname &> /dev/null
printf \
"127.0.1.1\t${HOSTNAME}\n" | tee --append /mnt/etc/hosts &> /dev/null
if [[ "${ID}" == 'debian' ]]; then
"${BASEDIR}/base-debian.sh" -2
fi
if [[ "${ID}" == 'elementary' ]]; then
"${BASEDIR}/base-elementary.sh" -2
elif [[ "${ID}" == 'debian' ]]; then
"${BASEDIR}/base-debian.sh" -3
fi
mount \
--rbind \
/dev \
/mnt/dev
mount \
--rbind \
/proc \
/mnt/proc
mount \
--rbind \
/sys \
/mnt/sys
cp \
/etc/hostid \
/mnt/etc/
if [[ "${ID}" == 'fedora' ]]; then
"${BASEDIR}/base-fedora.sh" -2
fi
rsync -pogAXtlHrDx \
"${BASEDIR}" \
/mnt
if [[ "${ID}" == 'elementary' ]]; then
"${BASEDIR}/base-elementary.sh" -3
fi
# if [[ ! "${*}" = *--no-part* ]]; then
if [[ -f "/etc/zfs/keys/${HOSTNAME,,}.key" ]]; then
cp \
/etc/zfs/keys/${HOSTNAME,,}.key \
/mnt/etc/zfs/keys/
fi
# fi
if [[ "${ID}" == 'elementary' ]]; then
"${BASEDIR}/base-elementary.sh" -4
fi
printf \
"\nNow chrooting into /mnt...\n\n"
chroot \
/mnt \
"$(printf "${BASEDIR}\n" | sed 's|.*\/|\/|')/install.sh"
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -I {} umount -Rlf {}
if [[ "${ID}" == 'fedora' ]]; then
umount \
-nR \
/mnt
fi
zpool \
export \
-a
printf \
'\033[?47h\033[2J\033[H'
cat <<EOF
Script has finished running
Please reboot your computer
Press any key to return to the main menu
EOF
read -srn 1