2024-10-23 18:15:07 +02:00
#!/bin/bash
if [ " $EUID " -ne 0 ]
then echo "Please run Einrichter (TylkoLinux) using administrative permissions."
exit
fi
2024-10-23 18:15:26 +02:00
SCRIPT_DIR = $( cd -- " $( dirname -- " ${ BASH_SOURCE [0] } " ) " & > /dev/null && pwd )
EINRICHTER_VER = 0.1.0
2025-01-27 02:45:11 +01:00
function booter( ) {
2024-11-10 17:56:27 +01:00
einrichter.colours
2025-01-03 19:15:55 +01:00
echo " Einrichter - TylkoLinux Installer Shell $EINRICHTER_VER
The script is located at $SCRIPT_DIR
Run einrichter.help for commands"
2025-01-27 02:45:11 +01:00
main
}
function main( ) {
read -p "einrichter> " Command_Input
2025-01-03 19:15:55 +01:00
$Command_Input
main
}
2025-01-27 02:45:11 +01:00
function einrichter.help( ) {
2025-01-03 19:15:55 +01:00
echo " Einrichter commands:
einrichter.installer.pkgs - Prepare packages for installation
einrichter.installer.DirLayout - Set up the directories at the target system
einrichter.installer.SafeUser - Set up LFS user on host and starting package compilation
einrichter.installer.chroot - Enter the environment using chroot
einrichter.help - Show this help dialog
2025-01-27 02:45:11 +01:00
einrichter.backup.create - Create a backup of the system to the home folder
einrichter.backup.restore - Restore the aforementioned backup
exit - Exit the script
2025-01-03 19:15:55 +01:00
For more information, see https://github.com/kevadesu/TylkoLinux"
2024-10-23 18:15:07 +02:00
}
2024-10-23 20:54:05 +02:00
function einrichter.colours( ) {
# Reset
Color_Off = '\033[0m' # Text Reset
# Regular Colors
2025-01-26 22:10:02 +01:00
export Black = '\033[0;30m' # Black
export Red = '\033[0;31m' # Red
export Green = '\033[0;32m' # Green
export Yellow = '\033[0;33m' # Yellow
export Blue = '\033[0;34m' # Blue
export Purple = '\033[0;35m' # Purple
export Cyan = '\033[0;36m' # Cyan
export White = '\033[0;37m' # White
2024-10-23 20:54:05 +02:00
# Bold
2025-01-26 22:10:02 +01:00
export BBlack = '\033[1;30m' # Black
export BRed = '\033[1;31m' # Red
export BGreen = '\033[1;32m' # Green
export BYellow = '\033[1;33m' # Yellow
export BBlue = '\033[1;34m' # Blue
export BPurple = '\033[1;35m' # Purple
export BCyan = '\033[1;36m' # Cyan
export BWhite = '\033[1;37m' # White
2024-10-23 20:54:05 +02:00
# Underline
2025-01-26 22:10:02 +01:00
export UBlack = '\033[4;30m' # Black
export URed = '\033[4;31m' # Red
export UGreen = '\033[4;32m' # Green
export UYellow = '\033[4;33m' # Yellow
export UBlue = '\033[4;34m' # Blue
export UPurple = '\033[4;35m' # Purple
export UCyan = '\033[4;36m' # Cyan
export UWhite = '\033[4;37m' # White
2024-10-23 20:54:05 +02:00
# Background
2025-01-26 22:10:02 +01:00
export On_Black = '\033[40m' # Black
export On_Red = '\033[41m' # Red
export On_Green = '\033[42m' # Green
export On_Yellow = '\033[43m' # Yellow
export On_Blue = '\033[44m' # Blue
export On_Purple = '\033[45m' # Purple
export On_Cyan = '\033[46m' # Cyan
export On_White = '\033[47m' # White
2024-10-23 20:54:05 +02:00
# High Intensity
2025-01-26 22:10:02 +01:00
export IBlack = '\033[0;90m' # Black
export IRed = '\033[0;91m' # Red
export IGreen = '\033[0;92m' # Green
export IYellow = '\033[0;93m' # Yellow
export IBlue = '\033[0;94m' # Blue
export IPurple = '\033[0;95m' # Purple
export ICyan = '\033[0;96m' # Cyan
export IWhite = '\033[0;97m' # White
2024-10-23 20:54:05 +02:00
# Bold High Intensity
2025-01-26 22:10:02 +01:00
export BIBlack = '\033[1;90m' # Black
export BIRed = '\033[1;91m' # Red
export BIGreen = '\033[1;92m' # Green
export BIYellow = '\033[1;93m' # Yellow
export BIBlue = '\033[1;94m' # Blue
export BIPurple = '\033[1;95m' # Purple
export BICyan = '\033[1;96m' # Cyan
export BIWhite = '\033[1;97m' # White
2024-10-23 20:54:05 +02:00
# High Intensity backgrounds
2025-01-26 22:10:02 +01:00
export On_IBlack = '\033[0;100m' # Black
export On_IRed = '\033[0;101m' # Red
export On_IGreen = '\033[0;102m' # Green
export On_IYellow = '\033[0;103m' # Yellow
export On_IBlue = '\033[0;104m' # Blue
export On_IPurple = '\033[0;105m' # Purple
export On_ICyan = '\033[0;106m' # Cyan
export On_IWhite = '\033[0;107m' # White
2025-01-27 02:45:11 +01:00
echo -e " ${ Purple } [i] The colour variables have been set. ${ Color_Off } "
2024-10-23 20:54:05 +02:00
}
2024-10-23 18:15:07 +02:00
function einrichter.installer.pkgs( ) {
2024-10-23 20:54:05 +02:00
echo -e "[i] Preparing TylkoLinux for installation..."
2024-10-23 18:15:26 +02:00
mkdir $LFS /sources
2024-10-23 20:54:05 +02:00
echo -e " ${ BPurple } [1/6] Downloading package list... "
2024-10-23 18:15:07 +02:00
wget https://www.linuxfromscratch.org/lfs/view/stable-systemd/wget-list-systemd --continue --directory-prefix= $LFS /sources
2024-10-23 20:54:05 +02:00
echo -e "[2/6] Downloading checksum of packages"
2025-01-29 18:06:13 +01:00
wget $SCRIPT_DIR /md5sums --continue --directory-prefix= $LFS /sources
2024-10-23 20:54:05 +02:00
echo -e "[3/6] Download packages..."
2025-01-29 18:06:13 +01:00
wget --input-file= $SCRIPT_DIR /wget-list-systemd --continue --directory-prefix= $LFS /sources
2024-10-23 20:54:05 +02:00
echo -e "[4/6] Verifying packages..."
2024-10-23 18:15:07 +02:00
pushd $LFS /sources
2024-10-23 18:15:26 +02:00
function einrichter.installer.pkgs.verify( ) {
2025-01-29 18:06:13 +01:00
md5sum -c $LFS /sources/md5sums || einrichter.error PKG_VER_ERR
2024-10-23 18:15:26 +02:00
}
popd
2024-10-23 20:54:05 +02:00
echo -e "[5/6] Downloading patches..."
2024-10-23 18:15:26 +02:00
mkdir $LFS /sources/patches
wget --input-file= lfs-patch-list --continue --directory-prefix= $LFS /sources/patches
2024-10-23 20:54:05 +02:00
echo -e "[6/6] Verifying patches..."
2024-10-23 18:15:26 +02:00
pushd $LFS /sources/patches
function einrichter.installer.pkgs.verify.patches( ) {
md5sum -c $SCRIPT_DIR /lfs-patch-list-checksum || FAILURE_CODE = ec12737
}
einrichter.installer.pkgs.verify.patches || einrichter.installer.fail
2024-10-23 18:15:07 +02:00
popd
2025-01-03 19:15:55 +01:00
echo -e "[i] Finished section installer.pkgs"
2024-10-23 18:15:07 +02:00
}
2024-10-23 20:54:05 +02:00
function einrichter.installer.DirLayout( ) {
echo -e " ${ BCyan } [i] ${ Cyan } Making directories... ${ Color_Off } "
mkdir -pv $LFS /{ etc,var} $LFS /usr/{ bin,lib,sbin}
echo -e " ${ BCyan } [i] ${ Cyan } Linking directories... ${ Color_Off } "
for i in bin lib sbin; do
ln -sv usr/$i $LFS /$i
done
echo -e " ${ BCyan } [i] ${ Cyan } Checking if this system is x64... ${ Color_Off } "
case $( uname -m) in
x86_64) mkdir -pv $LFS /lib64 ; ;
esac
mkdir -pv $LFS /tools
}
function einrichter.installer.SafeUser( ) {
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
echo -e " ${ BBlue } [i] ${ Blue } Assign the lfs user a password. ${ Color_Off } "
passwd lfs
echo -e " ${ BBlue } [i] ${ Blue } Granting the lfs user full access to all directories... ${ Color_Off } "
chown -v lfs $LFS /{ usr{ ,/*} ,lib,var,etc,bin,sbin,tools}
case $( uname -m) in
x86_64) chown -v lfs $LFS /lib64 ; ;
esac
echo -e " ${ BBlue } [i] ${ Blue } Copying second installer to home directory of the lfs user... ${ Color_Off } "
cp $SCRIPT_DIR /Einrichter-as-LFS.sh /home/lfs/
echo -e " ${ BBlue } [i] ${ Blue } Changing the ownership of file to the lfs user... ${ Color_Off } "
chown -v lfs /home/lfs/Einrichter-as-LFS.sh
echo -e " ${ BBlue } [i] ${ Blue } Making the installer executable... ${ Color_Off } "
chmod -v +x /home/lfs/Einrichter-as-LFS.sh
echo -e " ${ BBlue } [i] ${ Blue } Moving the host's bash.bashrc file aside if found... (THIS WILL BE RESTORED AFTER THE END OF THE INSTALLATION!) ${ Color_Off } "
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
2024-11-02 23:10:12 +01:00
echo -e " ${ BBlue } [i] ${ Blue } Assigning permissions to the user lfs for the drive ${ LFS } ... ${ Color_Off } "
chown -v lfs $LFS /{ usr{ ,/*} ,lib,var,etc,bin,sbin,tools}
case $( uname -m) in
x86_64) chown -v lfs $LFS /lib64 ; ;
esac
2024-10-23 20:54:05 +02:00
echo -e " ${ BBlue } [i] ${ Blue } Attempting login as lfs... ${ Color_Off } "
echo -e " ${ BBlue } [i] ${ Blue } You are about to switch to the LFS user. When you log in, run the Einrichter-as-LFS.sh script located in your home directory by typing \"./Einrichter-as-LFS.sh\". ${ Color_Off } "
su - lfs
2025-01-03 19:15:55 +01:00
einrichter.installer.SafeUser.End
}
function einrichter.installer.SafeUser.End( ) {
echo -e " ${ BBlue } [i] ${ Blue } Completed! ${ Color_Off } "
echo -e "[i] Finished section installer.SafeUser"
2024-10-23 20:54:05 +02:00
}
2024-11-10 17:56:27 +01:00
function einrichter.installer.chroot( ) {
chown --from lfs -R root:root $LFS /{ usr,lib,var,etc,bin,sbin,tools}
2024-10-23 20:54:05 +02:00
case $( uname -m) in
2024-11-10 17:56:27 +01:00
x86_64) chown --from lfs -R root:root $LFS /lib64 ; ;
2024-10-23 20:54:05 +02:00
esac
2024-11-10 17:56:27 +01:00
echo -e " ${ BBlue } [i] ${ Blue } Copying third installer to the root of ${ LFS } ... ${ Color_Off } "
cp $SCRIPT_DIR /Einrichter-in-chroot.sh $LFS /
echo -e " ${ BBlue } [i] ${ Blue } Making the installer executable... ${ Color_Off } "
chmod +x $LFS /Einrichter-in-chroot.sh
2025-01-03 19:15:55 +01:00
echo -e " ${ BBlue } [i] ${ Blue } Preparing the Virtual Kernel File Systems... ${ Color_Off } "
mkdir -pv $LFS /{ dev,proc,sys,run}
mount -v --bind /dev $LFS /dev
mount -vt devpts devpts -o gid = 5,mode= 0620 $LFS /dev/pts
mount -vt proc proc $LFS /proc
mount -vt sysfs sysfs $LFS /sys
mount -vt tmpfs tmpfs $LFS /run
if [ -h $LFS /dev/shm ] ; then
2025-01-26 22:10:02 +01:00
install -v -d -m 1777 " $LFS $( realpath /dev/shm) "
2025-01-03 19:15:55 +01:00
else
mount -vt tmpfs -o nosuid,nodev tmpfs $LFS /dev/shm
fi
2024-11-10 17:56:27 +01:00
echo -e " ${ BBlue } [i] ${ Blue } Attempting chroot... ${ Color_Off } "
echo -e " ${ BBlue } [i] ${ Blue } You are about to switch to the chroot environment. When you enter the chroot environment, run the Einrichter-in-chroot.sh script located in the root of the filesystem by typing \"/Einrichter-in-chroot.sh\". ${ Color_Off } "
2025-01-03 19:15:55 +01:00
chroot " $LFS " /usr/bin/env -i \
2025-01-09 17:41:28 +01:00
HOME = /root \
TERM = " $TERM " \
PS1 = '(lfs chroot) \u:\w\$ ' \
PATH = /usr/bin:/usr/sbin \
MAKEFLAGS = " -j $( nproc) " \
TESTSUITEFLAGS = " -j $( nproc) " \
2025-01-03 19:15:55 +01:00
/bin/bash --login
2025-01-27 02:45:11 +01:00
einrichter.installer.chroot.end
2025-01-03 19:15:55 +01:00
}
function einrichter.installer.chroot.end( ) {
echo -e "[i] Unmounting virtual file system..."
mountpoint -q $LFS /dev/shm && umount $LFS /dev/shm
umount $LFS /dev/pts
umount $LFS /{ sys,proc,run,dev}
echo -e "[i] Finished section installer.chroot"
}
function einrichter.backup.create( ) {
2025-01-27 02:45:11 +01:00
echo -e " ${ BRed } [?] Variable LFS points to ${ LFS } . This needs to point to the target LFS system.
2025-01-03 19:15:55 +01:00
If this does NOT point to the LFS directory, EXIT NOW AND SET THE VARIABLE. This will otherwise
2025-01-27 02:45:11 +01:00
DESTROY THE ENTIRE HOST SYSTEM. YOU ARE WARNED.${ Color_Off } "
2025-01-03 19:15:55 +01:00
read -p "[?] Continue? (y/n) " OPT
if [ " $OPT " = "y" ] ; then echo "Continuing..." ; else exit 1; fi
echo "[i] Unmounting the virtual file systems..."
mountpoint -q $LFS /dev/shm && umount $LFS /dev/shm
umount $LFS /dev/pts
umount $LFS /{ sys,proc,run,dev}
echo "[i] Making the backup archive..."
cd $LFS
tar -cJpf $HOME /lfs-temp-tools-12.2-systemd.tar.xz .
echo "[i] OK!"
}
function einrichter.backup.restore( ) {
2025-01-27 02:45:11 +01:00
echo -e " ${ BRed } [?] Variable LFS points to ${ LFS } . This needs to point to the target LFS system.
2025-01-03 19:15:55 +01:00
If this does NOT point to the LFS directory, EXIT NOW AND SET THE VARIABLE. This will otherwise
2025-01-27 02:45:11 +01:00
DESTROY THE ENTIRE HOST SYSTEM. YOU ARE WARNED.${ Color_Off } "
2025-01-03 19:15:55 +01:00
read -p "[?] Continue? (y/n) " OPT
echo "[i] Restoring from backup..."
cd $LFS
rm -rf ./*
tar -xpf $HOME /lfs-temp-tools-12.2-systemd.tar.xz
echo "[i] OK!"
2024-10-23 20:54:05 +02:00
}
2024-11-02 23:10:12 +01:00
2024-10-23 18:15:07 +02:00
function einrichter.installer.bg( ) {
2025-01-26 22:10:02 +01:00
echo "E"
2024-10-23 18:15:07 +02:00
}
2024-10-23 18:15:26 +02:00
2025-01-29 18:06:13 +01:00
function einrichter.error( ) {
echo -e " ${ BBlue } [i] ${ Blue } The installer has encountered a critical error and needs to quit. ${ Color_Off } "
case " $@ " in
"PKG_VER_ERR" )
2024-10-23 20:54:05 +02:00
echo -e " ${ BRed } [!] ${ Red } The verification of the packages has failed. This could be an issue on either your side of the Installer's. Please report this error to the github.com/kevadesu/TylkoLinux repository. ${ Color_Off } "
2025-01-29 18:06:13 +01:00
; ;
"PKG_DWD_FAIL" )
echo -e " ${ BRed } [!] ${ Red } Downloading packages, patches and/or the package list . This could be an issue on either your side of the Installer's. Please report this error to the github.com/kevadesu/TylkoLinux repository. ${ Color_Off } "
; ;
2024-10-23 18:15:26 +02:00
*)
2024-10-23 20:54:05 +02:00
echo -e " ${ BRed } [!] ${ Red } The installation failed due to an unknown error. ${ Color_Off } "
2025-01-29 18:06:13 +01:00
; ;
2024-10-23 18:15:26 +02:00
esac
}
2024-10-23 18:15:07 +02:00
2025-01-27 02:45:11 +01:00
booter