summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md26
-rwxr-xr-xbuildlive76
-rw-r--r--distro/arch/entry18
-rw-r--r--distro/arch/install.sh5
-rw-r--r--distro/arch/isoinfo6
-rw-r--r--distro/arch/meta20
-rw-r--r--distro/centos/7/isoinfo7
-rw-r--r--distro/debian/32/cinnamon/entry2
-rw-r--r--distro/debian/32/cinnamon/install.sh2
-rw-r--r--distro/debian/32/cinnamon/isoinfo3
-rw-r--r--distro/debian/32/entry5
-rw-r--r--distro/debian/32/gnome/entry2
-rw-r--r--distro/debian/32/gnome/install.sh2
-rw-r--r--distro/debian/32/gnome/isoinfo3
-rw-r--r--distro/debian/32/install.sh7
-rw-r--r--distro/debian/32/kde/entry2
-rw-r--r--distro/debian/32/kde/install.sh2
-rw-r--r--distro/debian/32/kde/isoinfo3
-rw-r--r--distro/debian/32/lxde/entry2
-rw-r--r--distro/debian/32/lxde/install.sh2
-rw-r--r--distro/debian/32/lxde/isoinfo3
-rw-r--r--distro/debian/32/mate/entry2
-rw-r--r--distro/debian/32/mate/install.sh2
-rw-r--r--distro/debian/32/mate/isoinfo3
-rw-r--r--distro/debian/32/xfce/entry2
-rw-r--r--distro/debian/32/xfce/install.sh2
-rw-r--r--distro/debian/32/xfce/isoinfo3
-rw-r--r--distro/debian/64/cinnamon/isoinfo1
-rw-r--r--distro/debian/64/entry2
-rw-r--r--distro/debian/64/gnome/isoinfo1
-rw-r--r--distro/debian/64/kde/isoinfo1
-rw-r--r--distro/debian/64/lxde/isoinfo1
-rw-r--r--distro/debian/64/mate/isoinfo1
-rw-r--r--distro/debian/64/xfce/isoinfo1
-rw-r--r--distro/debian/SHA512SUMS96
-rw-r--r--distro/debian/isoinfo.common6
-rw-r--r--distro/fedora/29/install.sh2
-rw-r--r--distro/fedora/29/isoinfo8
-rw-r--r--distro/fedora/30/entry2
-rw-r--r--distro/fedora/30/isoinfo8
-rw-r--r--distro/fedora/31/entry2
-rw-r--r--distro/fedora/31/install.sh2
-rw-r--r--distro/fedora/31/isoinfo8
-rw-r--r--distro/fedora/32/entry2
-rw-r--r--distro/fedora/32/install.sh2
-rw-r--r--distro/fedora/32/isoinfo8
-rw-r--r--distro/fedora/36/entry (renamed from distro/fedora/29/entry)2
-rw-r--r--distro/fedora/36/install.sh (renamed from distro/fedora/30/install.sh)2
-rw-r--r--distro/fedora/36/isoinfo8
-rw-r--r--distro/gloriousarch/distroinfo2
-rw-r--r--distro/gloriousarch/mate/entry17
-rw-r--r--distro/gloriousarch/mate/install.sh11
-rw-r--r--distro/gloriousarch/mate/isoinfo9
-rw-r--r--distro/gloriousarch/nox/entry17
-rw-r--r--distro/gloriousarch/nox/install.sh11
-rw-r--r--distro/gloriousarch/nox/isoinfo9
-rw-r--r--distro/gloriousarch/xfce/entry13
-rw-r--r--distro/gloriousarch/xfce/install.sh1
-rw-r--r--distro/gloriousarch/xfce/isoinfo9
-rw-r--r--distro/grml/64/entry2
-rw-r--r--distro/grml/64/isoinfo4
-rw-r--r--distro/mint/cinnamon/config3
-rw-r--r--distro/mint/cinnamon/entry4
-rw-r--r--distro/mint/cinnamon/install.sh3
-rw-r--r--distro/mint/cinnamon/isoinfo5
-rw-r--r--distro/mint/isoinfo.common2
-rw-r--r--distro/mint/mate/config3
-rw-r--r--distro/mint/mate/entry4
-rw-r--r--distro/mint/mate/install.sh3
-rw-r--r--distro/mint/mate/isoinfo5
-rw-r--r--distro/mint/sha256sum.txt6
-rw-r--r--distro/mint/xfce/config3
-rw-r--r--distro/mint/xfce/entry4
-rw-r--r--distro/mint/xfce/install.sh3
-rw-r--r--distro/mint/xfce/isoinfo5
-rw-r--r--distro/mx/32/isoinfo2
-rw-r--r--distro/mx/64/isoinfo2
-rw-r--r--distro/mx/isoinfo.common2
-rw-r--r--distro/opensuse/meta20
-rw-r--r--distro/ubuntu/16.04/isoinfo4
-rw-r--r--distro/ubuntu/18.04/config2
-rw-r--r--distro/ubuntu/18.04/isoinfo9
-rw-r--r--distro/ubuntu/20.04/config3
-rw-r--r--distro/ubuntu/20.04/entry2
-rw-r--r--distro/ubuntu/20.04/install.sh2
-rw-r--r--distro/ubuntu/20.04/isoinfo11
-rw-r--r--distro/ubuntu/22.04/config3
-rw-r--r--distro/ubuntu/22.04/entry2
-rw-r--r--distro/ubuntu/22.04/install.sh2
-rw-r--r--distro/ubuntu/22.04/isoinfo11
-rw-r--r--distro/ubuntu/meta36
-rw-r--r--functions.sh197
-rwxr-xr-xtestusb.sh13
93 files changed, 578 insertions, 241 deletions
diff --git a/README.md b/README.md
index 90010d3..293ac0f 100644
--- a/README.md
+++ b/README.md
@@ -18,10 +18,12 @@ A presentation in Chinese is at https://wehack.space/vimacs/liveusb-builder.odp.
You need these packages on your GNU/Linux system to use liveusb-builder.
-- udevil: for mounting iso files
+- libarchive: for ISO image extraction
+- udisks2 (optional,recommended): for mounting USB disk partitions without being root
+- udevil (optional): for mounting USB disk partitions and ISO images without being root
- wget: for downloading
- syslinux (recommended): bootloader for legacy BIOS
-- GRUB: bootloader for leagacy BIOS if there's no syslinux, and bootloader for UEFI
+- GRUB: bootloader for legacy BIOS if there's no syslinux, and bootloader for UEFI
For Arch Linux users, just install [liveusb-builder-git](https://aur.archlinux.org/packages/liveusb-builder-git/) from AUR.
@@ -41,11 +43,19 @@ I've already used this method to successfully install Windows 7, OpenBSD 6.7, an
## Usage
+First, you need to have a partitioned USB drive. For the best legacy BIOS compatibility, it's recommended to use MSDOS (MBR) partition table. Because most UEFI firmware only supports FAT32 partitions, you need a FAT32 partition on the USB drive, and put the boot files into this partition.
+
### The easier way: one FAT32 partition
-First mount your USB drive partition. I recommend using udevil so that you can write files without as root.
+Suppose your USB stick device is /dev/sdb and the partition on the device is /dev/sdb1.
+
+```bash
+# install Arch, Mint (x86_64 with MATE Desktop) and Fedora 32 to USB
+./buildlive --root=/dev/sdb1 arch mint/mate fedora/32
+```
-Then run buildlive script as follows, suppose your USB is /dev/sdb and /dev/sdb1 is mount to /media/sdb1:
+The other way is to mount your USB drive partition first. I recommend using udevil so that you can write files without as root.
+Then run buildlive script as follows, suppose /dev/sdb1 is mount to /media/sdb1:
```bash
# install Arch, Mint (x86_64 with MATE Desktop) and Fedora 32 to USB
@@ -125,10 +135,18 @@ At last, make the Live USB (we install Arch and Fedora 32 in it):
$ ./buildlive --boot /media/boot --root /media/root arch fedora/32
```
+## Experimental features
+
+I've made some experimental features that are not yet merged to the main source tree.
+
+- [ia32efi-test](https://github.com/mytbk/liveusb-builder/commits/ia32efi-test): support IA32 EFI
+
## Status
The resulting USB stick works on QEMU with PC BIOS (SeaBIOS), UEFI (OVMF), libreboot (i440fx, GRUB txtmode) as firmware.
+The script ``testusb.sh`` can be used to test a USB stick with QEMU.
+
## Related work
You can search keyword ``multiboot`` on GitHub and find some related projects. Listed below is some related work I know or find.
diff --git a/buildlive b/buildlive
index ad607cb..3020410 100755
--- a/buildlive
+++ b/buildlive
@@ -17,21 +17,13 @@ DOWNLOAD_ONLY=0
UMOUNT_BOOT=0
UMOUNT_ROOT=0
CLEAN_USB=0
+BOOTLOADER_ONLY=0
. functions.sh
-msg() {
- echo -e "$1" >&2
-}
-
-fatalerror() {
- msg "\x1b[1;31m$1\x1b[0m"
- exit 1
-}
-
usage() {
>&2 cat << EOF
-$0 [--root <path>] [options] [distro 1] [distro 2] ...
+$0 [--root <path>] [options] [--distro=<metadist> <isofile>] [distro] ...
use $0 -L to list available distros
options:
--root <path>
@@ -39,6 +31,7 @@ options:
--boot <path>
--boot=<path>: set the path to put the kernel and loader files
--clean: clean the old live USB files before installing
+ --bootloader-only: only install the boot loader
--no-grub: do not install GRUB loader (still generate grub.cfg)
--grubcfg: do not do real install, only generate grub.cfg file
--downloadonly: only download the ISO files
@@ -52,7 +45,7 @@ try_mount() {
then
if ! findmnt "$1" > /dev/null
then
- udevil mount "$1" > /dev/null
+ mount_block "$1" > /dev/null
mnt=$(findmnt -n -o TARGET "$1")
else
mnt=$(findmnt -n -o TARGET "$1")
@@ -63,6 +56,9 @@ try_mount() {
echo "$mnt"
}
+detect_block_mount_tool 2>/dev/null
+detect_iso_mount_tool 2>/dev/null
+
unset ISOPATH
CFGFILE="$HOME/.liveusb-builder"
test -f "$CFGFILE" && source "$CFGFILE" || true
@@ -91,6 +87,9 @@ do
--dev=*)
DEVNAME=${1/--dev=}
;;
+ --bootloader-only)
+ BOOTLOADER_ONLY=1
+ ;;
--no-grub)
INSTALL_GRUB=0
;;
@@ -103,6 +102,20 @@ do
--clean)
CLEAN_USB=1
;;
+ --distro=*)
+ metadist="${1/--distro=}"
+ if [ ! -f "distro/$metadist/meta" ]
+ then
+ fatalerror "distro/$metadist/meta not found"
+ fi
+ shift
+ isofn="$1"
+ if [ ! -f "$isofn" ]
+ then
+ fatalerror "File $isofn not found"
+ fi
+ DISTROLIST=(${DISTROLIST[@]} "/meta@$metadist@$isofn")
+ ;;
*=*|-*)
usage
exit 1
@@ -158,7 +171,7 @@ if [[ "$DOWNLOAD_ONLY" == 0 ]]; then
msg "Files will be copy to $ROOTPATH"
fi
-if [[ "${#DISTROLIST[@]}" == 0 ]]; then
+if [[ "$BOOTLOADER_ONLY" == 0 && "${#DISTROLIST[@]}" == 0 ]]; then
usage
exit 1
fi
@@ -174,6 +187,17 @@ fi
for i in ${DISTROLIST[@]}
do
+ if [[ "$i" == /meta@* ]]
+ then
+ # FIXME: we assume the meta file path and the iso file name
+ # does not have '@' character
+ ISOFILE="$(echo "$i" | cut -d@ -f3)"
+ ISOLIST=("${ISOLIST[@]}" "$ISOFILE")
+ # TODO: we just use the file name as the ISO name
+ # can we do it better?
+ ISONAMELIST=("${ISONAMELIST[@]}" "$(basename "$ISOFILE")")
+ continue
+ fi
process_isoinfo "$i"
ISOLIST=("${ISOLIST[@]}" "$ISOFILE")
ISONAMELIST=("${ISONAMELIST[@]}" "$ISONAME")
@@ -199,16 +223,28 @@ do
DISTRO="${DISTROLIST[$i-1]}"
ISO_FILEPATH="$ISOPATH/$ISOFILE"
- set_distro "$DISTRO"
- export DISTRONAME KEYWORD # for grub and syslinux generation
-
- process_distro "$DISTRO"
+ if [[ "$DISTRO" == /meta@* ]]
+ then
+ metadir="$(echo "$DISTRO" | cut -d@ -f2)"
+ _meta=meta_
+ ISO_FILEPATH="$ISOFILE"
+ DISTRO="$metadir"
+ set_distro "$metadir"
+ KEYWORD="$ISONAME"
+ source "distro/$metadir/meta"
+ else
+ _meta=
+ ISO_FILEPATH="$ISOPATH/$ISOFILE"
+ set_distro "$DISTRO"
+ export DISTRONAME KEYWORD # for grub and syslinux generation
+ process_distro "$DISTRO"
+ fi
if [ "$GRUBCFG_ONLY" == 0 ]; then
install_live
fi
- gen_grubcfg "$DISTRO" >> "$GRUBCFG"
- gen_syslinux "$DISTRO" >> "$SYSLINUXCFG"
+ ${_meta}gen_grubcfg "$DISTRO" >> "$GRUBCFG"
+ ${_meta}gen_syslinux "$DISTRO" >> "$SYSLINUXCFG"
done
if [ "$GRUBCFG_ONLY" == 1 ]; then
@@ -226,9 +262,9 @@ fi
if [ "$UMOUNT_BOOT" == 1 ]; then
msg 'Trying to umount the boot mountpoint, you may need to wait for sync() to complete.'
- udevil umount "$BOOTPATH"
+ unmount_block "$BOOTPATH"
fi
if [ "$UMOUNT_ROOT" == 1 -a "$ROOTPATH" != "$BOOTPATH" ]; then
msg 'Trying to umount the root mountpoint, you may need to wait for sync() to complete.'
- udevil umount "$ROOTPATH"
+ unmount_block "$ROOTPATH"
fi
diff --git a/distro/arch/entry1 b/distro/arch/entry1
index 38dfcd3..07656b6 100644
--- a/distro/arch/entry1
+++ b/distro/arch/entry1
@@ -1,7 +1,7 @@
TITLE='Arch Linux x86_64'
-KERNEL=/liveusb-kernel/$KEYWORD/x86_64/vmlinuz-linux
-INITRD=(/liveusb-kernel/$KEYWORD/intel-ucode.img
- /liveusb-kernel/$KEYWORD/amd-ucode.img
- /liveusb-kernel/$KEYWORD/x86_64/initramfs-linux.img)
+prefix="/liveusb-kernel/$KEYWORD/arch/boot"
+KERNEL="$prefix/x86_64/vmlinuz-linux"
+INITRD=("$prefix/intel-ucode.img" "$prefix/amd-ucode.img"
+ "$prefix/x86_64/initramfs-linux.img")
OPTION="img_dev=/dev/disk/by-uuid/$UUID img_loop=liveusb-data/$KEYWORD/$ISOFILE"
X64=y
diff --git a/distro/arch/install.sh b/distro/arch/install.sh
index 1321a0b..96e583e 100644
--- a/distro/arch/install.sh
+++ b/distro/arch/install.sh
@@ -1,9 +1,6 @@
install_live() {
- mount_iso
install -d "$DATADIR/$KEYWORD" "$KERNELDIR/$KEYWORD"
- cp -r "$ISOMNT/arch/boot/x86_64" "$KERNELDIR/$KEYWORD/"
+ iso_extract "${ISO_FILEPATH}" arch/boot/x86_64 'arch/boot/*.img' "$KERNELDIR/$KEYWORD/"
cp "${ISO_FILEPATH}" "$DATADIR/$KEYWORD/"
- cp "$ISOMNT/arch/boot/"*.img "$KERNELDIR/$KEYWORD/"
- umount_iso
}
diff --git a/distro/arch/isoinfo b/distro/arch/isoinfo
index 3212416..9d51eaf 100644
--- a/distro/arch/isoinfo
+++ b/distro/arch/isoinfo
@@ -1,11 +1,11 @@
-_isodate=2020.10.01
+_isodate=2023.07.01
ISONAME="$DISTRONAME $_isodate"
ISOURL=iso/$_isodate/archlinux-$_isodate-x86_64.iso
-SHA1=67c2603d194a004f7010f57c25faa5dcea04a05f
+SHA256=1a2c1cdea0118b60525f55ee616e9cd4cf68fe17db906ce3d8e46fd06f9907eb
mirrorlist=(
https://mirrors.tuna.tsinghua.edu.cn/archlinux
-http://mirrors.ustc.edu.cn/archlinux
+https://mirrors.ustc.edu.cn/archlinux
https://mirror.aur.rocks
http://archlinux.de-labrusse.fr
http://mirror.cedille.club/archlinux
diff --git a/distro/arch/meta b/distro/arch/meta
new file mode 100644
index 0000000..fcfe18f
--- /dev/null
+++ b/distro/arch/meta
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+# TODO: detect kernel, initramfs, and ucode filenames
+
+entry() {
+ TITLE="$ISONAME"
+ prefix="/liveusb-kernel/$KEYWORD/arch/boot"
+ KERNEL="$prefix/x86_64/vmlinuz-linux"
+ INITRD=("$prefix/intel-ucode.img" "$prefix/amd-ucode.img"
+ "$prefix/x86_64/initramfs-linux.img")
+ OPTION="img_dev=/dev/disk/by-uuid/$UUID img_loop=liveusb-data/$KEYWORD/$ISONAME"
+ X64=y
+}
+
+install_live() {
+ install -d "$DATADIR/$KEYWORD" "$KERNELDIR/$KEYWORD"
+ iso_extract "${ISO_FILEPATH}" arch/boot/x86_64 'arch/boot/*.img' "$KERNELDIR/$KEYWORD/"
+ cp "${ISO_FILEPATH}" "$DATADIR/$KEYWORD/"
+}
+
+entries=(entry)
diff --git a/distro/centos/7/isoinfo b/distro/centos/7/isoinfo
index 7cf0f37..a355d5f 100644
--- a/distro/centos/7/isoinfo
+++ b/distro/centos/7/isoinfo
@@ -1,7 +1,8 @@
ISONAME="$DISTRONAME 7 Install DVD"
-ISOURL=7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
-SHA256=087a5743dc6fd6706d9b961b8147423ddc029451b938364c760d75440eb7be14
+ISOURL=7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
+SHA256=e33d7b1ea7a9e2f38c8f693215dd85254c3a4fe446f93f563279715b68d07987
mirrorlist=(
-https://mirrors.tuna.tsinghua.edu.cn/centos
+https://mirrors.ustc.edu.cn/centos/
+https://mirrors.pku.edu.cn/centos/
)
diff --git a/distro/debian/32/cinnamon/entry b/distro/debian/32/cinnamon/entry
new file mode 100644
index 0000000..b25f280
--- /dev/null
+++ b/distro/debian/32/cinnamon/entry
@@ -0,0 +1,2 @@
+_desktop=Cinnamon
+source distro/debian/32/entry
diff --git a/distro/debian/32/cinnamon/install.sh b/distro/debian/32/cinnamon/install.sh
new file mode 100644
index 0000000..a48726f
--- /dev/null
+++ b/distro/debian/32/cinnamon/install.sh
@@ -0,0 +1,2 @@
+source distro/debian/32/install.sh
+
diff --git a/distro/debian/32/cinnamon/isoinfo b/distro/debian/32/cinnamon/isoinfo
new file mode 100644
index 0000000..88a104a
--- /dev/null
+++ b/distro/debian/32/cinnamon/isoinfo
@@ -0,0 +1,3 @@
+_desktop=Cinnamon
+_arch=i386
+source distro/debian/isoinfo.common
diff --git a/distro/debian/32/entry b/distro/debian/32/entry
new file mode 100644
index 0000000..b0f62fa
--- /dev/null
+++ b/distro/debian/32/entry
@@ -0,0 +1,5 @@
+TITLE="Debian 10.10.0 i386 ${_desktop}"
+KERNEL=/liveusb-kernel/debian/32/vmlinuz-4.19.0-9-amd64
+INITRD=/liveusb-kernel/debian/32/initrd.img-4.19.0-9-amd64
+OPTION="boot=live findiso=liveusb-data/debian/$ISOFILE"
+X64=n
diff --git a/distro/debian/32/gnome/entry b/distro/debian/32/gnome/entry
new file mode 100644
index 0000000..29e1900
--- /dev/null
+++ b/distro/debian/32/gnome/entry
@@ -0,0 +1,2 @@
+_desktop=GNOME
+source distro/debian/32/entry
diff --git a/distro/debian/32/gnome/install.sh b/distro/debian/32/gnome/install.sh
new file mode 100644
index 0000000..a48726f
--- /dev/null
+++ b/distro/debian/32/gnome/install.sh
@@ -0,0 +1,2 @@
+source distro/debian/32/install.sh
+
diff --git a/distro/debian/32/gnome/isoinfo b/distro/debian/32/gnome/isoinfo
new file mode 100644
index 0000000..6c55455
--- /dev/null
+++ b/distro/debian/32/gnome/isoinfo
@@ -0,0 +1,3 @@
+_desktop=GNOME
+_arch=i386
+source distro/debian/isoinfo.common
diff --git a/distro/debian/32/install.sh b/distro/debian/32/install.sh
new file mode 100644
index 0000000..e03fa68
--- /dev/null
+++ b/distro/debian/32/install.sh
@@ -0,0 +1,7 @@
+install_live() {
+ install -d "$KERNELDIR/debian/32" "$DATADIR/debian"
+ cp "${ISO_FILEPATH}" "$DATADIR/debian/"
+ mount_iso
+ cp "$ISOMNT/live/vmlinuz"* "$ISOMNT/live/initrd.img"* "$KERNELDIR/debian/32/"
+ umount_iso
+}
diff --git a/distro/debian/32/kde/entry b/distro/debian/32/kde/entry
new file mode 100644
index 0000000..22ff81a
--- /dev/null
+++ b/distro/debian/32/kde/entry
@@ -0,0 +1,2 @@
+_desktop=KDE
+source distro/debian/32/entry
diff --git a/distro/debian/32/kde/install.sh b/distro/debian/32/kde/install.sh
new file mode 100644
index 0000000..a48726f
--- /dev/null
+++ b/distro/debian/32/kde/install.sh
@@ -0,0 +1,2 @@
+source distro/debian/32/install.sh
+
diff --git a/distro/debian/32/kde/isoinfo b/distro/debian/32/kde/isoinfo
new file mode 100644
index 0000000..5351b1a
--- /dev/null
+++ b/distro/debian/32/kde/isoinfo
@@ -0,0 +1,3 @@
+_desktop=KDE
+_arch=i386
+source distro/debian/isoinfo.common
diff --git a/distro/debian/32/lxde/entry b/distro/debian/32/lxde/entry
new file mode 100644
index 0000000..631cba9
--- /dev/null
+++ b/distro/debian/32/lxde/entry
@@ -0,0 +1,2 @@
+_desktop=LXDE
+source distro/debian/32/entry
diff --git a/distro/debian/32/lxde/install.sh b/distro/debian/32/lxde/install.sh
new file mode 100644
index 0000000..a48726f
--- /dev/null
+++ b/distro/debian/32/lxde/install.sh
@@ -0,0 +1,2 @@
+source distro/debian/32/install.sh
+
diff --git a/distro/debian/32/lxde/isoinfo b/distro/debian/32/lxde/isoinfo
new file mode 100644
index 0000000..cc14ed7
--- /dev/null
+++ b/distro/debian/32/lxde/isoinfo
@@ -0,0 +1,3 @@
+_desktop=LXDE
+_arch=i386
+source distro/debian/isoinfo.common
diff --git a/distro/debian/32/mate/entry b/distro/debian/32/mate/entry
new file mode 100644
index 0000000..c2e53a4
--- /dev/null
+++ b/distro/debian/32/mate/entry
@@ -0,0 +1,2 @@
+_desktop=MATE
+source distro/debian/32/entry
diff --git a/distro/debian/32/mate/install.sh b/distro/debian/32/mate/install.sh
new file mode 100644
index 0000000..a48726f
--- /dev/null
+++ b/distro/debian/32/mate/install.sh
@@ -0,0 +1,2 @@
+source distro/debian/32/install.sh
+
diff --git a/distro/debian/32/mate/isoinfo b/distro/debian/32/mate/isoinfo
new file mode 100644
index 0000000..41fa5ad
--- /dev/null
+++ b/distro/debian/32/mate/isoinfo
@@ -0,0 +1,3 @@
+_desktop=MATE
+_arch=i386
+source distro/debian/isoinfo.common
diff --git a/distro/debian/32/xfce/entry b/distro/debian/32/xfce/entry
new file mode 100644
index 0000000..6c2aa5e
--- /dev/null
+++ b/distro/debian/32/xfce/entry
@@ -0,0 +1,2 @@
+_desktop=Xfce
+source distro/debian/32/entry
diff --git a/distro/debian/32/xfce/install.sh b/distro/debian/32/xfce/install.sh
new file mode 100644
index 0000000..a48726f
--- /dev/null
+++ b/distro/debian/32/xfce/install.sh
@@ -0,0 +1,2 @@
+source distro/debian/32/install.sh
+
diff --git a/distro/debian/32/xfce/isoinfo b/distro/debian/32/xfce/isoinfo
new file mode 100644
index 0000000..bbdb88a
--- /dev/null
+++ b/distro/debian/32/xfce/isoinfo
@@ -0,0 +1,3 @@
+_desktop=Xfce
+_arch=i386
+source distro/debian/isoinfo.common
diff --git a/distro/debian/64/cinnamon/isoinfo b/distro/debian/64/cinnamon/isoinfo
index 4968327..4ca2f33 100644
--- a/distro/debian/64/cinnamon/isoinfo
+++ b/distro/debian/64/cinnamon/isoinfo
@@ -1,2 +1,3 @@
_desktop=Cinnamon
+_arch=amd64
source distro/debian/isoinfo.common
diff --git a/distro/debian/64/entry b/distro/debian/64/entry
index af7630c..ae36f69 100644
--- a/distro/debian/64/entry
+++ b/distro/debian/64/entry
@@ -1,4 +1,4 @@
-TITLE="Debian 10.4.0 AMD64 ${_desktop}"
+TITLE="Debian 10.10.0 AMD64 ${_desktop}"
KERNEL=/liveusb-kernel/debian/64/vmlinuz-4.19.0-9-amd64
INITRD=/liveusb-kernel/debian/64/initrd.img-4.19.0-9-amd64
OPTION="boot=live findiso=liveusb-data/debian/$ISOFILE"
diff --git a/distro/debian/64/gnome/isoinfo b/distro/debian/64/gnome/isoinfo
index 3ff5a3e..cdefeae 100644
--- a/distro/debian/64/gnome/isoinfo
+++ b/distro/debian/64/gnome/isoinfo
@@ -1,2 +1,3 @@
_desktop=GNOME
+_arch=amd64
source distro/debian/isoinfo.common
diff --git a/distro/debian/64/kde/isoinfo b/distro/debian/64/kde/isoinfo
index a0713be..216ef77 100644
--- a/distro/debian/64/kde/isoinfo
+++ b/distro/debian/64/kde/isoinfo
@@ -1,2 +1,3 @@
_desktop=KDE
+_arch=amd64
source distro/debian/isoinfo.common
diff --git a/distro/debian/64/lxde/isoinfo b/distro/debian/64/lxde/isoinfo
index 77fc955..36cac85 100644
--- a/distro/debian/64/lxde/isoinfo
+++ b/distro/debian/64/lxde/isoinfo
@@ -1,2 +1,3 @@
_desktop=LXDE
+_arch=amd64
source distro/debian/isoinfo.common
diff --git a/distro/debian/64/mate/isoinfo b/distro/debian/64/mate/isoinfo
index e9bc172..43b55f1 100644
--- a/distro/debian/64/mate/isoinfo
+++ b/distro/debian/64/mate/isoinfo
@@ -1,2 +1,3 @@
_desktop=MATE
+_arch=amd64
source distro/debian/isoinfo.common
diff --git a/distro/debian/64/xfce/isoinfo b/distro/debian/64/xfce/isoinfo
index 3c65a22..8e62417 100644
--- a/distro/debian/64/xfce/isoinfo
+++ b/distro/debian/64/xfce/isoinfo
@@ -1,2 +1,3 @@
_desktop=Xfce
+_arch=amd64
source distro/debian/isoinfo.common
diff --git a/distro/debian/SHA512SUMS b/distro/debian/SHA512SUMS
index 5ac6ce3..02d0bc0 100644
--- a/distro/debian/SHA512SUMS
+++ b/distro/debian/SHA512SUMS
@@ -1,32 +1,64 @@
-998c01055684c599660ff8d11b0f89ad23fa943218772179a3284be56c0ca04663676dd4ae2d286072b3f5649842d5b1f28239265cca7ada2f80a2aca5d496f0 debian-live-10.4.0-amd64-cinnamon.contents
-6358481387514047f03312a263884b48e5b4f283f0c1578c8eb99b66d2a95e0ac90f12607a3cd337942bb3b66ca2a6c549f63fd1a9c47dd80d186b6cae73bbd7 debian-live-10.4.0-amd64-cinnamon.iso
-516914c30a358e7b0abc2b53e30ddf1c409ae8bf47372c6dd0b1d63f9c19cce6199f1beb2d4cba93c545e1cebea9b340fd612f980278630a6b04f1fcb9a1fede debian-live-10.4.0-amd64-cinnamon.log
-f7b4748ce99c97e53c45fff14b5e9e4bf45e77d2183cc7dbf1f4c23ccbe5dac5ca084958dfacd0f8e6e8c1b1147a8aa676e857467d62e5c9a0d70357868ad447 debian-live-10.4.0-amd64-cinnamon.packages
-998c01055684c599660ff8d11b0f89ad23fa943218772179a3284be56c0ca04663676dd4ae2d286072b3f5649842d5b1f28239265cca7ada2f80a2aca5d496f0 debian-live-10.4.0-amd64-gnome.contents
-9677ffe630b522312e19d3be36c50c2c9e0cfdb2865dda76ec178fd973919a738e1468bd564a51eb03125c2b8dd4f1003567cadd74c340f9c56936771cd39878 debian-live-10.4.0-amd64-gnome.iso
-d3416e4e4597a381e1e6ef6c18315d25ef00f318696069751f239bab58a8b5bd8f33b1a39e8c324866957a2a1c4ada0d05d4dd183a1c6fc16980d3060365f36a debian-live-10.4.0-amd64-gnome.log
-ea7df49283576bcec005edaed285cc41b2a043b2ba636f87fbc14844cff7a81c8d3965c59907421c10e9b7b87db527be223c258a43a1f079833cf55ba5149527 debian-live-10.4.0-amd64-gnome.packages
-9e7397090019b831d5aa24fda9249a03ce1c6997cbf966b55c3d70f510c2cc7a9ca018a0c8f3ee5a7b46606e0d87731717ece1692844fbe514e01bce92e168fd debian-live-10.4.0-amd64-kde.contents
-e61f59bcae03e19cf15a11ad9819a85d8019dccc87cc6c063c43b9a4a651cb9b1d663053ddfe6acef2f6caa169255c60a87db67bbcb641c37787e2fd4741dd8e debian-live-10.4.0-amd64-kde.iso
-68d6303820c11e1041e966b6f45cf80651b745a667fecd8040b62a748c68b46943233f48950f494e762eb8140d080acdbff2e46b08111a56b1c389e9b800c687 debian-live-10.4.0-amd64-kde.log
-2db83024642e3b926d0a5d789513b29f3f9517472d910b31fb3ca9bb313c6914bb5ffc83f63fa9caab557d9d17e78074201f71b950a6a70270af89c376414645 debian-live-10.4.0-amd64-kde.packages
-8edc3d2495992069e6db2648f59c3a1663cc18808352094c8d2c974cc22a96be206cc8fdc781dd15f08f242376b1b3655fb7ce8e49bfb480806e3a2b1f721805 debian-live-10.4.0-amd64-lxde.contents
-f50f074c77dc3adf0d290c1fa3cfd5cd45feb1b7291494b2c8c510c702b126b13907786ddf0a0f528520af5a416766898f6ad4cd228fbff671e6845ff9608dcc debian-live-10.4.0-amd64-lxde.iso
-423a11ae182f7bd338391ecde1fd66556d9b69f7df58eca28938ab2bd22cadf79df2fc335f72c32458fa0487a9f99c805a0509c7c13eec3fc610022352730afc debian-live-10.4.0-amd64-lxde.log
-a97373b784f29f7a6347e7786587b2e5674f9ee64ffc3007dd2ccbfff6f7fe2f824f7636dd0a7317f7f62e78643132f2755fd62351b8fffe85bc533036abf798 debian-live-10.4.0-amd64-lxde.packages
-8edc3d2495992069e6db2648f59c3a1663cc18808352094c8d2c974cc22a96be206cc8fdc781dd15f08f242376b1b3655fb7ce8e49bfb480806e3a2b1f721805 debian-live-10.4.0-amd64-lxqt.contents
-438a440287f003feef4c662d9ab8f5e060100bdfc2738efb9fb7b9abadf9e30381037c4ffeb02c91726b8bb0cf11d2d5a0711d2b9f8791ae032c2755029ca95c debian-live-10.4.0-amd64-lxqt.iso
-e50f0bc2307742923e0a9885f0faeb6484467ae0be86cab8e38509bca08067312d64b62161833baaba69587d0ca17e4e81247a97b605feb5ca05a8e3f35e7a31 debian-live-10.4.0-amd64-lxqt.log
-191c9a40af28d00ac61abc5be92e2ac8a46fd600483f40bdbc406bb0e1f95261809f62144f1198010aff1599acae9c6045b75190ae144fd129290fc8a02bfdd0 debian-live-10.4.0-amd64-lxqt.packages
-447bdde16eb4a1ee89ac17250c9ac5678225b45bd064e39a3f60707e9ad5a8e3e770b1754d5e5b884031630377aa38e6e84eab7e839da1494932d0354d007148 debian-live-10.4.0-amd64-mate.contents
-e9aeec69742f1dbc52f3adfc908f0b9749cc2f014a9854679df0a4fdfeeeb32be898cdeded05329d5286b5d81ec502f133da7ece2164c57216991ab45bc0e66d debian-live-10.4.0-amd64-mate.iso
-c31d103869ddfe6f54e1af4b699c0566e4bbb2531de254a315351dc72c2a486f184bef62841e4b2ad399420eb7101e54f38bf39804d146b6a54930141379bdae debian-live-10.4.0-amd64-mate.log
-e8bf93d8893bac2f4e943e36ad715dd422d4447cf178f127826d2a6e299f8d79e07e4ee628be2a8f28e41db4d457eb8100ce0fbe9c233269adeea390fa9e3822 debian-live-10.4.0-amd64-mate.packages
-fc9eae42f7357fa2e51d877f609fcf8796edb15f09473018d890a1137ec4b02eb7d6bbf58f7f6920826b935b89fe06b7ca97aa3c10466b972349452aa5310d44 debian-live-10.4.0-amd64-standard.contents
-52d892eaf19dca7e9fa5ca05ae69ee80f16adc2c28cb580a884ee3b4b72381d8c89a997a21c0e79f75dc28aae738c8f942d82401299f9fd1bcfea23bc3843708 debian-live-10.4.0-amd64-standard.iso
-3dd69569644f06c6a0031099ebb08c878b3e4c919343560f3982a5a664ff9ae32a918d75a5965dca95ecd6b380f5446b449a1e7bee7650fca99b6aef5d44ba97 debian-live-10.4.0-amd64-standard.log
-d015fbf3d34a11bf5c6866b24cfb727b850c6b19a11473f34f9c7f7295041fa5533d9228fdee4a3b040b36003b2f8def22fbccb6ae8575db8553e95ff5b8b66d debian-live-10.4.0-amd64-standard.packages
-9fdeef676000b6db6f9f4ad94707ae87a781db1a6cda134f1447cf53232811c4a65bf65357acc5ce05dd8e1438a1c1fb32cdb37c9b7e28f69661f964a7ff79f6 debian-live-10.4.0-amd64-xfce.contents
-2920f398c5e9036fcec8f71b2f28b0f2a85e3ab805e66088192dc56f679e5f59f26634e8bbde70badc3cf7ce353f54a2757b2017cbc3d3df9fb2b2065b3c1041 debian-live-10.4.0-amd64-xfce.iso
-1978131d4dcd537cdbfbe0cba8442c2b4856151eb743a052ffeb521e12fab443ec95bf0952c04fbf7a3254785af42a016f3ab29a61f0a20c2280ff7d6bd8422a debian-live-10.4.0-amd64-xfce.log
-40c5fc3e3bc77e5bb1c6dc266bf33c2368e9045868f5f233c8399fbb7692d76c8462e42d602d1db07a4bcfe218d3008887c705e2bdd91f9e1903a438f278ede7 debian-live-10.4.0-amd64-xfce.packages
+2204cf6700ac1ed1a47318d9e40fffdfd0f589e2e7525f5943a95de4b6bca09ae8d9de5b55de23b045255c1bedfc67b627026e285e7f4e77abf5815998779173 debian-live-10.10.0-amd64-cinnamon.contents
+f3d2933547f7f7731846aed4270d47c88e9700c7c3482fbdc914c7b7ed33f12e07d138d84b6492f41af7d2b520cf49b9cd27c5254de15331f41034ca66c1b4a8 debian-live-10.10.0-amd64-cinnamon.iso
+558ef2d73cb64c449fba948b17d64547b8ae3c7f1aa5b31754cae1d7cfb1a25ff00b5b8152df231a058bf407bc61cf05972691892c1deab84a7ee73aa21a18e1 debian-live-10.10.0-amd64-cinnamon.log
+35f811450b5d7c0b93fae9305d15efe8c9229eeefd43b058d60da14c1c7ba454609e07307c371534c95be1dbbbd8756eb7b63bf938e17c6493e7a8836c1874f6 debian-live-10.10.0-amd64-cinnamon.packages
+2204cf6700ac1ed1a47318d9e40fffdfd0f589e2e7525f5943a95de4b6bca09ae8d9de5b55de23b045255c1bedfc67b627026e285e7f4e77abf5815998779173 debian-live-10.10.0-amd64-gnome.contents
+9be098fcbe7fa7f8f061d9e4497ddd32aa4085d0c7db119a80dc79c9cf7d9783b234839a696da427b70a3817938aa01627ef414ffd3c54ab6a4a750bbea81e5f debian-live-10.10.0-amd64-gnome.iso
+cc71037d64d7200afaf55a70d48c54ce60d86c6ed9496a338630c50a4f0c9bfe5b27dc6c0db9f196c6933dc4df5683a87c9cd911371defa43486cf63097952e6 debian-live-10.10.0-amd64-gnome.log
+577d5b61d519191999f6f26d28be4cc1ab420a308fa4123d2fdce8e81f644c50a699128c1131269a66d16adec68dbc124286fcfa24ff4b3cd11d28d2ff2592f2 debian-live-10.10.0-amd64-gnome.packages
+f106d2b17e68824a1c429c26f2183077e9992fda0079ce777dd0f55d52787759a6fe07d5d131581c34c17f477c2473c6ce688d7c3f0c1f7bcec103ac7efa16f5 debian-live-10.10.0-amd64-kde.contents
+8e93cfab40af699f08cd81897e1594741214b811f651145ee26994719e205ec9328b15e165f44f39171eb1f25bafdd3f35e9096bec4b61043f9f84c7ec7874be debian-live-10.10.0-amd64-kde.iso
+41562bcfe92c7d23ff57221ecb423d36f4c6f0d7e2f2ff17b44ca85080f3a7d86c910ae687a660bfdc3ab8f68e99bcca441080d682a238449c65b4c362b1aa29 debian-live-10.10.0-amd64-kde.log
+df99de35a470f802a7d5ae802eb653054f531d468d88ea49ea7351f2d333cf4616c727f6be2cbeb2e601b66a028ad3b8300bc639415ad4e5d69ad3b94b212346 debian-live-10.10.0-amd64-kde.packages
+efa506e4489646e558156eb1e9c89e37fa75eece651e786b7cbaae3c0c7d02ff9f19ba2a45feef48820a16a4f5fa4d8ae3d0357b0d1dd8a704a491d899ed4a3e debian-live-10.10.0-amd64-lxde.contents
+b4a9e55e55d32428bf0ec7f81ab36795f94367fddb70363eeb174b45e44fbe77745b739a1c8118682efff234f98c1ee7e22288ff289fc0ebbcbe6a3a6c00be28 debian-live-10.10.0-amd64-lxde.iso
+8dbc6ecc288db5449e7a9d356cbd97835cf0cd227ce4b676e7c3b23ffd6b32edf6c6acfaeede0892d113062f23d20fbc3c8de0efe361b12c80fe8cbf2cda7acd debian-live-10.10.0-amd64-lxde.log
+e7d74e91348ba8a5e8fa5c78b4c0b07224110175af1fb3b2ecccdd4ae0d59f09bf56f1bb266c78398b79bd05f53749774396567e4b7f3d6608abed1eb1a039d3 debian-live-10.10.0-amd64-lxde.packages
+efa506e4489646e558156eb1e9c89e37fa75eece651e786b7cbaae3c0c7d02ff9f19ba2a45feef48820a16a4f5fa4d8ae3d0357b0d1dd8a704a491d899ed4a3e debian-live-10.10.0-amd64-lxqt.contents
+2673939a529b85322321c5ac81a169d67e1ce8a216881f4873e4c10263bb70f805373f7ae36930c2039fff6eb3d874f1a6a97ebdd90544902d66bfaa654e7329 debian-live-10.10.0-amd64-lxqt.iso
+340913301da8be3e2332401a10073832504a5a55d5bd786f00644b254ae13a9bb74e975b4063388aa85ac256f341c0b13890f7fc8bfbcd44b3828d30e289669f debian-live-10.10.0-amd64-lxqt.log
+f24111472bbf84bbda5b4e0aa798d52d25d9bce58cbe2b03ac8691f63c71b55c463efe8c8f6caee959f113906ac64bc89db7def4e418da87e8372daffaeb262f debian-live-10.10.0-amd64-lxqt.packages
+270bc6d00af345d12a1b69fdcbeff3dbda2f11c4e46dbbef0b425a8b9487c3203fcd164f59b98bd3faa690642463beda72d7cbb23d47299ac3f61d23cbebdfef debian-live-10.10.0-amd64-mate.contents
+2216654c795d7f0fed75a43ca420e7bec4370b27572f3e87470bf850b90a1e4a7bde30cdd9aaf9fba681a9c3458322d777d5c6a03a464d8a282e68b772533b42 debian-live-10.10.0-amd64-mate.iso
+f0ae601c69b8aae046f59d652deb96bd91bb5fb38d0710c1bf0e75249135832297e7155f4c3aad0afd93a1193480a0ab62b5bf2250c5c296df6fb046ba223714 debian-live-10.10.0-amd64-mate.log
+a1c9e4cc2cfdf8417594fd7c334642d7dd01ea102c4bb99b7feeab8aecb86436943562b834d3e3266e01ec12a192aa26bf7048a340b774469e4580941c8b507c debian-live-10.10.0-amd64-mate.packages
+2cd7bd744635c918064a413aff468423de431a8c083cba4fef6509e8feb9236fb63f0f5a897c65a5060e46d4002f3896c17f1289b9f20b902359765f97648b6a debian-live-10.10.0-amd64-standard.contents
+860ef69250e3e7f96c58defdb0273ba7bb4e1dc2265e263104650284eb39a7f44c8884339221707965dff628b59e26d0469fd71f3525a34129ee916a2d4b1af8 debian-live-10.10.0-amd64-standard.iso
+7cc5d1e943152d9c8ea9448ba4b0e5b915348bd4aef2b9b13bbb318574e84168ce4af34f25b9ef85d9b4855228654e3bd95e14bb803fa4a7d11236bb7b494427 debian-live-10.10.0-amd64-standard.log
+344928f3a8fc0ad48ab7d56a140137f97e177bf1d87c2923a05a703d3403a793b571d1a4ee98d6057e10457c2c52579818bf6127917d3971c4d325038f17c481 debian-live-10.10.0-amd64-standard.packages
+819461f7d6362b3c19a422bb1721d9fcef767f16d5d366403d7f40b7e8b5e8bab293299f0b9d29c7b67aeb7e244c7a3020dd1792f237379b6927669c2cd3782a debian-live-10.10.0-amd64-xfce.contents
+1e134422f1a8397efe02fe3608ce0c3a1bc63ca0b3924621c97900d4a380af6dceed61c0079519c0376d31f88921200c8134d2ec8b57e8e821cad8966a3212b8 debian-live-10.10.0-amd64-xfce.iso
+740a341c0b173ff9644363b0089a60531ec6cb369aa1ca328ad9c58d06ce02df592441ae7e7ba67efb3f863a3bd912b0c3e3f0c5ba5f421b9d88bc5b224aa8b5 debian-live-10.10.0-amd64-xfce.log
+12ffd020c077e948c8344a201cee41897a29e9860787713d2d1a4eddb309ad011556eb6193fc0d6ec726495ef090949e6de70e883f36b9c874dff7921198ecb8 debian-live-10.10.0-amd64-xfce.packages
+2c8b98709ea3c823cdf32af79e224b51f826bc2fece0fbd08a8513114905efe13ccab8114228f37bdba5a32abf85d08d63ed5686ca505cdfd1128a3eb2742f83 debian-live-10.10.0-i386-cinnamon.contents
+5b319d91bfbfd85bb90a6319b2930a153da0653456ac33d5a7e97b4fc2e7a9147d0cb0259dbaa182118df2756a4bd5fc80f624f0d193db1e5c2faa2f632df1e2 debian-live-10.10.0-i386-cinnamon.iso
+c86e145b102bb703aaaeb1bdc60b6ac89957137c1df42c0ae4149274860b659710bf32be88c1d129f7740d8e5bedecbd1b01c121cbd3db284ac9688273253d3d debian-live-10.10.0-i386-cinnamon.log
+5f726aa1db3328234128a6aaeb1fe7c5089233a3bd4a06a0bd4c9c28905a30aadd263fd7faffd717a40bac63c008df0035f374d61ade7239f30800e96e9345a8 debian-live-10.10.0-i386-cinnamon.packages
+2c8b98709ea3c823cdf32af79e224b51f826bc2fece0fbd08a8513114905efe13ccab8114228f37bdba5a32abf85d08d63ed5686ca505cdfd1128a3eb2742f83 debian-live-10.10.0-i386-gnome.contents
+3d2f496d6d9f4c0f5469779b1562fe7f72af49a489cc042dd3f90509e072f2bf394309ec818c6619445da8163d2f361a058244994cef1a36b831d6aa859f47ee debian-live-10.10.0-i386-gnome.iso
+e55d3fb773c22106f3ba55e01db66c937be544726ec463a999068f16232fe52c188a99dbade7fe3d3c381f938b21015e0926925677cfb1a12d12388c62d9b6e9 debian-live-10.10.0-i386-gnome.log
+f7627ab3dc78a450da368ce3479d3cb6f13b3da726c08e0c4325d6695b13eed32c7d9df7af1230cf27081cbaac5288c9f617a47924122932dcdb1839ee4da166 debian-live-10.10.0-i386-gnome.packages
+c37887308032e78ab9a7e87c070b827964c9d60f9b0866ac9b7309815e57685234dff56a2d51acbf41c606509be57b33b9a3a2eeebf0bf639d00d336624965e6 debian-live-10.10.0-i386-kde.contents
+b0a0dc98892caac6308eb48de1c34f485f886e2254b8286810985a4ac44902ab26e8854f3c1c165bc82c9122bb5ee7dc4dc5a0e74c16edd36f55557a6a7fcabc debian-live-10.10.0-i386-kde.iso
+1dd09b1e8fdcd83172d0e84246dd2939cfac2ee9e5382c087a40084e516142eb5ee5c7e60d1ae161fa44883fcf01d93dcefab562921519738eb40611507b41a5 debian-live-10.10.0-i386-kde.log
+67f0956404134dd37729d6d0fdab521165eb2f6005aa80319350057c8e87a14c3d8594d523813429e8acfbe38802b86feaaf0c4d7550a5a9abb9e4e6ba87cbb1 debian-live-10.10.0-i386-kde.packages
+4864a98487fc180739d8fd31c81fcd5c4e4d64cb9da230569936236596380bdd99bce6ff171b89855f9de35c2386171f9dc74bc0edb26de00bb250bc04d082dc debian-live-10.10.0-i386-lxde.contents
+20e109f63dad53525fcf85a4c1df8bd722bb90431857057749f000fb621275436c167acd87089d70d2fd9a4575a824fa83082be27d96033c7edd6cff43c695b4 debian-live-10.10.0-i386-lxde.iso
+41346466d79c10de62b85ab9b29d3f7d7cd58c62a2903ef9d28252ad56ca5289907caf541d47685c274f00d1f4855acf145468a20986fe961a6a1a1a3f0559b5 debian-live-10.10.0-i386-lxde.log
+ab4ef075627e9459452fa1f53b0aec0280d2ae08d688835e0ed11e00169f96f4bdd78947b5753e755be0aeafc985501d6714c6de6764dac2b00672ac2c500d5b debian-live-10.10.0-i386-lxde.packages
+4864a98487fc180739d8fd31c81fcd5c4e4d64cb9da230569936236596380bdd99bce6ff171b89855f9de35c2386171f9dc74bc0edb26de00bb250bc04d082dc debian-live-10.10.0-i386-lxqt.contents
+ad2c8a2d69334735b191b051d412245eac2be883937659742e1305ab00b0741ac9480ab990dcba4300d948277b75a6667888cb840654b4fb61a488c1660e7d93 debian-live-10.10.0-i386-lxqt.iso
+357d979e2af1ae902324911543235a517173e1bb8b77bf92e1ac072a17e26379f7b6932d2ac76537e0ddcfcf0b2bfcee93f7ce06f7fada4ed59c8f3da027b29c debian-live-10.10.0-i386-lxqt.log
+9da981d3a12810ef96215eef5edf4fc3f089d6fe8f27f7f4434a4fbb92a2e0b5dad5e867ed8a940c6b8b9a82781c3a0effaa3007757e69906f552c907163d89e debian-live-10.10.0-i386-lxqt.packages
+9ba7b46460592c8a2a7d28c8e6508fb47a6df7de9c6211da01d8e0f1594cee2713401cff8644d163d1dbd0b548b793963f05f450d5765a76778e40547c1e32f9 debian-live-10.10.0-i386-mate.contents
+4af08a762e0f3afebd9e03399a91b1744965515bb00792c8e0d0db1c6985e068b6b1d6395d2d6916893aae12145f3bf4a2535cd25d17ccf8e342a52776a4a96f debian-live-10.10.0-i386-mate.iso
+828a24bab77e4558207882180f107c48202d9329d26ca256671542c1e72ef27d0f4d1e82ec84ffd8ac4cbd973d8a608367a28503e0cc3034f5ac077e2ed9e428 debian-live-10.10.0-i386-mate.log
+2720124dcb80094805e120d7947617f5835955327f4efc17755a5d6125b5168c3ac864dbd1eae7a6eb0f4a7afc2c6122a7a5f962d02b145e52555263796a1b07 debian-live-10.10.0-i386-mate.packages
+808a32b2d905c47acabbd47c45f5737543f2c8096d0ce9dec184d91bf66922912f716febd82dc1ecbc11e94b4a146aaee86ccb1845195902d63768b561343c27 debian-live-10.10.0-i386-standard.contents
+503133dfddcf4bcc83d957e2c5ca9a806c911ccd4b18281ea3b01d3451ea7e149410156c1ff83de39fdf105a9821a4105352bb46bb132f5505de477ef9e7cd0d debian-live-10.10.0-i386-standard.iso
+d198fa235780b727b5fc6dc2946d1d63dee633075b26c7e50fb10d202fe86346a4f97bba7b2020efe7597d7cdf57ca1c36488eb51c1e1a070c58d1adc275ebd6 debian-live-10.10.0-i386-standard.log
+1678f2b15c4304f7523465073aaca171a78996146d52072d0dd939681f44b75b9b544f74ceeeb7265f07620a6a4e741817fe409b2c34ec726555844796de44ee debian-live-10.10.0-i386-standard.packages
+7b4647032dd4969c6ab0e46536c0f7faf5f80a9624ce65e569f25727fb31ace28bdb3ae51dc361033e63750f050371c5c57d92a2ba1fcfd321a8315fb220d355 debian-live-10.10.0-i386-xfce.contents
+35889dda13cdf3304afaf35c1d20c3e4ec77f5f63626a1118c0419a828c84d40572997ca9dd00820accaff927ab48482d6d33b23be5b679b108ec7c001885d65 debian-live-10.10.0-i386-xfce.iso
+900c82bf2c9e394f105fc8826237913145870c8cd2e5b40defc359fc941c15a9605189a7c858aab43d24958d076ab536437ce0df4436824753c71f09a233b3f8 debian-live-10.10.0-i386-xfce.log
+029a9f06abefeca693f8ed11de447123e7aa3f763976805221ad230ee875156afb9526b0fe56ee828702a1fa4242f3398f53d8dd349751cb80618df0bbc11e67 debian-live-10.10.0-i386-xfce.packages
diff --git a/distro/debian/isoinfo.common b/distro/debian/isoinfo.common
index 240dca8..99fded9 100644
--- a/distro/debian/isoinfo.common
+++ b/distro/debian/isoinfo.common
@@ -1,7 +1,7 @@
-_isover=10.4.0
+_isover=10.10.0
-ISONAME="$DISTRONAME $_isover amd64 ${_desktop}"
-ISOURL="${_isover}-live/amd64/iso-hybrid/debian-live-${_isover}-amd64-${_desktop,,}.iso"
+ISONAME="$DISTRONAME ${_isover} ${_arch} ${_desktop}"
+ISOURL="${_isover}-live/${_arch}/iso-hybrid/debian-live-${_isover}-${_arch}-${_desktop,,}.iso"
HASHTOOL=sha512sum
HASHFILE=distro/debian/SHA512SUMS
VERIFY=hashfile
diff --git a/distro/fedora/29/install.sh b/distro/fedora/29/install.sh
deleted file mode 100644
index 9d7ac8b..0000000
--- a/distro/fedora/29/install.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-version=29
-source distro/fedora/install.sh
diff --git a/distro/fedora/29/isoinfo b/distro/fedora/29/isoinfo
deleted file mode 100644
index 230a362..0000000
--- a/distro/fedora/29/isoinfo
+++ /dev/null
@@ -1,8 +0,0 @@
-ISONAME="$DISTRONAME 29 Workstation"
-ISOURL=releases/29/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-29-1.2.iso
-SHA256=653cc283749100e9b46625d23938ff890ae29482bef142f5a0f99c5a5ddc03e9
-
-mirrorlist=(
-https://mirrors.tuna.tsinghua.edu.cn/fedora
-http://mirrors.ustc.edu.cn/fedora/linux
-)
diff --git a/distro/fedora/30/entry b/distro/fedora/30/entry
deleted file mode 100644
index ee0c632..0000000
--- a/distro/fedora/30/entry
+++ /dev/null
@@ -1,2 +0,0 @@
-version=30
-source distro/fedora/entry.common
diff --git a/distro/fedora/30/isoinfo b/distro/fedora/30/isoinfo
deleted file mode 100644
index 38052f2..0000000
--- a/distro/fedora/30/isoinfo
+++ /dev/null
@@ -1,8 +0,0 @@
-ISONAME="$DISTRONAME 30 Workstation"
-ISOURL=releases/30/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-30-1.2.iso
-SHA256=a4e2c49368860887f1cc1166b0613232d4d5de6b46f29c9756bc7cfd5e13f39f
-
-mirrorlist=(
-https://mirrors.tuna.tsinghua.edu.cn/fedora
-http://mirrors.ustc.edu.cn/fedora/linux
-)
diff --git a/distro/fedora/31/entry b/distro/fedora/31/entry
deleted file mode 100644
index 21743bf..0000000
--- a/distro/fedora/31/entry
+++ /dev/null
@@ -1,2 +0,0 @@
-version=31
-source distro/fedora/entry.common
diff --git a/distro/fedora/31/install.sh b/distro/fedora/31/install.sh
deleted file mode 100644
index 220ce4a..0000000
--- a/distro/fedora/31/install.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-version=31
-source distro/fedora/install.sh
diff --git a/distro/fedora/31/isoinfo b/distro/fedora/31/isoinfo
deleted file mode 100644
index cc62989..0000000
--- a/distro/fedora/31/isoinfo
+++ /dev/null
@@ -1,8 +0,0 @@
-ISONAME="$DISTRONAME 31 Workstation"
-ISOURL=releases/31/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-31-1.9.iso
-SHA256=1d73ce30bfb96274c53b09013ea23320f0f64a1b0c663217110a5baf0b2c6528
-
-mirrorlist=(
-https://mirrors.tuna.tsinghua.edu.cn/fedora
-http://mirrors.ustc.edu.cn/fedora/linux
-)
diff --git a/distro/fedora/32/entry b/distro/fedora/32/entry
deleted file mode 100644
index a894f89..0000000
--- a/distro/fedora/32/entry
+++ /dev/null
@@ -1,2 +0,0 @@
-version=32
-source distro/fedora/entry.common
diff --git a/distro/fedora/32/install.sh b/distro/fedora/32/install.sh
deleted file mode 100644
index 823da66..0000000
--- a/distro/fedora/32/install.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-version=32
-source distro/fedora/install.sh
diff --git a/distro/fedora/32/isoinfo b/distro/fedora/32/isoinfo
deleted file mode 100644
index f03e4bb..0000000
--- a/distro/fedora/32/isoinfo
+++ /dev/null
@@ -1,8 +0,0 @@
-ISONAME="$DISTRONAME 32 Workstation"
-ISOURL=releases/32/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-32-1.6.iso
-SHA256=4d0f6653e2e0860c99ffe0ef274a46d875fb85bd2a40cb896dce1ed013566924
-
-mirrorlist=(
-https://mirrors.tuna.tsinghua.edu.cn/fedora
-http://mirrors.ustc.edu.cn/fedora/linux
-)
diff --git a/distro/fedora/29/entry b/distro/fedora/36/entry
index 0837ba5..2bafd81 100644
--- a/distro/fedora/29/entry
+++ b/distro/fedora/36/entry
@@ -1,2 +1,2 @@
-version=29
+version=36
source distro/fedora/entry.common
diff --git a/distro/fedora/30/install.sh b/distro/fedora/36/install.sh
index 02157f5..76f025c 100644
--- a/distro/fedora/30/install.sh
+++ b/distro/fedora/36/install.sh
@@ -1,2 +1,2 @@
-version=30
+version=36
source distro/fedora/install.sh
diff --git a/distro/fedora/36/isoinfo b/distro/fedora/36/isoinfo
new file mode 100644
index 0000000..d7b9190
--- /dev/null
+++ b/distro/fedora/36/isoinfo
@@ -0,0 +1,8 @@
+ISONAME="$DISTRONAME 36 Workstation"
+ISOURL=releases/36/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-36-1.5.iso
+SHA256=80169891cb10c679cdc31dc035dab9aae3e874395adc5229f0fe5cfcc111cc8c
+
+mirrorlist=(
+https://mirrors.tuna.tsinghua.edu.cn/fedora
+http://mirrors.ustc.edu.cn/fedora/linux
+)
diff --git a/distro/gloriousarch/distroinfo b/distro/gloriousarch/distroinfo
deleted file mode 100644
index 8fd601c..0000000
--- a/distro/gloriousarch/distroinfo
+++ /dev/null
@@ -1,2 +0,0 @@
-DISTRONAME='Glorious Arch'
-KEYWORD='gloriousarch'
diff --git a/distro/gloriousarch/mate/entry1 b/distro/gloriousarch/mate/entry1
deleted file mode 100644
index d9bfd03..0000000
--- a/distro/gloriousarch/mate/entry1
+++ /dev/null
@@ -1,7 +0,0 @@
-TITLE='Glorious Arch x86_64 (MATE)'
-_name=garch/mate
-KERNEL="/liveusb-kernel/$_name/x86_64/vmlinuz"
-INITRD=("/liveusb-kernel/$_name/intel_ucode.img"
- "/liveusb-kernel/$_name/x86_64/archiso.img")
-OPTION="archisodevice=/dev/disk/by-uuid/$UUID archisobasedir=liveusb-data/$_name iomem=relaxed"
-X64=y
diff --git a/distro/gloriousarch/mate/install.sh b/distro/gloriousarch/mate/install.sh
deleted file mode 100644
index 0c0e642..0000000
--- a/distro/gloriousarch/mate/install.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-_name=garch/mate
-install_live() {
- mount_iso
- install -d "$DATADIR/$_name"
- install -d "$KERNELDIR/$_name"
- cp -r "$ISOMNT/arch/x86_64" "$DATADIR/$_name/"
- cp -r "$ISOMNT/arch/boot/x86_64" "$KERNELDIR/$_name/"
- cp "$ISOMNT/arch/boot/intel_ucode.img" "$KERNELDIR/$_name/"
- umount_iso
-}
-
diff --git a/distro/gloriousarch/mate/isoinfo b/distro/gloriousarch/mate/isoinfo
deleted file mode 100644
index 605d6a4..0000000
--- a/distro/gloriousarch/mate/isoinfo
+++ /dev/null
@@ -1,9 +0,0 @@
-_isodate=2018-01-25
-_desktop=mate
-ISONAME="$DISTRONAME $_desktop $_isodate"
-ISOURL=garch-$_desktop-$_isodate.iso
-SHA256=c57fcddb431f6f6b490256603596f4ce57057d4932c4b3c194abe8969f1e3289
-
-mirrorlist=(
-https://sourceforge.net/projects/garchiso/files
-)
diff --git a/distro/gloriousarch/nox/entry1 b/distro/gloriousarch/nox/entry1
deleted file mode 100644
index 07dcc75..0000000
--- a/distro/gloriousarch/nox/entry1
+++ /dev/null
@@ -1,7 +0,0 @@
-TITLE='Glorious Arch x86_64'
-_name=garch/nox
-KERNEL="/liveusb-kernel/$_name/x86_64/vmlinuz"
-INITRD=("/liveusb-kernel/$_name/intel_ucode.img"
- "/liveusb-kernel/$_name/x86_64/archiso.img")
-OPTION="archisodevice=/dev/disk/by-uuid/$UUID archisobasedir=liveusb-data/$_name iomem=relaxed"
-X64=y
diff --git a/distro/gloriousarch/nox/install.sh b/distro/gloriousarch/nox/install.sh
deleted file mode 100644
index 6992842..0000000
--- a/distro/gloriousarch/nox/install.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-_name=garch/nox
-install_live() {
- mount_iso
- install -d "$DATADIR/$_name"
- install -d "$KERNELDIR/$_name"
- cp -r "$ISOMNT/arch/x86_64" "$DATADIR/$_name/"
- cp -r "$ISOMNT/arch/boot/x86_64" "$KERNELDIR/$_name/"
- cp "$ISOMNT/arch/boot/intel_ucode.img" "$KERNELDIR/$_name/"
- umount_iso
-}
-
diff --git a/distro/gloriousarch/nox/isoinfo b/distro/gloriousarch/nox/isoinfo
deleted file mode 100644
index 5eee2ff..0000000
--- a/distro/gloriousarch/nox/isoinfo
+++ /dev/null
@@ -1,9 +0,0 @@
-_isodate=2018-01-25
-_desktop=nox
-ISONAME="$DISTRONAME $_desktop $_isodate"
-ISOURL=garch-$_desktop-$_isodate.iso
-SHA256=d1f98302572e69866d1acd98784db749117bdb66700199a69bc9dcc4bc110cfa
-
-mirrorlist=(
-https://sourceforge.net/projects/garchiso/files
-)
diff --git a/distro/gloriousarch/xfce/entry1 b/distro/gloriousarch/xfce/entry1
deleted file mode 100644
index 603a46c..0000000
--- a/distro/gloriousarch/xfce/entry1
+++ /dev/null
@@ -1,3 +0,0 @@
-. distro/arch/entry1
-TITLE='Glorious Arch x86_64 (Xfce)'
-OPTION="$OPTION iomem=relaxed"
diff --git a/distro/gloriousarch/xfce/install.sh b/distro/gloriousarch/xfce/install.sh
deleted file mode 100644
index cf57eb6..0000000
--- a/distro/gloriousarch/xfce/install.sh
+++ /dev/null
@@ -1 +0,0 @@
-. distro/arch/install.sh
diff --git a/distro/gloriousarch/xfce/isoinfo b/distro/gloriousarch/xfce/isoinfo
deleted file mode 100644
index 6b18e93..0000000
--- a/distro/gloriousarch/xfce/isoinfo
+++ /dev/null
@@ -1,9 +0,0 @@
-_isodate=2019-03-02
-_desktop=xfce
-ISONAME="$DISTRONAME $_desktop $_isodate"
-ISOURL=garch-$_desktop-$_isodate.iso
-SHA256=1e004729ff964f4d45e86a6a91639e42040fee0cbf8533a99cb4233386257343
-
-mirrorlist=(
-https://sourceforge.net/projects/garchiso/files
-)
diff --git a/distro/grml/64/entry b/distro/grml/64/entry
index 6da9264..63c6345 100644
--- a/distro/grml/64/entry
+++ b/distro/grml/64/entry
@@ -1,4 +1,4 @@
-ver=2020.06
+ver=2022.11
TITLE="Grml $ver 64-bit full"
KERNEL=/liveusb-kernel/grml/64/vmlinuz
INITRD=/liveusb-kernel/grml/64/initrd.img
diff --git a/distro/grml/64/isoinfo b/distro/grml/64/isoinfo
index e7c0665..10eb917 100644
--- a/distro/grml/64/isoinfo
+++ b/distro/grml/64/isoinfo
@@ -1,7 +1,7 @@
-ver=2020.06
+ver=2022.11
ISONAME="Grml $ver 64-bit full"
ISOURL="grml64-full_$ver.iso"
-SHA256=a6d8f82f020e33e13ddf71978234a4168506b1dd89c91ce4ebc13ef86025039f
+SHA256=8b8e4a548a7dcdcd8f3e93098e740c012b5427cf5f4bc5730ef428a6feddd877
mirrorlist=(
http://download.grml.org
diff --git a/distro/mint/cinnamon/config b/distro/mint/cinnamon/config
new file mode 100644
index 0000000..7173c31
--- /dev/null
+++ b/distro/mint/cinnamon/config
@@ -0,0 +1,3 @@
+_arch=x86_64
+_ver=21.1
+_de=Cinnamon
diff --git a/distro/mint/cinnamon/entry b/distro/mint/cinnamon/entry
index fc51998..9ad0df1 100644
--- a/distro/mint/cinnamon/entry
+++ b/distro/mint/cinnamon/entry
@@ -1,4 +1,2 @@
-_arch=x86_64
-_ver=20
-_de=Cinnamon
+source distro/mint/cinnamon/config
source distro/mint/entry.common
diff --git a/distro/mint/cinnamon/install.sh b/distro/mint/cinnamon/install.sh
index 25e3293..41b41ec 100644
--- a/distro/mint/cinnamon/install.sh
+++ b/distro/mint/cinnamon/install.sh
@@ -1,2 +1,3 @@
-_ver=20/Cinnamon
+source distro/mint/cinnamon/config
+_ver="${_ver}/${_de}"
source distro/mint/install.sh
diff --git a/distro/mint/cinnamon/isoinfo b/distro/mint/cinnamon/isoinfo
index bde80e6..b74471e 100644
--- a/distro/mint/cinnamon/isoinfo
+++ b/distro/mint/cinnamon/isoinfo
@@ -1,3 +1,4 @@
+source distro/mint/cinnamon/config
source distro/mint/isoinfo.common
-ISONAME="$DISTRONAME ${_isover} x86_64 (Cinnamon)"
-ISOURL=stable/${_isover}/linuxmint-${_isover}-cinnamon-64bit.iso
+ISONAME="$DISTRONAME ${_ver} x86_64 (${_de})"
+ISOURL=stable/${_ver}/linuxmint-${_ver}-cinnamon-64bit.iso
diff --git a/distro/mint/isoinfo.common b/distro/mint/isoinfo.common
index d337744..4c3162d 100644
--- a/distro/mint/isoinfo.common
+++ b/distro/mint/isoinfo.common
@@ -1,5 +1,3 @@
-_isover=20
-
HASHTOOL=sha256sum
HASHFILE=distro/mint/sha256sum.txt
VERIFY=hashfile
diff --git a/distro/mint/mate/config b/distro/mint/mate/config
new file mode 100644
index 0000000..8f601df
--- /dev/null
+++ b/distro/mint/mate/config
@@ -0,0 +1,3 @@
+_arch=x86_64
+_ver=21.1
+_de=MATE
diff --git a/distro/mint/mate/entry b/distro/mint/mate/entry
index 43fd4d6..f99887b 100644
--- a/distro/mint/mate/entry
+++ b/distro/mint/mate/entry
@@ -1,4 +1,2 @@
-_arch=x86_64
-_ver=20
-_de=MATE
+source distro/mint/mate/config
source distro/mint/entry.common
diff --git a/distro/mint/mate/install.sh b/distro/mint/mate/install.sh
index 8be448b..cd85b56 100644
--- a/distro/mint/mate/install.sh
+++ b/distro/mint/mate/install.sh
@@ -1,2 +1,3 @@
-_ver=20/MATE
+source distro/mint/mate/config
+_ver="${_ver}/${_de}"
source distro/mint/install.sh
diff --git a/distro/mint/mate/isoinfo b/distro/mint/mate/isoinfo
index 5220815..d7bfb48 100644
--- a/distro/mint/mate/isoinfo
+++ b/distro/mint/mate/isoinfo
@@ -1,3 +1,4 @@
+source distro/mint/mate/config
source distro/mint/isoinfo.common
-ISONAME="$DISTRONAME ${_isover} x86_64 (MATE)"
-ISOURL=stable/${_isover}/linuxmint-${_isover}-mate-64bit.iso
+ISONAME="$DISTRONAME ${_ver} x86_64 (${_de})"
+ISOURL=stable/${_ver}/linuxmint-${_ver}-mate-64bit.iso
diff --git a/distro/mint/sha256sum.txt b/distro/mint/sha256sum.txt
index fc79543..3149122 100644
--- a/distro/mint/sha256sum.txt
+++ b/distro/mint/sha256sum.txt
@@ -1,3 +1,3 @@
-2f6ae466ec9b7c6255e997b82f162ae88bfe640a8df16d3e2f495b6281120af9 *linuxmint-20-cinnamon-64bit.iso
-42fd764b3a3544a36d820f4164bb64aa5a6d982073e6d1afdea4853d3858fc98 *linuxmint-20-mate-64bit.iso
-761fb276da9746a068f4c8aa42e8d4981f352db92babe0ef8a08713eeb38246f *linuxmint-20-xfce-64bit.iso
+2df322f030d8ff4633360930a92d78829d10e515d2f6975b9bdfd1c0de769aca *linuxmint-21.1-cinnamon-64bit.iso
+f7fb9c0500e583c46587402578547ea56125e0a054097f9f464a2500830c8b25 *linuxmint-21.1-mate-64bit.iso
+6fea221b5b0272d55de57f3d31498cdf76682f414e60d28131dc428e719efa8b *linuxmint-21.1-xfce-64bit.iso
diff --git a/distro/mint/xfce/config b/distro/mint/xfce/config
new file mode 100644
index 0000000..68ad3ce
--- /dev/null
+++ b/distro/mint/xfce/config
@@ -0,0 +1,3 @@
+_arch=x86_64
+_ver=21.1
+_de=Xfce
diff --git a/distro/mint/xfce/entry b/distro/mint/xfce/entry
index 30ba0c9..e896473 100644
--- a/distro/mint/xfce/entry
+++ b/distro/mint/xfce/entry
@@ -1,4 +1,2 @@
-_arch=x86_64
-_ver=20
-_de=Xfce
+source distro/mint/xfce/config
source distro/mint/entry.common
diff --git a/distro/mint/xfce/install.sh b/distro/mint/xfce/install.sh
index d8c22ff..eae0ed6 100644
--- a/distro/mint/xfce/install.sh
+++ b/distro/mint/xfce/install.sh
@@ -1,2 +1,3 @@
-_ver=20/Xfce
+source distro/mint/xfce/config
+_ver="${_ver}/${_de}"
source distro/mint/install.sh
diff --git a/distro/mint/xfce/isoinfo b/distro/mint/xfce/isoinfo
index 415c132..4801841 100644
--- a/distro/mint/xfce/isoinfo
+++ b/distro/mint/xfce/isoinfo
@@ -1,3 +1,4 @@
+source distro/mint/xfce/config
source distro/mint/isoinfo.common
-ISONAME="$DISTRONAME ${_isover} x86_64 (Xfce)"
-ISOURL=stable/${_isover}/linuxmint-${_isover}-xfce-64bit.iso
+ISONAME="$DISTRONAME ${_ver} x86_64 (${_de})"
+ISOURL=stable/${_ver}/linuxmint-${_ver}-xfce-64bit.iso
diff --git a/distro/mx/32/isoinfo b/distro/mx/32/isoinfo
index e11bde5..1998306 100644
--- a/distro/mx/32/isoinfo
+++ b/distro/mx/32/isoinfo
@@ -2,4 +2,4 @@ source distro/mx/isoinfo.common
ISONAME="$DISTRONAME Linux $_isover i386"
ISOURL="MX-${_isover}_386.iso"
-SHA256=78b503114f77d27405feb15e9a2a16ce9e83a745c28d7ec95db98b7e3fbf1d68
+SHA256=187781c59394d086f347b00afe2f75e38e18a1044624998939c8403b40d4975e
diff --git a/distro/mx/64/isoinfo b/distro/mx/64/isoinfo
index 1c7ed70..96cb492 100644
--- a/distro/mx/64/isoinfo
+++ b/distro/mx/64/isoinfo
@@ -2,4 +2,4 @@ source distro/mx/isoinfo.common
ISONAME="$DISTRONAME Linux $_isover x64"
ISOURL="MX-${_isover}_x64.iso"
-SHA256=18e880f55d83abb19f042310f46a2738807ed8dd48c86e2ef0a5a083672e9e2d
+SHA256=7cf6d7dafe8200e7553f3548121eac077e87f891b5cdb939c0b677b9d7720e4c
diff --git a/distro/mx/isoinfo.common b/distro/mx/isoinfo.common
index fd69385..c8c05f4 100644
--- a/distro/mx/isoinfo.common
+++ b/distro/mx/isoinfo.common
@@ -1,4 +1,4 @@
-_isover=19.1
+_isover=19.2
mirrorlist=(
https://mirrors.tuna.tsinghua.edu.cn/mxlinux-isos/MX/Final
diff --git a/distro/opensuse/meta b/distro/opensuse/meta
new file mode 100644
index 0000000..87deffa
--- /dev/null
+++ b/distro/opensuse/meta
@@ -0,0 +1,20 @@
+entry() {
+ isofn="$(basename "$ISOFILE")"
+ label="$(get_iso_label "${ISO_FILEPATH}")"
+ TITLE="$label"
+ KERNEL=/liveusb-kernel/$KEYWORD/linux
+ INITRD=/liveusb-kernel/$KEYWORD/initrd
+ OPTION="root=live:CDLABEL=$label iso-scan/filename=liveusb-data/$KEYWORD/$isofn"
+ X64=y
+}
+
+install_live() {
+ mount_iso
+ install -d "$DATADIR/$KEYWORD" "$KERNELDIR/$KEYWORD"
+ cp "$ISOMNT/boot/x86_64/loader"/{linux,initrd} \
+ "$KERNELDIR/$KEYWORD"
+ umount_iso
+ cp "${ISO_FILEPATH}" "$DATADIR/$KEYWORD/"
+}
+
+entries=(entry)
diff --git a/distro/ubuntu/16.04/isoinfo b/distro/ubuntu/16.04/isoinfo
index 76b7abf..e4e99d0 100644
--- a/distro/ubuntu/16.04/isoinfo
+++ b/distro/ubuntu/16.04/isoinfo
@@ -1,7 +1,7 @@
-_isover=16.04.6
+_isover=16.04.7
ISONAME="$DISTRONAME ${_isover} amd64"
ISOURL="${_isover}/ubuntu-${_isover}-desktop-amd64.iso"
-SHA256=e27d13d089a027601099b050fd6080785aae99c1a8eb7848774b8d44f1f679b9
+SHA256=8ba7e2687fb8a2152504475e92e489aace543059fd4ba7ffe10111c42394853b
mirrorlist=(
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases
diff --git a/distro/ubuntu/18.04/config b/distro/ubuntu/18.04/config
index e812e5b..f52075a 100644
--- a/distro/ubuntu/18.04/config
+++ b/distro/ubuntu/18.04/config
@@ -1,3 +1,3 @@
-_ver=18.04
+_ver=18.04.5
VMLINUZ=vmlinuz
INITRD=initrd
diff --git a/distro/ubuntu/18.04/isoinfo b/distro/ubuntu/18.04/isoinfo
index dd633b5..ff251c9 100644
--- a/distro/ubuntu/18.04/isoinfo
+++ b/distro/ubuntu/18.04/isoinfo
@@ -1,7 +1,8 @@
-_isover=18.04.3
-ISONAME="$DISTRONAME ${_isover} amd64"
-ISOURL="${_isover}/ubuntu-${_isover}-desktop-amd64.iso"
-SHA256=add4614b6fe3bb8e7dddcaab0ea97c476fbd4ffe288f2a4912cb06f1a47dcfa0
+source distro/ubuntu/18.04/config
+
+ISONAME="$DISTRONAME ${_ver} amd64"
+ISOURL="${_ver}/ubuntu-${_ver}-desktop-amd64.iso"
+SHA256=f295570badb09a606d97ddfc3421d7bf210b4a81c07ba81e9c040eda6ddea6a0
mirrorlist=(
https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases
diff --git a/distro/ubuntu/20.04/config b/distro/ubuntu/20.04/config
new file mode 100644
index 0000000..64846db
--- /dev/null
+++ b/distro/ubuntu/20.04/config
@@ -0,0 +1,3 @@
+_ver=20.04.2.0
+VMLINUZ=vmlinuz
+INITRD=initrd
diff --git a/distro/ubuntu/20.04/entry b/distro/ubuntu/20.04/entry
new file mode 100644
index 0000000..0c74917
--- /dev/null
+++ b/distro/ubuntu/20.04/entry
@@ -0,0 +1,2 @@
+source distro/ubuntu/20.04/config
+source distro/ubuntu/entry
diff --git a/distro/ubuntu/20.04/install.sh b/distro/ubuntu/20.04/install.sh
new file mode 100644
index 0000000..1128dfb
--- /dev/null
+++ b/distro/ubuntu/20.04/install.sh
@@ -0,0 +1,2 @@
+source distro/ubuntu/20.04/config
+source distro/ubuntu/install.sh
diff --git a/distro/ubuntu/20.04/isoinfo b/distro/ubuntu/20.04/isoinfo
new file mode 100644
index 0000000..e2924a8
--- /dev/null
+++ b/distro/ubuntu/20.04/isoinfo
@@ -0,0 +1,11 @@
+source distro/ubuntu/20.04/config
+
+ISONAME="$DISTRONAME ${_ver} amd64"
+ISOURL="${_ver}/ubuntu-${_ver}-desktop-amd64.iso"
+SHA256=93bdab204067321ff131f560879db46bee3b994bf24836bb78538640f689e58f
+
+mirrorlist=(
+http://releases.ubuntu.com
+http://mirrors.ustc.edu.cn/ubuntu-releases
+https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases
+)
diff --git a/distro/ubuntu/22.04/config b/distro/ubuntu/22.04/config
new file mode 100644
index 0000000..05d6f4b
--- /dev/null
+++ b/distro/ubuntu/22.04/config
@@ -0,0 +1,3 @@
+_ver=22.04.2
+VMLINUZ=vmlinuz
+INITRD=initrd
diff --git a/distro/ubuntu/22.04/entry b/distro/ubuntu/22.04/entry
new file mode 100644
index 0000000..aaa6cb7
--- /dev/null
+++ b/distro/ubuntu/22.04/entry
@@ -0,0 +1,2 @@
+source distro/ubuntu/22.04/config
+source distro/ubuntu/entry
diff --git a/distro/ubuntu/22.04/install.sh b/distro/ubuntu/22.04/install.sh
new file mode 100644
index 0000000..88496fc
--- /dev/null
+++ b/distro/ubuntu/22.04/install.sh
@@ -0,0 +1,2 @@
+source distro/ubuntu/22.04/config
+source distro/ubuntu/install.sh
diff --git a/distro/ubuntu/22.04/isoinfo b/distro/ubuntu/22.04/isoinfo
new file mode 100644
index 0000000..5e3f0db
--- /dev/null
+++ b/distro/ubuntu/22.04/isoinfo
@@ -0,0 +1,11 @@
+source distro/ubuntu/22.04/config
+
+ISONAME="$DISTRONAME ${_ver} amd64"
+ISOURL="${_ver}/ubuntu-${_ver}-desktop-amd64.iso"
+SHA256=b98dac940a82b110e6265ca78d1320f1f7103861e922aa1a54e4202686e9bbd3
+
+mirrorlist=(
+http://releases.ubuntu.com
+http://mirrors.ustc.edu.cn/ubuntu-releases
+https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases
+)
diff --git a/distro/ubuntu/meta b/distro/ubuntu/meta
new file mode 100644
index 0000000..c051049
--- /dev/null
+++ b/distro/ubuntu/meta
@@ -0,0 +1,36 @@
+entry() {
+ if test -z "${ubt_kernel}" -o -z "${ubt_initrd}"
+ then
+ msg "warn: kernel image or initramfs not found."
+ msg " the Ubuntu based entry may not work."
+ fi
+ isofn="$(basename "$ISOFILE")"
+ TITLE="$ISONAME"
+ KERNEL="/liveusb-kernel/${KEYWORD}/${ubt_kernel}"
+ INITRD="/liveusb-kernel/${KEYWORD}/${ubt_initrd}"
+ OPTION="file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=/liveusb-data/${KEYWORD}/${isofn}"
+ X64=y
+}
+
+install_live() {
+ install -d "$KERNELDIR/${KEYWORD}" "$DATADIR/${KEYWORD}"
+ mount_iso
+ ubt_kernel=($(find "$ISOMNT/casper/" -maxdepth 1 -name 'vmlinuz*'))
+ if [ "${#ubt_kernel[@]}" != 1 ]; then
+ fatalerror "panic: more than one kernel image found."
+ else
+ ubt_kernel="$(basename ${ubt_kernel[0]})"
+ fi
+ ubt_initrd=($(find "$ISOMNT/casper/" -maxdepth 1 -name 'initrd*'))
+ if [ "${#ubt_initrd[@]}" != 1 ]; then
+ fatalerror "panic: more than one initramfs image found."
+ else
+ ubt_initrd="$(basename ${ubt_initrd[0]})"
+ fi
+ cp "$ISOMNT/casper/${ubt_kernel}" "$ISOMNT/casper/${ubt_initrd}" \
+ "$KERNELDIR/${KEYWORD}/"
+ umount_iso
+ cp "$ISOFILE" "$DATADIR/${KEYWORD}/"
+}
+
+entries=(entry)
diff --git a/functions.sh b/functions.sh
index dba6d9d..b967388 100644
--- a/functions.sh
+++ b/functions.sh
@@ -1,6 +1,26 @@
# Copyright (C) 2016-2018 Iru Cai <mytbk920423@gmail.com>
# SPDX-License-Identifier: GPL-3.0-or-later
+msg() {
+ echo -e "$1" >&2
+}
+
+fatalerror() {
+ msg "\x1b[1;31m$1\x1b[0m"
+ exit 1
+}
+
+as-root() {
+ echo as-root "$*"
+ if [ "$UID" == 0 ]; then
+ "$@"
+ elif type -p sudo > /dev/null; then
+ sudo "$@"
+ elif type -p su > /dev/null; then
+ su -c "$*"
+ fi
+}
+
checksum_verify() {
local _hashtool _hashsum _cksum
if [ -n "$SHA512" ]; then
@@ -61,6 +81,45 @@ process_distro() {
# ISOMNT="/media/$ISOFILE"
}
+# output_grub_entry
+# output_syslinux_entry
+# usage: first source the entry, then call this
+#
+# variables in entryfile:
+# - UUID: the UUID of the partition
+# - ISOFILE: the file name of iso
+#
+# parameters in entry file:
+# - TITLE: GRUB menu entry title
+# - KERNEL: path to kernel image
+# - INITRD: path to initramfs/initrd image
+# - OPTION: kernel command line
+# - X64: y/n, indicates whether it's 64-bit
+#
+output_grub_entry() {
+ cat << EOF
+menuentry '$TITLE' {
+ linux $KERNEL $OPTION
+ initrd ${INITRD[@]}
+}
+
+EOF
+}
+
+# we also need $LABEL when calling this
+output_syslinux_entry() {
+ _INITRD=$(echo ${INITRD[*]}|sed 's/ /,/g')
+
+ cat << EOF
+LABEL $LABEL
+MENU LABEL $TITLE
+LINUX $KERNEL
+INITRD $_INITRD
+APPEND $OPTION
+
+EOF
+}
+
gen_grubcfg() {
local entry allentries
allentries=("distro/$1/entry"*)
@@ -69,13 +128,50 @@ gen_grubcfg() {
fi
for entry in "${allentries[@]}"
do
- UUID="$UUID" ISOFILE="$ISOFILE" ./mkgrubcfg.sh "$entry"
+ unset INITRD # because it can be an array or just a string
+
+ source "$entry"
+ UUID="$UUID" ISOFILE="$ISOFILE" output_grub_entry
done
if [ ${#allentries[@]} -gt 1 ]; then
echo '}'
fi
}
+meta_gen_grubcfg() {
+ local entry
+ source "distro/$1/meta"
+ if [ ${#entries[@]} -gt 1 ]; then
+ echo "submenu '$ISONAME' {"
+ fi
+ for entry in "${entries[@]}"
+ do
+ unset INITRD # because it can be an array or just a string
+
+ "$entry"
+ UUID="$UUID" ISOFILE="$ISOFILE" output_grub_entry
+ done
+ if [ ${#entries[@]} -gt 1 ]; then
+ echo '}'
+ fi
+}
+
+meta_gen_syslinux() {
+ local entry count name
+ source "distro/$1/meta"
+ name=$(echo $1|sed 's/\//_/g')
+ count=0
+ for entry in "${entries[@]}"
+ do
+ unset INITRD # because it can be an array or just a string
+
+ "$entry"
+ UUID="$UUID" ISOFILE="$ISOFILE" LABEL="${name}_${count}" \
+ output_syslinux_entry
+ count=$(($count+1))
+ done
+}
+
gen_syslinux() {
local entry allentries count name
allentries=("distro/$1/entry"*)
@@ -83,8 +179,11 @@ gen_syslinux() {
count=0
for entry in "${allentries[@]}"
do
- UUID="$UUID" ISOFILE="$ISOFILE" LABEL="$name$count" \
- ./mksyslinux.sh "$entry"
+ unset INITRD # because it can be an array or just a string
+
+ source "$entry"
+ UUID="$UUID" ISOFILE="$ISOFILE" LABEL="${name}_${count}" \
+ output_syslinux_entry
count=$(($count+1))
done
}
@@ -115,6 +214,69 @@ get_iso_label() {
file -b "$1" | cut -d\' -f2
}
+# We try to a proper mount tool to mount block devices and iso files,
+# if we cannot find it, use the system mount tool.
+# Both udisks2 and udevil can mount block devices, but only udevil
+# can mount iso files.
+detect_block_mount_tool() {
+ if (udisksctl status | grep DEVICE > /dev/null); then
+ BLOCKMOUNT=udisks2
+ elif (udevil | grep 'udevil version' > /dev/null); then
+ BLOCKMOUNT=udevil
+ else
+ BLOCKMOUNT=system
+ fi
+}
+
+detect_iso_mount_tool() {
+ if (udevil | grep 'udevil version' > /dev/null); then
+ ISOMOUNT=udevil
+ else
+ ISOMOUNT=system
+ fi
+}
+
+udevil_mount() {
+ udevil mount "$1"
+}
+
+udevil_unmount() {
+ udevil umount "$1"
+}
+
+udisks2_mount() {
+ udisksctl mount -b "$1"
+}
+
+udisks2_unmount() {
+ local mnt_source
+ mnt_source="$(findmnt -n -o SOURCE "$1")"
+ udisksctl unmount -b "${mnt_source}"
+}
+
+system_mount() {
+ local mountpoint
+ local uid
+ mountpoint="$(mktemp -d)"
+ uid="$(id -u)"
+ # first try uid= option of mount(1)
+ if ! as-root mount -o "uid=$uid" "$1" "$mountpoint" 2> /dev/null; then
+ as-root mount "$1" "$mountpoint"
+ fi
+}
+
+system_unmount() {
+ as-root umount "$1"
+}
+
+mount_block() {
+ ${BLOCKMOUNT}_mount "$1"
+}
+
+unmount_block() {
+ ${BLOCKMOUNT}_unmount "$1"
+}
+
mount_iso() {
LOOPDEV=$(/sbin/losetup -n -O NAME -j "${ISO_FILEPATH}")
if [[ -n "$LOOPDEV" ]]
@@ -123,7 +285,7 @@ mount_iso() {
umount_iso
fi
- udevil mount "${ISO_FILEPATH}"
+ ${ISOMOUNT}_mount "${ISO_FILEPATH}"
LOOPDEV=$(/sbin/losetup -n -O NAME -j "${ISO_FILEPATH}")
if [[ -n "$LOOPDEV" ]]
then
@@ -132,7 +294,21 @@ mount_iso() {
}
umount_iso() {
- udevil umount "$ISOMNT"
+ ${ISOMOUNT}_unmount "$ISOMNT"
+}
+
+# iso_extract: extract files from iso image to destination path
+# usage: iso_extract <isofile> <patterns> <dest>
+iso_extract() {
+ local isofile="$1"
+ local patterns=()
+ shift
+ while [ "$#" -gt 1 ]; do
+ patterns+=("$1")
+ shift
+ done
+ local dest="$1"
+ bsdtar -x -f "$isofile" -C "$dest" "${patterns[@]}"
}
getuuid() {
@@ -154,17 +330,6 @@ getdiskbypart() {
done
}
-as-root() {
- echo as-root "$*"
- if [ "$UID" == 0 ]; then
- "$@"
- elif type -p sudo > /dev/null; then
- sudo "$@"
- elif type -p su > /dev/null; then
- su -c "$*"
- fi
-}
-
syslinux_header() {
cat << EOF
UI menu.c32
diff --git a/testusb.sh b/testusb.sh
new file mode 100755
index 0000000..2cca502
--- /dev/null
+++ b/testusb.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Copyright (C) 2021 Iru Cai <mytbk920423@gmail.com>
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+# Test the live USB in QEMU, you need to run this script as root
+if [ "$1" == uefi ]; then
+ bios=(-bios /usr/share/edk2-ovmf/x64/OVMF.fd)
+ shift
+else
+ bios=()
+fi
+
+qemu-system-x86_64 -enable-kvm -cpu host -m 2G "${bios[@]}" -drive "file=$1,format=raw"