Compare commits
5 Commits
e61ac82761
...
4ad24cd144
Author | SHA1 | Date |
---|---|---|
BodgeMaster | 4ad24cd144 | |
BodgeMaster | b4b73ef3f0 | |
BodgeMaster | edb0c96796 | |
BodgeMaster | 35bdd361ab | |
BodgeMaster | 269dfc498c |
55
README.md
55
README.md
|
@ -1,30 +1,61 @@
|
||||||
# Void Linux Minecraft Setup for USB Sticks
|
# Void Linux Setup for USB Sticks
|
||||||
|
|
||||||
This repository holds a bunch of scripts for installing and customizing
|
This repository holds scripts for installing a Void Linux setup specialized 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:
|
This is only for USB sticks (thumb drives, pen drives, whatever you wanna call them).
|
||||||
|
You don’t need this if you want to use a USB HDD or SSD because these devices tend to just work normally.
|
||||||
|
If you want to use a USB HDD/SSD, just download the installer for the Linux distro of your choice and
|
||||||
|
install it on that drive. Most modern distros know how to cope with external drives.
|
||||||
|
|
||||||
|
The reason this is useful for USB sticks is that most of them are a bit shit.
|
||||||
|
Trying to run an operating system off a USB drive typically results in a corrupted drive pretty quickly
|
||||||
|
(if you can get the system to install properly in the first place).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
You need the following:
|
||||||
|
- Computer (duh)
|
||||||
|
- 8G of RAM or more
|
||||||
|
- Can boot off USB (most computers made after 2003)
|
||||||
|
- USB stick (at least 8G)
|
||||||
|
- Internet connection
|
||||||
|
|
||||||
|
There are a couple manual steps to get started before the installer scripts can take over:
|
||||||
- Set up a Void live medium
|
- Set up a Void live medium
|
||||||
- Download here: https://voidlinux.org/download/
|
- Download here: https://voidlinux.org/download/
|
||||||
- The following instructions assume you downloaded the "base" image
|
- The following instructions assume you downloaded the "base" image
|
||||||
- Burn to a CD/DVD or flash it to a USB stick
|
- Burn to CD/DVD or flash it to 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
|
||||||
- Two things I can’t help you with (sorry):
|
- 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.
|
- 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.
|
- 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 booting off the USB stick you want to install to, use (RAM) option
|
||||||
- Log in as `root`, password `voidlinux`
|
- Log in as `root`, password `voidlinux`
|
||||||
- If you need to use WiFi, 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 (don’t touch anything else)
|
||||||
- Download and run stage 1 of the USB installation script
|
- Download and run stage 1 of the USB installation script
|
||||||
- The base image doesn’t come with a way to download files so you need to install that first: `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`
|
||||||
|
|
||||||
The script will take it from there, asking you for information as needed.
|
The scripts will take it from there, asking you for information and downloading things as needed.
|
||||||
|
|
||||||
|
## How It Works
|
||||||
|
|
||||||
|
`//TODO:` Add detailed documentation
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
- `install-stage1.sh`: sets up the base system and prepares for installation stage 2
|
||||||
|
- `install-stage2.sh`: continues setting up things after booting into the freshly installed base system
|
||||||
|
- `opt/grub-config`: the custom grub config generator to be installed in /opt/void-usb
|
||||||
|
- `procedure.txt`: notes to self, will disappear once finished
|
||||||
|
- `bootup.sh`: script that sets up the overlay
|
||||||
|
- `bashrc`: just a custom bashrc
|
||||||
|
- `update-squashfs.sh`: runs at shutdown, allows user to back up the system
|
||||||
|
|
|
@ -34,6 +34,10 @@ function yesno {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function run_in_target {
|
||||||
|
xchroot /mnt/target "$@"
|
||||||
|
}
|
||||||
|
|
||||||
clear
|
clear
|
||||||
echo "
|
echo "
|
||||||
This script will now download and install Void Linux on your USB stick.
|
This script will now download and install Void Linux on your USB stick.
|
||||||
|
@ -169,7 +173,7 @@ XBPS_ARCH="$TARGET_TYPE" xbps-install --yes --sync --rootdir /mnt/target --repos
|
||||||
wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils \
|
wifi-firmware traceroute grep gzip file sed gawk less coreutils findutils \
|
||||||
diffutils pciutils usbutils tzdata base-files ncurses mdocml procps-ng \
|
diffutils pciutils usbutils tzdata base-files ncurses mdocml procps-ng \
|
||||||
kbd xbps sudo ethtool kmod eudev runit-void removed-packages nano acpid \
|
kbd xbps sudo ethtool kmod eudev runit-void removed-packages nano acpid \
|
||||||
squashfs-tools grub grub-i386-efi grub-x86_64-efi
|
squashfs-tools grub grub-i386-efi grub-x86_64-efi dracut
|
||||||
|
|
||||||
echo "repository=$TARGET_MIRROR" > /mnt/target/etc/xbps.d/00-repository-main.conf
|
echo "repository=$TARGET_MIRROR" > /mnt/target/etc/xbps.d/00-repository-main.conf
|
||||||
|
|
||||||
|
@ -184,7 +188,7 @@ echo "# See fstab(5).
|
||||||
# TODO: add script path
|
# TODO: add script path
|
||||||
|
|
||||||
UUID=$(blkid --output value --match-tag UUID $TARGET_PART_BOOT) /boot f2fs defaults,nodev,nosuid 0 2
|
UUID=$(blkid --output value --match-tag UUID $TARGET_PART_BOOT) /boot f2fs defaults,nodev,nosuid 0 2
|
||||||
UUID=$(blkid --output value --match-tag UUID $TARGET_PART_EFI) /boot/efi vfat defaults 0 2
|
UUID=$(blkid --output value --match-tag UUID $TARGET_PART_EFI) /boot/efi vfat defaults,fmask=0077,dmask=0077 0 2
|
||||||
/container/home /home none bind 0 0
|
/container/home /home none bind 0 0
|
||||||
" > /mnt/target/etc/fstab
|
" > /mnt/target/etc/fstab
|
||||||
|
|
||||||
|
@ -262,6 +266,15 @@ done
|
||||||
|
|
||||||
echo "$TARGET_HOSTNAME" > /mnt/target/etc/hostname
|
echo "$TARGET_HOSTNAME" > /mnt/target/etc/hostname
|
||||||
|
|
||||||
|
mkdir /mnt/target/boot/efi/LOADER
|
||||||
|
echo "GRUB has been deliberately installed to a non-standard location.
|
||||||
|
This avoids default kernel hooks breaking the custom config." > /mnt/target/boot/efi/LOADER/README.TXT
|
||||||
|
|
||||||
|
# no idea if any of these are even necessary/relevant but it can’t hurt...
|
||||||
|
TARGET_PRELOAD_GRUB_MODULES="usb usbms uhci ehci ohci part_gpt f2fs"
|
||||||
|
run_in_target grub-install --target=i386-pc --boot-directory=/boot/efi/LOADER --disk-module=native --modules="$TARGET_PRELOAD_GRUB_MODULES" "/dev/$TARGET_DISK"
|
||||||
|
run_in_target grub-install --target=i386-efi --boot-directory=/boot/efi/LOADER --efi-directory=/boot/efi --removable --no-nvram --modules="$TARGET_PRELOAD_GRUB_MODULES" "/dev/$TARGET_DISK"
|
||||||
|
run_in_target grub-install --target=x86_64-efi --boot-directory=/boot/efi/LOADER --efi-directory=/boot/efi --removable --no-nvram --modules="$TARGET_PRELOAD_GRUB_MODULES" "/dev/$TARGET_DISK"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
OS_NAME="Void Linux USB"
|
||||||
|
GRUB_PREFIX="/boot/efi/LOADER/grub"
|
||||||
|
CFG_CUSTOM_BEFORE="custom_before.cfg"
|
||||||
|
CFG_CUSTOM_AFTER="custom_after.cfg"
|
||||||
|
LINUX_CMDLINE=""
|
||||||
|
|
||||||
|
DEFAULT_LINUX=/boot/vmlinu?
|
||||||
|
if [ ! -f "$DEFAULT_LINUX" ]; then
|
||||||
|
# in cases where it’s a .gz or .xz or whatever
|
||||||
|
DEFAULT_LINUX=$(find /boot -type l -name "vmlinu*" 2>/dev/null | sort | head -n1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_INITRAMFS=/boot/initramfs.img
|
||||||
|
if [ ! -f "$DEFAULT_INITRAMFS" ]; then
|
||||||
|
# hope to find anything named initramfs or initrd
|
||||||
|
DEFAULT_INITRAMFS=$(find /boot -type l -name "init*" 2>/dev/null | sort | head -n1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
function make_menuentry {
|
||||||
|
# $1 is the kernel path
|
||||||
|
|
||||||
|
# We don’t want duplicate entries for /boot/vmlinuz symlink
|
||||||
|
if [ -L $1 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# exclude garbage globbing results
|
||||||
|
if [ ! -f $1 ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
LINUX="$(basename "$1")"
|
||||||
|
LINUX_VERSION="$(sed 's/^kernel//;s/^vm//;s/^linuz//;s/^linux//;s/^-//' <<< "$LINUX")"
|
||||||
|
if grep -e ".gz$" -e ".xz$" -e ".bz$" -e ".bz2$" -e ".lzma$" -e ".lz$" -e ".img$" >/dev/null 2>&1 <<< "$LINUX"; then
|
||||||
|
LINUX_VERSION="$(sed 's/[^.]*$//;s/.$//' <<< "$LINUX_VERSION")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
INITRAMFS="$(basename "$(find /boot -name "init*$LINUX_VERSION*" 2>/dev/null | sort | head -n1)")"
|
||||||
|
|
||||||
|
# user output
|
||||||
|
echo " -> Found $LINUX (version $LINUX_VERSION, initramfs $INITRAMFS)"
|
||||||
|
|
||||||
|
# grub.cfg
|
||||||
|
echo "
|
||||||
|
menuentry 'Linux $LINUX_VERSION' {
|
||||||
|
echo 'Loading $LINUX...'
|
||||||
|
linux /$LINUX $LINUX_CMDLINE
|
||||||
|
echo 'Loading initial ramdisk...'
|
||||||
|
initrd /$INITRAMFS
|
||||||
|
}" >> "$GRUB_PREFIX/grub.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
# user output
|
||||||
|
echo "Generating grub config..."
|
||||||
|
|
||||||
|
# grub.cfg
|
||||||
|
echo "# This file is auto-generated by $0.
|
||||||
|
# Changes will be overwritten automatically.
|
||||||
|
# If you want to add custom entries or other changes, add them to
|
||||||
|
# $GRUB_PREFIX/$CFG_CUSTOM_BEFORE or
|
||||||
|
# $GRUB_PREFIX/$CFG_CUSTOM_AFTER
|
||||||
|
|
||||||
|
search --fs-uuid --set=root $(blkid --output value --match-tag UUID "$(grep " /boot " /proc/mounts | sed -e 's/ .*//')")
|
||||||
|
|
||||||
|
set menu_color_normal=white/black
|
||||||
|
set menu_color_highlight=black/light-gray
|
||||||
|
|
||||||
|
timeout=5
|
||||||
|
|
||||||
|
if [ -f \${config_directory}/$CFG_CUSTOM_BEFORE ]; then
|
||||||
|
source \${config_directory}/$CFG_CUSTOM_BEFORE
|
||||||
|
elif [ -z \"\${config_directory}\" -a -f \$prefix/$CFG_CUSTOM_BEFORE ]; then
|
||||||
|
source \$prefix/$CFG_CUSTOM_BEFORE
|
||||||
|
fi
|
||||||
|
|
||||||
|
menuentry '$OS_NAME' {
|
||||||
|
echo 'Loading Linux...'
|
||||||
|
linux $DEFAULT_LINUX
|
||||||
|
echo 'Loading initial ramdisk...'
|
||||||
|
initrd $DEFAULT_INITRAMFS
|
||||||
|
}
|
||||||
|
|
||||||
|
submenu 'Choose kernel version...' {" > "$GRUB_PREFIX/grub.cfg"
|
||||||
|
|
||||||
|
for FILE in /boot/{vm,}linu{x,z}* /boot/kernel*; do
|
||||||
|
make_menuentry "$FILE"
|
||||||
|
done
|
||||||
|
|
||||||
|
# grub.cfg
|
||||||
|
echo "
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -f \${config_directory}/$CFG_CUSTOM_AFTER ]; then
|
||||||
|
source \${config_directory}/$CFG_CUSTOM_AFTER
|
||||||
|
elif [ -z \"\${config_directory}\" -a -f \$prefix/$CFG_CUSTOM_AFTER ]; then
|
||||||
|
source \$prefix/$CFG_CUSTOM_AFTER
|
||||||
|
fi" >> "$GRUB_PREFIX/grub.cfg"
|
||||||
|
|
||||||
|
# user output
|
||||||
|
echo "done"
|
|
@ -1,7 +1,17 @@
|
||||||
make it bootable with UEFI and BIOS?
|
TODO:
|
||||||
compare sizes of glibc and musl installations
|
compare sizes of glibc and musl installations
|
||||||
try running multiple MC versions on musl
|
try running multiple MC versions on musl (incl ThatModPack)
|
||||||
need xdg menu maker?
|
need xdg menu maker?
|
||||||
|
check if there are problems with GRUB’s --disk-module=native on real USB drives on real hardware
|
||||||
|
test that the (RAM) boot option allows you to install to the stick the system booted off
|
||||||
|
adjust required USB stick and RAM size in README
|
||||||
|
|
||||||
|
musl downsides:
|
||||||
|
- no nvidia drivers
|
||||||
|
- may be janky in regards to running some Minecraft versions
|
||||||
|
musl upsides:
|
||||||
|
- ??
|
||||||
|
|
||||||
|
|
||||||
ideas:
|
ideas:
|
||||||
use shell script for init, call real init via exec
|
use shell script for init, call real init via exec
|
||||||
|
@ -12,11 +22,13 @@ system lives on squashfs
|
||||||
-> fstrim (if applicable)
|
-> fstrim (if applicable)
|
||||||
swap on zram
|
swap on zram
|
||||||
f2fs for home
|
f2fs for home
|
||||||
tmpfs for package cache, /tmp, logs?
|
|
||||||
|
|
||||||
when backing up
|
when backing up
|
||||||
- do not cross file system boundaries
|
- do not cross file system boundaries
|
||||||
- exclude /tmp, package cache, logs
|
- exclude /tmp, package cache, logs
|
||||||
|
- possibly only save the changes in separate squashfs images
|
||||||
|
- either until it takes up too much space or until a certain number of images exist
|
||||||
|
- consolidate when the user requests it or when exceeding the limit
|
||||||
|
|
||||||
Steps to install:
|
Steps to install:
|
||||||
- (user does this:) boot Void installer
|
- (user does this:) boot Void installer
|
||||||
|
@ -49,7 +61,7 @@ Steps to install:
|
||||||
-> select installation type (x86_32/x86_64/aarch64, glibc/musl)
|
-> select installation type (x86_32/x86_64/aarch64, glibc/musl)
|
||||||
-> 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 grub grub-i386-efi grub-x86_64-efi
|
||||||
-> configure XBPS mirror
|
-> 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
|
||||||
|
@ -68,10 +80,18 @@ Steps to install:
|
||||||
-> selection dialog?
|
-> selection dialog?
|
||||||
-> symlink /etc/localtime
|
-> symlink /etc/localtime
|
||||||
-> configure host name
|
-> configure host name
|
||||||
-> configure and install bootloader
|
-> install and configure bootloader
|
||||||
-> if x86 install for both UEFI and BIOS
|
-> install GRUB for i386-pc, i386-efi, x86_64-efi
|
||||||
-> Is there a way we can make this work with 32-bit AND 64-bit EFI at the same time?
|
-> --removable and --no-nvram for EFI
|
||||||
-> if ARM install only UEFI
|
-> --boot-directory set to /boot/loader to prevent grub-mkconfig kernel hook from running
|
||||||
|
-> state as much in a text file in there
|
||||||
|
-> add kernel hooks
|
||||||
|
-> script to run /opt/void-usb/grub-config
|
||||||
|
-> a script that updates vmlinu{z,x} and initramfs.img symlinks
|
||||||
|
-> add symlinks for newly installed kernel
|
||||||
|
-> guess best choice when removing the currently symlinked kernel
|
||||||
|
-> ask whether to run vkpurge if disk space is low
|
||||||
|
-> download grub-config and its resources and drop them in /opt/void-usb
|
||||||
-> xbps-reconfigure -fa
|
-> xbps-reconfigure -fa
|
||||||
-> prepare 2nd stage installation
|
-> prepare 2nd stage installation
|
||||||
-> auto login root
|
-> auto login root
|
||||||
|
@ -94,6 +114,7 @@ Steps to install:
|
||||||
-> pipewire (pulsemixer?)
|
-> pipewire (pulsemixer?)
|
||||||
-> ask about nvidia driver
|
-> ask about nvidia driver
|
||||||
-> install if needed
|
-> install if needed
|
||||||
|
-> find out when and where to set `nvidia-drm.modeset=1`
|
||||||
-> ask whether to use CTWM or IceWM
|
-> ask whether to use CTWM or IceWM
|
||||||
-> short description of up and downsides
|
-> short description of up and downsides
|
||||||
-> if CTWM, also install
|
-> if CTWM, also install
|
||||||
|
|
Loading…
Reference in New Issue