build-x86-images.sh 5.8 KB

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