Compare commits
	
		
			2 Commits 
		
	
	
		
			cc16479341
			...
			db6c18e67a
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  BodgeMaster | db6c18e67a | |
|  BodgeMaster | b36a64f223 | 
							
								
								
									
										14
									
								
								README.md
								
								
								
								
							
							
						
						
									
										14
									
								
								README.md
								
								
								
								
							|  | @ -4,23 +4,25 @@ This repository holds a bunch of scripts for installing and customizing | ||||||
| Void Linux to run off a USB stick. | Void Linux to run off a USB stick. | ||||||
| 
 | 
 | ||||||
| There are a couple manual steps to get started before this script can take over: | There are a couple manual steps to get started before this script can take over: | ||||||
| - Set up a Void live image | - Set up a Void live medium | ||||||
|   - Download here: https://voidlinux.org/download/ |   - Download here: https://voidlinux.org/download/ | ||||||
|     - The base image is good enough (don’t waste your time) |     - The following instructions assume you downloaded the "base" image | ||||||
|   - Burn to a CD/DVD or flash it to a USB stick |   - Burn to a CD/DVD or flash it to a USB stick | ||||||
|     - Windows should have a built-in thing for burning ISOs. |     - Windows should have a built-in thing for burning ISOs. | ||||||
|     - You can use something like Win32DiskImager or Rufus for USB sticks. |     - You can use something like Win32DiskImager or Rufus for USB sticks. | ||||||
|       - This will delete what’s on the stick. |       - This will delete what’s on the stick. | ||||||
| - Boot into Void live and prepare things | - Boot into Void live and prepare things | ||||||
|   - How to boot off CD/USB depends on your computer, so you’ll have to find out elsewhere (sorry). |   - Two things I can’t help you with (sorry): | ||||||
|  |     - How to boot off CD/USB depends on your computer, so you’ll have to find out elsewhere. | ||||||
|  |     - Be aware that Void uses a US keymap until you change it. If your keyboard is different, you might need to look up an image of a US keyboard to find the right keys. | ||||||
|   - If you are booting off the USB stick you want to install to, use the (RAM) option. |   - If you are booting off the USB stick you want to install to, use the (RAM) option. | ||||||
|   - Log in as `root`, password `voidlinux` |   - Log in as `root`, password `voidlinux` | ||||||
|   - Run `void-installer` |   - If you need to use WiFi, run `void-installer` | ||||||
|     - set your keyboard layout (optional) |     - set your keyboard layout (optional) | ||||||
|     - connect to your network |     - connect to your network | ||||||
|     - abort the installation |     - abort the installation | ||||||
| - Download and run stage 1 of the USB installation | - Download and run stage 1 of the USB installation script | ||||||
|   - `xbps-install -S wget` |   - The base image doesn’t come with a way to download files so you need to install that first: `xbps-install -S wget` | ||||||
|     - if it yells at you about updating xbps, do that, then try again |     - if it yells at you about updating xbps, do that, then try again | ||||||
|   - `wget https://lostcave.ddnss.de/git/BodgeMaster/void-minecraft-usb/raw/branch/master/install-stage1.sh` |   - `wget https://lostcave.ddnss.de/git/BodgeMaster/void-minecraft-usb/raw/branch/master/install-stage1.sh` | ||||||
|   - `bash install-stage1.sh` |   - `bash install-stage1.sh` | ||||||
|  |  | ||||||
|  | @ -15,13 +15,32 @@ function are_you_really_really_sure { | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | function yesno { | ||||||
|  |   unset DISCARD_ME | ||||||
|  |   while [ -z "$DISCARD_ME" ]; do | ||||||
|  |     read -p "[y/n]" -n1 DISCARD_ME | ||||||
|  |     case "$DISCARD_ME" in | ||||||
|  |       y) | ||||||
|  |         return 0 | ||||||
|  |         ;; | ||||||
|  |       n) | ||||||
|  |         return 1 | ||||||
|  |         ;; | ||||||
|  |       *) | ||||||
|  |         echo " Please enter y for yes or n for no." | ||||||
|  |         unset DISCARD_ME | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
|  |   done | ||||||
|  | } | ||||||
|  | 
 | ||||||
| clear | clear | ||||||
| echo " | echo " | ||||||
| This script will now install Void Linux on your USB stick. | This script will now download and install Void Linux on your USB stick. | ||||||
| It will be formatted and will not be usable from Windows or MacOS. | Any data that is currently on the stick will be lost and it won’t be | ||||||
|  | usable from Windows or MacOS. | ||||||
| 
 | 
 | ||||||
| Before we begin, let’s make sure some dependencies are installed on the host/live system: | Before we begin, the following tools need to be installed: | ||||||
| - up-to-date xbps |  | ||||||
| - xmirror | - xmirror | ||||||
| - squashfs-tools" | - squashfs-tools" | ||||||
| press_any_key | press_any_key | ||||||
|  | @ -39,12 +58,13 @@ KBD_LAYOUT="de-latin1" | ||||||
| clear | clear | ||||||
| echo "Select the USB stick to install to (NAME column below)... | echo "Select the USB stick to install to (NAME column below)... | ||||||
| " | " | ||||||
| lsblk --nodeps --output NAME,SIZE,MODEL | # exclude loop devices | ||||||
|  | lsblk --exclude 7 --nodeps --output NAME,SIZE,MODEL | ||||||
| echo "" | echo "" | ||||||
| read -p "> " TARGET_DISK | read -p "> " TARGET_DISK | ||||||
| 
 | 
 | ||||||
| while [ ! -b "/dev/$TARGET_DISK" ]; do | while [ ! -b "/dev/$TARGET_DISK" ]; do | ||||||
|   lsblk --nodeps --output NAME,SIZE,MODEL |   lsblk --exclude 7 --nodeps --output NAME,SIZE,MODEL | ||||||
|   echo "$TARGET_DISK is not a valid device!" |   echo "$TARGET_DISK is not a valid device!" | ||||||
|   read -p "> " TARGET_DISK |   read -p "> " TARGET_DISK | ||||||
| done | done | ||||||
|  | @ -125,8 +145,11 @@ clear | ||||||
| echo "Storage is now prepared and ready for installation. | echo "Storage is now prepared and ready for installation. | ||||||
| 
 | 
 | ||||||
| You need to select a download mirror for Void next. | You need to select a download mirror for Void next. | ||||||
| The script will launch xmirror on the host system and read the mirror | The script will launch xmirror on the host/live system and determine | ||||||
| from the config file it generates." | the chosen mirror from the config file it generates. | ||||||
|  | 
 | ||||||
|  | TODO: | ||||||
|  | " | ||||||
| press_any_key | press_any_key | ||||||
| 
 | 
 | ||||||
| xmirror | xmirror | ||||||
|  | @ -142,7 +165,7 @@ fi | ||||||
| mkdir -p /mnt/target/var/db/xbps/keys | mkdir -p /mnt/target/var/db/xbps/keys | ||||||
| cp /var/db/xbps/keys/* /mnt/target/var/db/xbps/keys/ | cp /var/db/xbps/keys/* /mnt/target/var/db/xbps/keys/ | ||||||
| 
 | 
 | ||||||
| XBPS_ARCH="$TARGET_TYPE" xbps-install -S -r /mnt/target -R "$TARGET_MIRROR" \ | XBPS_ARCH="$TARGET_TYPE" xbps-install --yes --sync --rootdir /mnt/target --repository "$TARGET_MIRROR" \ | ||||||
|   linux bash shadow f2fs-tools dosfstools dbus NetworkManager iana-etc \ |   linux bash shadow f2fs-tools dosfstools dbus NetworkManager iana-etc \ | ||||||
|   iw wpa_supplicant util-linux which tar man-pages iproute2 iputils \ |   iw wpa_supplicant util-linux which tar man-pages iproute2 iputils \ | ||||||
|   wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils \ |   wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils \ | ||||||
|  | @ -167,5 +190,84 @@ UUID=$(blkid --output value --match-tag UUID $TARGET_PART_EFI) /boot/efi vfat de | ||||||
| /container/home /home none bind 0 0 | /container/home /home none bind 0 0 | ||||||
| " > /mnt/target/etc/fstab | " > /mnt/target/etc/fstab | ||||||
| 
 | 
 | ||||||
|  | if grep "#KEYMAP=" /mnt/target/etc/rc.conf; then | ||||||
|  |   sed -i -e 's/#KEYMAP=.*/KEYMAP="'"$KBD_LAYOUT"'"/' | ||||||
|  | else | ||||||
|  |   clear | ||||||
|  |   echo "WARNING: Could not locate the keymap setting in rc.conf." | ||||||
|  |   echo "The script will attempt to add one." | ||||||
|  |   echo "" | ||||||
|  |   press_any_key | ||||||
|  |   echo "" >> /mnt/target/etc/rc.conf | ||||||
|  |   echo "# Install script could not find keymap setting, adding one here." >> /mnt/target/etc/rc.conf | ||||||
|  |   echo "KEYMAP=\"$KBD_LAYOUT\"" >> /mnt/target/etc/rc.conf | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | #TODO timezone | ||||||
|  | 
 | ||||||
|  | clear | ||||||
|  | echo "Set hardware clock to UTC? | ||||||
|  | 
 | ||||||
|  | Most Unix/Linux systems set the clock in your computer to UTC and add | ||||||
|  | the time zone on-the-fly. If you use Windows, you will want to answer no here. | ||||||
|  | " | ||||||
|  | if yesno; then | ||||||
|  |   if grep "#HARDWARECLOCK=" /mnt/target/etc/rc.conf; then | ||||||
|  |     sed -i -e 's/#HARDWARECLOCK=.*/HARDWARECLOCK="UTC"/' | ||||||
|  |   else | ||||||
|  |     clear | ||||||
|  |     echo "WARNING: Could not locate the hardwareclock setting in rc.conf." | ||||||
|  |     echo "The script will attempt to add one." | ||||||
|  |     echo "" | ||||||
|  |     press_any_key | ||||||
|  |     echo "" >> /mnt/target/etc/rc.conf | ||||||
|  |     echo "# Install script could not find hardwareclock setting, adding one here." >> /mnt/target/etc/rc.conf | ||||||
|  |     echo 'HARDWARECLOCK="UTC"' >> /mnt/target/etc/rc.conf | ||||||
|  |   fi | ||||||
|  | else | ||||||
|  |   if grep "#HARDWARECLOCK=" /mnt/target/etc/rc.conf; then | ||||||
|  |     sed -i -e 's/#HARDWARECLOCK=.*/HARDWARECLOCK="localtime"/' | ||||||
|  |   else | ||||||
|  |     clear | ||||||
|  |     echo "WARNING: Could not locate the hardwareclock setting in rc.conf." | ||||||
|  |     echo "The script will attempt to add one." | ||||||
|  |     echo "" | ||||||
|  |     press_any_key | ||||||
|  |     echo "" >> /mnt/target/etc/rc.conf | ||||||
|  |     echo "# Install script could not find hardwareclock setting, adding one here." >> /mnt/target/etc/rc.conf | ||||||
|  |     echo 'HARDWARECLOCK="localtime"' >> /mnt/target/etc/rc.conf | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | clear | ||||||
|  | echo "Do you want to set a hostname? | ||||||
|  | 
 | ||||||
|  | This is equivalent to giving a name to your computer - except it's a system | ||||||
|  | on a USB drive. | ||||||
|  | 
 | ||||||
|  | If you leave this empty, it will be set to void-usb. | ||||||
|  | Allowed characters are a-zA-Z0-9 (and - in the middle). | ||||||
|  | " | ||||||
|  | while [ -z "$TARGET_HOSTNAME" ]; do | ||||||
|  |   read -p "> " TARGET_HOSTNAME | ||||||
|  |   if [ -z "$TARGET_HOSTNAME" ]; then | ||||||
|  |     TARGET_HOSTNAME="void-usb" | ||||||
|  |   else | ||||||
|  |     if grep -e "^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$" -e "^[a-zA-Z0-9]*$" <<< "$TARGET_HOSTNAME" > /dev/null 2>&1; then | ||||||
|  |       echo "$TARGET_HOSTNAME" > /mnt/target/etc/hostname | ||||||
|  |     else | ||||||
|  |       echo "Allowed characters are a-zA-Z0-9 (and - in the middle)." | ||||||
|  |       unset TARGET_HOSTNAME | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
|  |  | ||||||
|  | @ -25,21 +25,23 @@ Steps to install: | ||||||
|     -> download and run install script |     -> download and run install script | ||||||
|   - preparations: |   - preparations: | ||||||
|     -> update xbps |     -> update xbps | ||||||
|     -> install xmirror |     -> install xmirror squashfs-tools | ||||||
|     -> make our own or extract kb selection and time zone selection (if feasible) to hijack them for our purposes |     -> make our own or extract (if feasible) kb selection and time zone selection to hijack them for our purposes | ||||||
|   - select kb layout |   - select kb layout | ||||||
|   - warn user about formatting and making the USB stick unusable with Windows |   - set up disk | ||||||
|   - set up disks |  | ||||||
|     -> select disk from a list |     -> select disk from a list | ||||||
|       -> allow user to double check that it’s the USB drive |     -> warn user about formatting and making the USB stick unusable with Windows | ||||||
|     -> wipe disk (new gpt) |     -> allow user to double check that it’s the USB drive | ||||||
|     -> partition disk |     -> wipe and partition disk (new gpt) | ||||||
|       -> 270M ESP (if needed) or 2M BIOS GRUB |       -> 2M BIOS GRUB | ||||||
|       -> partition that holds home and the squashfs image |       -> 268M ESP | ||||||
|     -> format partitions (use force option) |       -> 1G /boot | ||||||
|  |       -> rest /container | ||||||
|  |     -> format partitions | ||||||
|       -> ESP FAT32 |       -> ESP FAT32 | ||||||
|       -> rest F2FS |       -> /boot and /container F2FS | ||||||
|   - mount them things, set up tmpfs as / for now |   - mount them things | ||||||
|  |     -> set up plain tmpfs as / for now | ||||||
|   - install base system |   - install base system | ||||||
|     -> select mirror |     -> select mirror | ||||||
|       -> just use xmirror and get the result from the file |       -> just use xmirror and get the result from the file | ||||||
|  | @ -48,18 +50,28 @@ Steps to install: | ||||||
|       -> if musl, add that bit to repo url |       -> if musl, add that bit to repo url | ||||||
|     -> install packages |     -> install packages | ||||||
|       -> linux bash shadow f2fs-tools dosfstools dbus NetworkManager iana-etc iw wpa_supplicant util-linux which tar man-pages iproute2 iputils wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils diffutils pciutils usbutils tzdata base-files ncurses mdocml procps-ng kbd xbps sudo ethtool kmod eudev runit-void removed-packages nano acpid squashfs-tools |       -> linux bash shadow f2fs-tools dosfstools dbus NetworkManager iana-etc iw wpa_supplicant util-linux which tar man-pages iproute2 iputils wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils diffutils pciutils usbutils tzdata base-files ncurses mdocml procps-ng kbd xbps sudo ethtool kmod eudev runit-void removed-packages nano acpid squashfs-tools | ||||||
|     -> configure XBPS (set mirror?, anything else?) |     -> configure XBPS mirror | ||||||
|     -> configure sudo |     -> configure sudo | ||||||
|       -> drop a file with "%wheel ALL=(ALL:ALL) ALL" in /etc/sudoers.d/sudo_group |       -> drop a file with "%wheel ALL=(ALL:ALL) ALL" in /etc/sudoers.d/sudo_group | ||||||
|     -> configure overlayfs setup |     -> configure overlayfs setup | ||||||
|     -> configure tmpfses |       -> startup script | ||||||
|     -> configure /home (bind mount or symlink?) |       -> shutdown squashfs updater | ||||||
|     -> configure keymap (etc/rc.conf) |         -> rc.shutdown? | ||||||
|     -> configure shutdown squashfs updater |     -> configure fstab | ||||||
|       -> rc.shutdown? |       -> /boot, /boot/efi | ||||||
|  |       -> /home (bind mount) | ||||||
|  |       -> NOT /, /container | ||||||
|  |     -> configure rc.conf | ||||||
|  |       -> keyboard layout | ||||||
|  |       -> hardware clock set to UTC? | ||||||
|  |     -> configure time zone while we’re at it | ||||||
|  |       -> selection dialog? | ||||||
|  |       -> symlink /etc/localtime | ||||||
|  |     -> configure host name | ||||||
|     -> configure and install bootloader |     -> configure and install bootloader | ||||||
|       -> determine BIOS or UEFI |       -> if x86 install for both UEFI and BIOS | ||||||
|       -> if UEFI, install as removable device |         -> Is there a way we can make this work with 32-bit AND 64-bit EFI at the same time? | ||||||
|  |       -> if ARM install only UEFI | ||||||
|     -> xbps-reconfigure -fa |     -> xbps-reconfigure -fa | ||||||
|     -> prepare 2nd stage installation |     -> prepare 2nd stage installation | ||||||
|       -> auto login root |       -> auto login root | ||||||
|  | @ -73,19 +85,12 @@ Steps to install: | ||||||
|       -> NetworkManager |       -> NetworkManager | ||||||
|       -> acpid |       -> acpid | ||||||
|     -> ask user to connect to network using nmtui |     -> ask user to connect to network using nmtui | ||||||
|     -> set up timezone |  | ||||||
|       -> ask user which zone |  | ||||||
|       -> ask user whether to use UTC or local time |  | ||||||
|       -> configure (rc.conf and /etc/localtime) |  | ||||||
|     -> set hostname |  | ||||||
|       -> ask user |  | ||||||
|       -> configure |  | ||||||
|     -> install packages |     -> install packages | ||||||
|       -> setxkbmap xauth xorg-video-drivers mesa mesa-dri xorg-server elogind xorg-input-drivers xrandr acpilight xhost xinit xrdb xinput xgamma xset iceauth sessreg transset xcmsdb xkbutils xmodmap dejavu-fonts-ttf |       -> setxkbmap xauth xorg-video-drivers mesa mesa-dri xorg-server elogind xorg-input-drivers xrandr acpilight xhost xinit xrdb xinput xgamma xset iceauth sessreg transset xcmsdb xkbutils xmodmap dejavu-fonts-ttf | ||||||
|       -> terminal? |       -> terminal? | ||||||
|       -> browser? |       -> browser? | ||||||
|       -> prism launcher |       -> prism launcher | ||||||
|       -> java |       -> java (multiple versions?) | ||||||
|       -> pipewire (pulsemixer?) |       -> pipewire (pulsemixer?) | ||||||
|       -> ask about nvidia driver |       -> ask about nvidia driver | ||||||
|         -> install if needed |         -> install if needed | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue