mkiso.sh 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. setup_pipewire() {
  49. PKGS="$PKGS pipewire alsa-pipewire"
  50. mkdir -p "$INCLUDEDIR"/etc/xdg/autostart
  51. ln -sf /usr/share/applications/pipewire.desktop "$INCLUDEDIR"/etc/xdg/autostart/
  52. mkdir -p "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d
  53. ln -sf /usr/share/examples/wireplumber/10-wireplumber.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
  54. ln -sf /usr/share/examples/pipewire/20-pipewire-pulse.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
  55. mkdir -p "$INCLUDEDIR"/etc/alsa/conf.d
  56. ln -sf /usr/share/alsa/alsa.conf.d/50-pipewire.conf "$INCLUDEDIR"/etc/alsa/conf.d
  57. ln -sf /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf "$INCLUDEDIR"/etc/alsa/conf.d
  58. }
  59. build_variant() {
  60. variant="$1"
  61. shift
  62. IMG=void-live-${ARCH}-${DATE}-${variant}.iso
  63. case "$ARCH" in
  64. x86_64*|i686*) GRUB_PKGS="grub-i386-efi grub-x86_64-efi" ;;
  65. aarch64*) GRUB_PKGS="grub-arm64-efi" ;;
  66. esac
  67. A11Y_PKGS="espeakup void-live-audio brltty"
  68. PKGS="dialog cryptsetup lvm2 mdadm void-docs-browse xtools-minimal xmirror chrony tmux $A11Y_PKGS $GRUB_PKGS"
  69. XORG_PKGS="xorg-minimal xorg-input-drivers xorg-video-drivers setxkbmap xauth font-misc-misc terminus-font dejavu-fonts-ttf orca"
  70. SERVICES="sshd chronyd"
  71. LIGHTDM_SESSION=''
  72. case $variant in
  73. base)
  74. SERVICES="$SERVICES dhcpcd wpa_supplicant acpid"
  75. ;;
  76. enlightenment)
  77. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter enlightenment terminology udisks2 firefox"
  78. SERVICES="$SERVICES acpid dhcpcd wpa_supplicant lightdm dbus polkitd"
  79. LIGHTDM_SESSION=enlightenment
  80. ;;
  81. xfce)
  82. 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"
  83. SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
  84. LIGHTDM_SESSION=xfce
  85. ;;
  86. mate)
  87. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter mate mate-extra gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  88. SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
  89. LIGHTDM_SESSION=mate
  90. ;;
  91. cinnamon)
  92. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter cinnamon gnome-keyring colord gnome-terminal gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  93. SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
  94. LIGHTDM_SESSION=cinnamon
  95. ;;
  96. gnome)
  97. PKGS="$PKGS $XORG_PKGS gnome firefox"
  98. SERVICES="$SERVICES dbus gdm NetworkManager polkitd"
  99. ;;
  100. kde)
  101. PKGS="$PKGS $XORG_PKGS kde5 konsole firefox dolphin NetworkManager"
  102. SERVICES="$SERVICES dbus NetworkManager sddm"
  103. ;;
  104. lxde)
  105. PKGS="$PKGS $XORG_PKGS lxde lightdm lightdm-gtk3-greeter gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  106. SERVICES="$SERVICES acpid dbus dhcpcd wpa_supplicant lightdm polkitd"
  107. LIGHTDM_SESSION=LXDE
  108. ;;
  109. lxqt)
  110. PKGS="$PKGS $XORG_PKGS lxqt sddm gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  111. SERVICES="$SERVICES dbus dhcpcd wpa_supplicant sddm polkitd"
  112. ;;
  113. *)
  114. >&2 echo "Unknown variant $variant"
  115. exit 1
  116. ;;
  117. esac
  118. if [ -n "$LIGHTDM_SESSION" ]; then
  119. mkdir -p "$INCLUDEDIR"/etc/lightdm
  120. echo "$LIGHTDM_SESSION" > "$INCLUDEDIR"/etc/lightdm/.session
  121. # needed to show the keyboard layout menu on the login screen
  122. cat <<- EOF > "$INCLUDEDIR"/etc/lightdm/lightdm-gtk-greeter.conf
  123. [greeter]
  124. indicators = ~host;~spacer;~clock;~spacer;~layout;~session;~a11y;~power
  125. EOF
  126. fi
  127. if [ "$variant" != base ]; then
  128. setup_pipewire
  129. fi
  130. ./mklive.sh -a "$ARCH" -o "$IMG" -p "$PKGS" -S "$SERVICES" -I "$INCLUDEDIR" ${REPO} "$@"
  131. cleanup
  132. }
  133. if [ ! -x mklive.sh ]; then
  134. echo mklive.sh not found >&2
  135. exit 1
  136. fi
  137. if [ -x installer.sh ]; then
  138. MKLIVE_VERSION="$(PROGNAME='' version)"
  139. installer=$(mktemp)
  140. sed "s/@@MKLIVE_VERSION@@/${MKLIVE_VERSION}/" installer.sh > "$installer"
  141. install -Dm755 "$installer" "$INCLUDEDIR"/usr/bin/void-installer
  142. rm "$installer"
  143. else
  144. echo installer.sh not found >&2
  145. exit 1
  146. fi
  147. if [ -n "$TRIPLET" ]; then
  148. VARIANT="${TRIPLET##*-}"
  149. REST="${TRIPLET%-*}"
  150. DATE="${REST##*-}"
  151. ARCH="${REST%-*}"
  152. build_variant "$VARIANT" "$@"
  153. else
  154. for image in $IMAGES; do
  155. build_variant "$image" "$@"
  156. done
  157. fi