mkiso.sh 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #!/bin/sh
  2. set -eu
  3. . ./lib.sh
  4. PROGNAME=$(basename "$0")
  5. ARCH=$(uname -m)
  6. IMAGES="base"
  7. TRIPLET=
  8. REPO=
  9. DATE=$(date -u +%Y%m%d)
  10. usage() {
  11. cat <<-EOH
  12. Usage: $PROGNAME [options ...] [-- mklive options ...]
  13. Wrapper script around mklive.sh for several standard flavors of live images.
  14. Adds void-installer and other helpful utilities to the generated images.
  15. OPTIONS
  16. -a <arch> Set XBPS_ARCH in the image
  17. -b <variant> One of base, enlightenment, xfce, mate, cinnamon, gnome, kde,
  18. lxde, or lxqt (default: base). May be specified multiple times
  19. to build multiple variants
  20. -d <date> Override the datestamp on the generated image (YYYYMMDD format)
  21. -t <arch-date-variant>
  22. Equivalent to setting -a, -b, and -d
  23. -r <repo> Use this XBPS repository. May be specified multiple times
  24. -h Show this help and exit
  25. -V Show version and exit
  26. Other options can be passed directly to mklive.sh by specifying them after the --.
  27. See mklive.sh -h for more details.
  28. EOH
  29. }
  30. while getopts "a:b:d:t:hr:V" opt; do
  31. case $opt in
  32. a) ARCH="$OPTARG";;
  33. b) IMAGES="$OPTARG";;
  34. d) DATE="$OPTARG";;
  35. r) REPO="-r $OPTARG $REPO";;
  36. t) TRIPLET="$OPTARG";;
  37. V) version; exit 0;;
  38. h) usage; exit 0;;
  39. *) usage >&2; exit 1;;
  40. esac
  41. done
  42. shift $((OPTIND - 1))
  43. INCLUDEDIR=$(mktemp -d)
  44. trap "cleanup" INT TERM
  45. cleanup() {
  46. rm -rf "$INCLUDEDIR"
  47. }
  48. include_installer() {
  49. if [ -x installer.sh ]; then
  50. MKLIVE_VERSION="$(PROGNAME='' version)"
  51. installer=$(mktemp)
  52. sed "s/@@MKLIVE_VERSION@@/${MKLIVE_VERSION}/" installer.sh > "$installer"
  53. install -Dm755 "$installer" "$INCLUDEDIR"/usr/bin/void-installer
  54. rm "$installer"
  55. else
  56. echo installer.sh not found >&2
  57. exit 1
  58. fi
  59. }
  60. setup_pipewire() {
  61. PKGS="$PKGS pipewire alsa-pipewire"
  62. mkdir -p "$INCLUDEDIR"/etc/xdg/autostart
  63. ln -sf /usr/share/applications/pipewire.desktop "$INCLUDEDIR"/etc/xdg/autostart/
  64. mkdir -p "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d
  65. ln -sf /usr/share/examples/wireplumber/10-wireplumber.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
  66. ln -sf /usr/share/examples/pipewire/20-pipewire-pulse.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
  67. mkdir -p "$INCLUDEDIR"/etc/alsa/conf.d
  68. ln -sf /usr/share/alsa/alsa.conf.d/50-pipewire.conf "$INCLUDEDIR"/etc/alsa/conf.d
  69. ln -sf /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf "$INCLUDEDIR"/etc/alsa/conf.d
  70. }
  71. build_variant() {
  72. variant="$1"
  73. shift
  74. IMG=void-live-${ARCH}-${DATE}-${variant}.iso
  75. # el-cheapo installer is unsupported on arm because arm doesn't install a kernel by default
  76. # and to work around that would add too much complexity to it
  77. # thus everyone should just do a chroot install anyways
  78. WANT_INSTALLER=no
  79. case "$ARCH" in
  80. x86_64*|i686*) GRUB_PKGS="grub-i386-efi grub-x86_64-efi"; WANT_INSTALLER=yes ;;
  81. aarch64*) GRUB_PKGS="grub-arm64-efi" ;;
  82. esac
  83. A11Y_PKGS="espeakup void-live-audio brltty"
  84. PKGS="dialog cryptsetup lvm2 mdadm void-docs-browse xtools-minimal xmirror chrony tmux $A11Y_PKGS $GRUB_PKGS"
  85. XORG_PKGS="xorg-minimal xorg-input-drivers xorg-video-drivers setxkbmap xauth font-misc-misc terminus-font dejavu-fonts-ttf orca"
  86. SERVICES="sshd chronyd"
  87. LIGHTDM_SESSION=''
  88. case $variant in
  89. base)
  90. SERVICES="$SERVICES dhcpcd wpa_supplicant acpid"
  91. ;;
  92. enlightenment)
  93. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter enlightenment terminology udisks2 firefox"
  94. SERVICES="$SERVICES acpid dhcpcd wpa_supplicant lightdm dbus polkitd"
  95. LIGHTDM_SESSION=enlightenment
  96. ;;
  97. xfce)
  98. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter xfce4 gnome-themes-standard gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox xfce4-pulseaudio-plugin"
  99. SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
  100. LIGHTDM_SESSION=xfce
  101. ;;
  102. mate)
  103. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter mate mate-extra gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  104. SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
  105. LIGHTDM_SESSION=mate
  106. ;;
  107. cinnamon)
  108. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter cinnamon gnome-keyring colord gnome-terminal gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  109. SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
  110. LIGHTDM_SESSION=cinnamon
  111. ;;
  112. gnome)
  113. PKGS="$PKGS $XORG_PKGS gnome firefox"
  114. SERVICES="$SERVICES dbus gdm NetworkManager polkitd"
  115. ;;
  116. kde)
  117. PKGS="$PKGS $XORG_PKGS kde5 konsole firefox dolphin NetworkManager"
  118. SERVICES="$SERVICES dbus NetworkManager sddm"
  119. ;;
  120. lxde)
  121. PKGS="$PKGS $XORG_PKGS lxde lightdm lightdm-gtk3-greeter gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  122. SERVICES="$SERVICES acpid dbus dhcpcd wpa_supplicant lightdm polkitd"
  123. LIGHTDM_SESSION=LXDE
  124. ;;
  125. lxqt)
  126. PKGS="$PKGS $XORG_PKGS lxqt sddm gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  127. SERVICES="$SERVICES dbus dhcpcd wpa_supplicant sddm polkitd"
  128. ;;
  129. *)
  130. >&2 echo "Unknown variant $variant"
  131. exit 1
  132. ;;
  133. esac
  134. if [ -n "$LIGHTDM_SESSION" ]; then
  135. mkdir -p "$INCLUDEDIR"/etc/lightdm
  136. echo "$LIGHTDM_SESSION" > "$INCLUDEDIR"/etc/lightdm/.session
  137. # needed to show the keyboard layout menu on the login screen
  138. cat <<- EOF > "$INCLUDEDIR"/etc/lightdm/lightdm-gtk-greeter.conf
  139. [greeter]
  140. indicators = ~host;~spacer;~clock;~spacer;~layout;~session;~a11y;~power
  141. EOF
  142. fi
  143. if [ "$WANT_INSTALLER" = yes ]; then
  144. include_installer
  145. else
  146. mkdir -p "$INCLUDEDIR"/usr/bin
  147. printf "#!/bin/sh\necho 'void-installer is not supported on this live image'\n" > "$INCLUDEDIR"/usr/bin/void-installer
  148. chmod 755 "$INCLUDEDIR"/usr/bin/void-installer
  149. fi
  150. if [ "$variant" != base ]; then
  151. setup_pipewire
  152. fi
  153. ./mklive.sh -a "$ARCH" -o "$IMG" -p "$PKGS" -S "$SERVICES" -I "$INCLUDEDIR" ${REPO} "$@"
  154. cleanup
  155. }
  156. if [ ! -x mklive.sh ]; then
  157. echo mklive.sh not found >&2
  158. exit 1
  159. fi
  160. if [ -n "$TRIPLET" ]; then
  161. VARIANT="${TRIPLET##*-}"
  162. REST="${TRIPLET%-*}"
  163. DATE="${REST##*-}"
  164. ARCH="${REST%-*}"
  165. build_variant "$VARIANT" "$@"
  166. else
  167. for image in $IMAGES; do
  168. build_variant "$image" "$@"
  169. done
  170. fi