Compare commits
	
		
			2 Commits 
		
	
	
		
			3f10d03ad5
			...
			f1ee7c85dd
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  BodgeMaster | f1ee7c85dd | |
|  | 34d6e1674c | 
|  | @ -1,7 +1,7 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| LOGFILE=/tmp/void-usb-install-log | ||||
| GIT_REPO_BASE="https://lostcave.ddnss.de/git/BodgeMaster/void-minecraft-usb/raw/branch/master" | ||||
| GIT_REPO_BASE="https://lostcave.ddnss.de/git/BodgeMaster/void-usb/raw/branch/master" | ||||
| 
 | ||||
| function press_any_key { | ||||
|   echo "Press any key to continue or Ctrl+c to abort..." | ||||
|  | @ -78,9 +78,7 @@ echo -n "Installing xmirror, squashfs-tools, wget... " | |||
| xbps-install --yes xmirror wget >> $LOGFILE 2>&1 | ||||
| echo "done" | ||||
| 
 | ||||
| #TODO: If going down the path of extracting routines from void-installer, that should be done here | ||||
| 
 | ||||
| #TODO: Select keyboard layout | ||||
| #TODO: Select keyboard layout by showing lists of what's present (directories for region, then files within) | ||||
| KBD_LAYOUT="de-latin1" | ||||
| 
 | ||||
| clear | ||||
|  | @ -207,15 +205,32 @@ the chosen mirror from the config file it generates. | |||
| " | ||||
| press_any_key | ||||
| xmirror | ||||
| #TODO: also remove CPU architecture | ||||
| TARGET_MIRROR="$(sed 's/repository=//;s|/musl$||' /etc/xbps.d/00-repository-main.conf)" | ||||
| 
 | ||||
| #TODO: select installation type | ||||
| TARGET_TYPE="x86_64" | ||||
| 
 | ||||
| #TODO: also add CPU architecture | ||||
| #TODO: allow only 32 bit on a 32 bit system | ||||
| options=("x86_64" "x86_64 musl" "x86_32") | ||||
| while true; do | ||||
|     echo "Select your desired architecture." | ||||
|     for i in "${!options[@]}"; do | ||||
|         echo "$((i+1)): ${options[$i]}" | ||||
|     done | ||||
| 
 | ||||
|     read -p "Input your choice (number): " choice | ||||
| 
 | ||||
|     if [ "$choice" -ge 1 ] && [ "$choice" -le "${#options[@]}" ]; then | ||||
|         TARGET_TYPE="${options[$((choice-1))]}" | ||||
|         break | ||||
|     else | ||||
|         echo "Selection invalid." | ||||
|     fi | ||||
| done | ||||
| 
 | ||||
| echo "You selected: $TARGET_TYPE" | ||||
| 
 | ||||
| if grep "musl" <<< "$TARGET_TYPE"; then | ||||
|   TARGET_MIRROR="$TARGET_MIRROR/musl" | ||||
|   TARGET_TYPE="$(sed -e 's/ musl//' <<< "$TARGET_TYPE")" | ||||
| fi | ||||
| 
 | ||||
| echo -n "Copying repository keys... " | ||||
|  | @ -302,8 +317,6 @@ else | |||
|   echo "KEYMAP=\"$KBD_LAYOUT\"" >> /mnt/target/etc/rc.conf | ||||
| fi | ||||
| 
 | ||||
| #TODO: Figure out how to configure keyboard for Xorg | ||||
| 
 | ||||
| #TODO timezone | ||||
| 
 | ||||
| clear | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| LOGFILE=/tmp/void-usb-install-log | ||||
| STAGE2_DIR="/opt/void-usb/installer/" | ||||
| 
 | ||||
| function press_any_key { | ||||
|   echo "Press any key to continue or Ctrl+c to abort..." | ||||
|  | @ -69,6 +70,7 @@ Alternatively, you can continue without internet but the system will be left in | |||
|       echo -n "." | ||||
|     done | ||||
|     echo " $INTERNET" | ||||
|     # TODO: allow to connect again if still no internet | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
|  | @ -79,25 +81,20 @@ if [ "$INTERNET" = "up" ]; then | |||
| fi | ||||
| 
 | ||||
| 
 | ||||
| STAGE2_DIR="/opt/void-usb/installer/"  # Change this to your desired directory | ||||
| CONFIG_DIR="$STAGE2_DIR/custom-scripts" | ||||
| SCRIPT_LIST="$CONFIG_DIR/scripts.lst" | ||||
| SCRIPTS=() | ||||
| NAMES=() | ||||
| DESCRIPTIONS=() | ||||
| 
 | ||||
| # Find all scripts and extract their names & descriptions | ||||
| echo "Scanning for configuration scripts in $CONFIG_DIR..." | ||||
| for script in "$CONFIG_DIR"/*.sh; do | ||||
|     [ -f "$script" ] || continue  # Skip if no .sh files found | ||||
|     SCRIPTS+=("$script") | ||||
| 
 | ||||
|     # Extract name from "# NAME:" (first occurrence) | ||||
|     SCRIPT_NAME=$(grep -m1 '^# NAME:' "$script" | sed 's/^# NAME:[[:space:]]*//') | ||||
|     SCRIPT_NAME=$(grep '^# NAME:' "$script" | sed 's/^# NAME:[[:space:]]*//') | ||||
|     [ -z "$SCRIPT_NAME" ] && SCRIPT_NAME="$(basename "$script")" | ||||
| 
 | ||||
|     # Extract description from "# DESC:" (first occurrence) | ||||
|     SCRIPT_DESC=$(grep -m1 '^# DESC:' "$script" | sed 's/^# DESC:[[:space:]]*//') | ||||
|     SCRIPT_DESC=$(grep '^# DESC:' "$script" | sed 's/^# DESC:[[:space:]]*//') | ||||
|     [ -z "$SCRIPT_DESC" ] && SCRIPT_DESC="No description available." | ||||
| 
 | ||||
|     NAMES+=("$SCRIPT_NAME") | ||||
|  | @ -110,36 +107,51 @@ if [ ${#SCRIPTS[@]} -eq 0 ]; then | |||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| # Display menu dynamically | ||||
| echo "Available configurations:" | ||||
| for i in "${!SCRIPTS[@]}"; do | ||||
|     echo "$((i+1))) ${NAMES[i]} - ${DESCRIPTIONS[i]}" | ||||
|     echo "$((i+1)): ${NAMES[i]} - ${DESCRIPTIONS[i]}" | ||||
| done | ||||
| echo "$(( ${#SCRIPTS[@]} + 1 ))) Exit" | ||||
| echo "$(( ${#SCRIPTS[@]} + 1 )): Exit" | ||||
| 
 | ||||
| # Get user input | ||||
| read -p "Select an option [1-$((${#SCRIPTS[@]}+1))]: " CHOICE | ||||
| 
 | ||||
| # Run selected script | ||||
| if (( CHOICE >= 1 && CHOICE <= ${#SCRIPTS[@]} )); then | ||||
| CHOICE=0 | ||||
| while ! (( CHOICE >= 1 && CHOICE <= ${#SCRIPTS[@]} )); do | ||||
|   read -p "Select an option [1-$((${#SCRIPTS[@]}+1))]: " CHOICE | ||||
|   if (( CHOICE >= 1 && CHOICE <= ${#SCRIPTS[@]} )); then | ||||
|       echo "Running: ${NAMES[CHOICE-1]}" | ||||
|       bash "${SCRIPTS[CHOICE-1]}" | ||||
| elif (( CHOICE == ${#SCRIPTS[@]} + 1 )); then | ||||
|   elif (( CHOICE == ${#SCRIPTS[@]} + 1 )); then | ||||
|       echo "Exiting..." | ||||
|     exit 0 | ||||
| else | ||||
|       break | ||||
|   else | ||||
|       echo "Invalid choice." | ||||
|     exit 1 | ||||
| fi | ||||
|   fi | ||||
| done | ||||
| 
 | ||||
| # Stage 2 Tasks | ||||
| echo "Setting up user..." | ||||
| read -p "Enter username: " NEW_USER | ||||
| useradd -m -G wheel "$NEW_USER" | ||||
| #TODO: let the user choose additional groups (suggest sane defaults for different use cases) | ||||
| #  cdrom? optical? storage? what they do? | ||||
| #  scanner | ||||
| #  network (check if this even still does anything) | ||||
| #  kvm | ||||
| #  audio, video | ||||
| #  dialout | ||||
| #  users (dows this even do anything) | ||||
| useradd -m -s /bin/bash -G wheel "$NEW_USER" | ||||
| passwd "$NEW_USER" | ||||
| 
 | ||||
| echo "Cleaning up installation files..." | ||||
| rm -rf "$STAGE2_DIR" | ||||
| mv /mnt/target/etc/sv/agetty-tty1/conf.bak /mnt/target/etc/sv/agetty-tty1/conf >> $LOGFILE 2>&1 | ||||
| if [ -f /root/.profile.bak ]; then | ||||
|   mv /root/.profile.bak /root/.profile | ||||
| else | ||||
|   rm /root/.profile | ||||
| fi | ||||
| rm -rf "$STAGE2_DIR" | ||||
| 
 | ||||
| bash --norc --noprofile | ||||
| clear | ||||
| echo "To save the changes made to the system, a new system image needs to be created. | ||||
| 
 | ||||
| The system will reboot now. While shutting down, you will be asked about creating a system image. Choose yes." | ||||
| 
 | ||||
| reboot | ||||
|  |  | |||
|  | @ -1,6 +1,4 @@ | |||
| TODO: | ||||
| make sure that gufw works as intended | ||||
| check for Nvidia Optimus support - or make it happen somehow | ||||
| compare sizes of glibc and musl installations | ||||
| need xdg menu maker? | ||||
| adjust required USB stick and RAM size in README | ||||
|  | @ -9,114 +7,27 @@ do not rely on the RTC | |||
|   - use ntp to get time | ||||
|     - only fall back to using rtc if offline | ||||
|   - do not set the RTC | ||||
| make our own or extract (if feasible) kb selection and time zone selection to hijack them for our purposes | ||||
|   - potentially interesting packages | ||||
|     - ckbcomp | ||||
|     - kbd-data | ||||
| make our own time zone selection | ||||
| keyboard? | ||||
| overview of the installation process at the start | ||||
| overall progress indication (step x out of y) | ||||
| look into roxterm as an alternative terminal | ||||
| deal with the entropy thing that runs after rc.shutdown | ||||
| first run message in .xinitrc.d | ||||
|   - auto-removes itself | ||||
|   - displays README.txt on root dir of the F2FS partition | ||||
| add online check to all the selections that need internet | ||||
| sort out /etc/resolv.conf for the chroot | ||||
| set keyboard layout for initramfs | ||||
| tell user about expected GRUB error messaegs | ||||
| disable suspend and hibernate | ||||
| when shutting down, let Xorg exit first, then run `loginctl {poweroff,reboot}` | ||||
| add polkit to common packages | ||||
| disable hibernate, warn about suspend | ||||
| use zswap | ||||
| rices: when shutting down, let Xorg exit first, then run `loginctl {poweroff,reboot}` | ||||
|   - this is needed so the user can interact with the console | ||||
| https://github.com/aarnt/octoxbps | ||||
| system-image | ||||
|   check that all output goes to current TTY | ||||
| 
 | ||||
| package selections: | ||||
|   desktop | ||||
|     icewm-full | ||||
|       packages | ||||
|         -> audio applet -> volctl | ||||
|         -> system monitor, file browser, image viewer, text editor, archive manager | ||||
|         -> GUI package manager? GUI update manager? | ||||
|         -> notification daemon? | ||||
|         xscreensaver | ||||
|         blueman | ||||
|         -> BT support? | ||||
|       post-install | ||||
|         add ultimate.bashrc | ||||
|         add backgrounds | ||||
|         modify bashrc to auto-start X if not already running | ||||
|         kick off scripts in .xinitrc.d from .xinitrc | ||||
|         exec icewm-session from .xinitrc | ||||
|         add to .xinitrc.d | ||||
|           start pipewire, pipewire-pulse, wireplumber | ||||
|           start conky | ||||
|           start desktop applets | ||||
|             volctl & | ||||
|             nm-applet & | ||||
|             blueman-applet & | ||||
|           display README | ||||
|           start xscreensaver | ||||
|             xscreensaver --no-splash & | ||||
|           start conky | ||||
|             conky & | ||||
|         put README.txt with relevant information on root dir of F2FS partition | ||||
|           symlink to /home/README.txt | ||||
|         add a symlink ~/.local/bin/xterm that points to lxterminal | ||||
|         configure icewm | ||||
|           startup script | ||||
|             choose random background | ||||
|           configuration | ||||
|         configure conky | ||||
|         configure xscreensaver | ||||
|     icewm-lite | ||||
|       post-install | ||||
|         add ultimate.bashrc | ||||
|         modify bashrc to auto-start X if not already running | ||||
|         kick off scripts in .xinitrc.d from .xinitrc | ||||
|         exec icewm (not session) from .xinitrc | ||||
|         add to .xinitrc.d | ||||
|           start pipewire, pipewire-pulse, wireplumber | ||||
|           display README | ||||
|         put README.txt with relevant information on root dir of F2FS partition | ||||
|           symlink to /home/README.txt | ||||
|         configure icewm | ||||
|     none | ||||
|       post-install | ||||
|         add ultimate.bashrc | ||||
|         modify bashrc to display README | ||||
|         put README.txt with relevant information on root dir of F2FS partition | ||||
|           symlink to /home/README.txt | ||||
| 
 | ||||
| 
 | ||||
| musl downsides: | ||||
|   - no nvidia drivers | ||||
|   - may be janky in regards to running some Minecraft versions | ||||
| musl upsides: | ||||
|   - ?? | ||||
| 
 | ||||
| Stage 1: | ||||
|   -> select kb layout | ||||
|   -> select installation type (x86_32/x86_64, glibc/musl) | ||||
|   -> configure time zone | ||||
|     -> selection dialog? | ||||
|     -> symlink /etc/localtime | ||||
| 
 | ||||
| Stage 2: | ||||
|   -> set up user | ||||
|     -> ask for username | ||||
|     -> run useradd (non-interactively) | ||||
|       -> useradd --groups "comma,separated,groups" --create-home --shell /bin/bash $USERNAME | ||||
|       -> groups: dialout users wheel | ||||
|       -> ?? groups: | ||||
|         -> cdrom optical - can listen to CDs? Can watch DVDs? Can mount / unmount CDs/DVDs? | ||||
|         -> storage - can mount / unmount disks from GUI? | ||||
|         -> scanner - can scan things (for example using XSane?) | ||||
|         -> network - can interface with NetworkManager? | ||||
|         -> kvm - can run QEMU? | ||||
|     -> run passwd (interactively) | ||||
|   -> clean up | ||||
|     -> mv /mnt/target/etc/sv/agetty-tty1/conf.bak /mnt/target/etc/sv/agetty-tty1/conf | ||||
|     -> if [ -f /mnt/target/root/.profile.bak ]; then mv /mnt/target/root/.profile.bak /mnt/target/root/.profile; else rm /mnt/target/root/.profile; fi | ||||
|     -> rm -r /opt/void-usb/installer | ||||
|   -> build new squashfs image and reboot | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue