This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
doc:howto:tce [2024/09/12 17:40] stefanbaur [Starting the Build] check for mksquashfs on foreign archs was wrong and never fired |
doc:howto:tce [2025/05/05 09:32] (current) stefanbaur [What options are available under FURTHER-OPTIONS-GO-HERE?] added liveboot_params description |
||
---|---|---|---|
Line 27: | Line 27: | ||
* A graphics card and input devices (Keyboard, Mouse/ | * A graphics card and input devices (Keyboard, Mouse/ | ||
===== Build system prerequisites for all variants ===== | ===== Build system prerequisites for all variants ===== | ||
- | * You need a Debian | + | * You need a Debian |
+ | * If you try to build Debian Bookworm images on Debian Bullseye, you can only create netboot images, but no iso/ | ||
+ | * If you want to try to build Debian (Bookworm) images on Ubuntu, you will need to install the live-build, debootstrap and debian-archive-keyring packages from the Debian repo. | ||
* We suggest using a 64-Bit system, however, it is possible to use a 32-Bit system if you don't want to build a 64-Bit ThinClient image. | * We suggest using a 64-Bit system, however, it is possible to use a 32-Bit system if you don't want to build a 64-Bit ThinClient image. | ||
- | * We suggest leaving at least 4 GB of free disk space so the build won't abort due to insufficient disk space while packages are downloaded, unpacked and copied around. | + | * We suggest leaving at least 6 GB of free disk space so the build won't abort due to insufficient disk space while packages are downloaded, unpacked and copied around. |
- | * Make sure your package list is up to date by running: < | + | * Make sure your package list is up to date by running: < |
- | * Install the required package(s) by running: < | + | * Install the required package(s) by running: < |
- | * If you want to speed up subsequent builds, install the recommended package(s) by running: < | + | * If you want to speed up subsequent builds, install the recommended package(s) by running: < |
- | * If you want to be prepared | + | * If you want to be able to cross-build across different architectures (e.g. building an ARM image on an Intel/AMD build host), install the optional package(s) by running: < |
===== Building your own X2Go-TCE Image ===== | ===== Building your own X2Go-TCE Image ===== | ||
==== Configuring the Build ==== | ==== Configuring the Build ==== | ||
Change to a directory where you want to save your builds, and save the following file as x2go-tce-config: | Change to a directory where you want to save your builds, and save the following file as x2go-tce-config: | ||
- | <code> | + | <file - x2go-tce-config> |
# NOTE: This file gets sourced by the actual buildscript - so place it in the same directory as the buildscript or adjust the path in the buildscript. | # NOTE: This file gets sourced by the actual buildscript - so place it in the same directory as the buildscript or adjust the path in the buildscript. | ||
Line 45: | Line 47: | ||
# it's apt-cacher-ng and use it | # it's apt-cacher-ng and use it | ||
# | # | ||
- | if nc -z 127.0.0.1 3142 ; then | + | if nc -z 127.0.0.1 3142 ; then |
# bad idea with apt-cacher-ng, | # bad idea with apt-cacher-ng, | ||
- | # export https_proxy=http:// | + | # export https_proxy=http:// |
# export http_proxy=http:// | # export http_proxy=http:// | ||
# export ftp_proxy=http:// | # export ftp_proxy=http:// | ||
Line 60: | Line 62: | ||
# Select ONE of the following git reposities | # Select ONE of the following git reposities | ||
- | # this one loosely corresponds to " | + | #export LBX2GO_CONFIG=' |
- | #export LBX2GO_CONFIG=' | + | export LBX2GO_CONFIG=' |
- | #export LBX2GO_CONFIG=' | + | |
- | export LBX2GO_CONFIG=' | + | |
#export LBX2GO_CONFIG=' | #export LBX2GO_CONFIG=' | ||
+ | #export LBX2GO_CONFIG=' | ||
#export LBX2GO_CONFIG=' | #export LBX2GO_CONFIG=' | ||
+ | #export LBX2GO_CONFIG=' | ||
#export LBX2GO_CONFIG=' | #export LBX2GO_CONFIG=' | ||
- | # NOTES: 1) https:// | + | # NOTES: 1) https:// |
- | # | + | # 2) https:// |
- | # | + | # |
+ | # | ||
+ | # the Minidesktop builds. Feel free to try them out! | ||
+ | # 5) Add " | ||
# add " | # add " | ||
# add " | # add " | ||
- | # add " | + | # add " |
# Select ONE of the following LBX2GO_ARCH lines and comment out the others | # Select ONE of the following LBX2GO_ARCH lines and comment out the others | ||
Line 87: | Line 92: | ||
# If you want to use the stock ISO image as created by this script, add your boot parameters here | # If you want to use the stock ISO image as created by this script, add your boot parameters here | ||
- | # export LBX2GO_BOOTAPPEND_LIVE=" | + | # Make sure to leave a trailing space at the end of your string(s)! |
- | export LBX2GO_BOOTAPPEND_LIVE=" | + | export LBX2GO_BOOTAPPEND_LIVE=" |
+ | export LBX2GO_BOOTAPPEND_LIVE+=" | ||
+ | export LBX2GO_BOOTAPPEND_LIVE+=" | ||
- | if echo -e " | + | if echo -e " |
- | LBX2GO_BOOTAPPEND_LIVE+=" | + | # if you use nottyautologin instead of noautologin, |
- | export LBX2GO_BOOTAPPEND_LIVE | + | # this would conflict with our setting for the account " |
- | elif echo -e " | + | |
- | LBX2GO_BOOTAPPEND_LIVE+=' | + | export LBX2GO_BOOTAPPEND_LIVE |
- | export LBX2GO_BOOTAPPEND_LIVE | + | elif echo -e " |
+ | LBX2GO_BOOTAPPEND_LIVE+=' | ||
+ | export LBX2GO_BOOTAPPEND_LIVE | ||
+ | elif echo -e "$LBX2GO_CONFIG" | ||
+ | LBX2GO_BOOTAPPEND_LIVE+=" | ||
+ | export LBX2GO_BOOTAPPEND_LIVE | ||
fi | fi | ||
- | # detect if the selected git repo is meant to build a buster, stretch or jessie image | + | # make Backports default to true |
+ | export LBX2GO_BACKPORTS=" | ||
+ | |||
+ | # detect if the selected git repo is meant to build a bookworm, bullseye, | ||
if [ -z " | if [ -z " | ||
export LBX2GO_DEBVERSION=" | export LBX2GO_DEBVERSION=" | ||
Line 118: | Line 133: | ||
export LBX2GO_BOOTAPPEND_LIVE+=" | export LBX2GO_BOOTAPPEND_LIVE+=" | ||
export LBX2GO_ARCHIVE_AREAS=" | export LBX2GO_ARCHIVE_AREAS=" | ||
+ | # disable Backports for Bookworm, as mate-minidesktop won't build with Backports enabled | ||
+ | export LBX2GO_BACKPORTS=" | ||
else | else | ||
export LBX2GO_DEBVERSION=" | export LBX2GO_DEBVERSION=" | ||
Line 153: | Line 170: | ||
[ -f / | [ -f / | ||
export LBX2GO_MIRROR=" | export LBX2GO_MIRROR=" | ||
- | --mirror-chroot-security http:// | + | --mirror-chroot-security http:// |
- | --mirror-binary-security http:// | + | --mirror-binary-security http:// |
- | --parent-mirror-chroot-security http:// | + | --parent-mirror-chroot-security http:// |
- | --parent-mirror-binary-security http:// | + | --parent-mirror-binary-security http:// |
else | else | ||
export LBX2GO_UPDATES=" | export LBX2GO_UPDATES=" | ||
Line 162: | Line 179: | ||
# These are default values that should not require tuning | # These are default values that should not require tuning | ||
- | export LBX2GO_DEFAULTS=" | + | export LBX2GO_DEFAULTS=" |
--firmware-chroot true | --firmware-chroot true | ||
--initsystem sysvinit | --initsystem sysvinit | ||
Line 189: | Line 206: | ||
export LBX2GO_ARCHIVE_AREAS=" | export LBX2GO_ARCHIVE_AREAS=" | ||
- | # This is for minidesktop builds and currently only adds firefox-esr language packs | + | # This is for micro- and minidesktop builds and currently only adds firefox-esr language packs |
- | # export LBX2GO_LANG=' | + | # use this for autodetection based on your lang= selection |
+ | export LBX2GO_LANG=$(echo " | ||
+ | # To override this and add several language packs at once, use something like: | ||
+ | # export LBX2GO_LANG=' | ||
+ | |||
+ | # Set the boot timeout for all syslinux/ | ||
+ | # Note that this is measured in 1/10 seconds! | ||
+ | # So for 1 second, set the value to 10, for 10 seconds, set it to 100. | ||
+ | # A value of 0 means "wait indefinitely", | ||
+ | # Leave it unset to use live-build' | ||
+ | #export LBX2GO_BOOT_TIMEOUT=' | ||
+ | export LBX2GO_BOOT_TIMEOUT=' | ||
# This is to optimize squashfs size, based on a suggestion by intrigeri from the TAILS team | # This is to optimize squashfs size, based on a suggestion by intrigeri from the TAILS team | ||
Line 197: | Line 225: | ||
# | # | ||
if dpkg --print-architecture | grep -q ' | if dpkg --print-architecture | grep -q ' | ||
- | # on arm, these parameters must not be used; if they' | + | |
- | if grep -q -- '-Xbcj x86 -b 1024K -Xdict-size 1024K' / | + | if grep -q -- '-Xbcj x86 -b 1024K -Xdict-size 1024K' / |
- | apt install --reinstall live-build | + | apt install --reinstall live-build |
- | fi | + | fi |
- | # feel free to experiment with these options, but be prepared for subtle breakage | + | # feel free to experiment with these options, but be prepared for subtle breakage |
- | #export MKSQUASHFS_OPTIONS=' | + | #export MKSQUASHFS_OPTIONS=' |
- | #export MKSQUASHFS_OPTIONS=' | + | #export MKSQUASHFS_OPTIONS=' |
- | #export MKSQUASHFS_OPTIONS=' | + | #export MKSQUASHFS_OPTIONS=' |
- | export MKSQUASHFS_OPTIONS='' | + | export MKSQUASHFS_OPTIONS='' |
else | else | ||
- | export MKSQUASHFS_OPTIONS=' | + | |
fi | fi | ||
Line 217: | Line 245: | ||
# This patches the squashfs file into the initrd. Only parsed when image type " | # This patches the squashfs file into the initrd. Only parsed when image type " | ||
# Will require boot parameter live-media=/ | # Will require boot parameter live-media=/ | ||
- | # Both TFTP client and TFTP server must support file transfers >32MB for this to work, if you want to deploy this initrd via TFTP, | + | # Both TFTP client and TFTP server must support file transfers >32MB for this to work, if you want to deploy this initrd via TFTP, |
# so e.g. atftpd will not work - tftpd-hpa, however, seems to have no problem with larger files. | # so e.g. atftpd will not work - tftpd-hpa, however, seems to have no problem with larger files. | ||
# When using iPXE, you can use http instead of TFTP. | # When using iPXE, you can use http instead of TFTP. | ||
Line 225: | Line 253: | ||
# Select ONE of the following LBX2GO_IMAGETYPE lines and comment out the others | # Select ONE of the following LBX2GO_IMAGETYPE lines and comment out the others | ||
# to create an iso image: | # to create an iso image: | ||
- | #export LBX2GO_IMAGETYPE=' | + | # export LBX2GO_IMAGETYPE=' |
# to create an iso image that can also be dd'ed to USB media: | # to create an iso image that can also be dd'ed to USB media: | ||
- | export LBX2GO_IMAGETYPE=' | + | # export LBX2GO_IMAGETYPE=' |
# to create a netboot-image: | # to create a netboot-image: | ||
- | #export LBX2GO_IMAGETYPE=' | + | export LBX2GO_IMAGETYPE=' |
- | # /!\ the options below are NOT RECOMMENDED unless you use live-build from Debian Buster /!\ | + | # /!\ The options below are NOT RECOMMENDED unless you use live-build from Debian Buster/Debian 10 or newer /!\ |
- | # (Debian 10) or newer to create an image that can be written to a hard disk (for older | + | # to create an image that can be written to a hard disk (for older live-build versions, this always results |
- | # live-build versions, this always results in a "build failed" | + | # in a "build failed" |
- | # might have worked - use live-build from Buster or newer and things will work): | + | # and things will work): |
#export LBX2GO_IMAGETYPE=' | #export LBX2GO_IMAGETYPE=' | ||
## This might be required for hdd builds, especially for (u)efi | ## This might be required for hdd builds, especially for (u)efi | ||
#export LBX2GO_BOOTLOADER=" | #export LBX2GO_BOOTLOADER=" | ||
# to create a tar file only (seems to be broken in older live-build versions - Buster works): | # to create a tar file only (seems to be broken in older live-build versions - Buster works): | ||
- | #export LBX2GO_IMAGETYPE=' | + | # export LBX2GO_IMAGETYPE=' |
# This is part of our experimental ARM support | # This is part of our experimental ARM support | ||
if echo " | if echo " | ||
- | # enforce hdd image for arm at the moment (might need to support netboot later on too) | + | |
- | if ! [ " | + | if ! [ " |
- | | + | echo " |
- | export LBX2GO_IMAGETYPE=" | + | export LBX2GO_IMAGETYPE=" |
- | fi | + | fi |
fi | fi | ||
Line 252: | Line 280: | ||
export LBX2GO_DEFAULTS+=" | export LBX2GO_DEFAULTS+=" | ||
fi | fi | ||
- | </code> | + | |
+ | </file> | ||
==== Live-Patching the Build ==== | ==== Live-Patching the Build ==== | ||
- | To add patches that aren't part of any package yet, you can use the directory ./patch/ for patches that should be added to all versions, and ./ | + | To add patches that aren't part of any package yet, you can use the directory |
You will need to create a directory structure like < | You will need to create a directory structure like < | ||
e.g. to override < | e.g. to override < | ||
- | <code> | + | <file - x2gothinclient-minidesktop_start> |
#!/bin/bash | #!/bin/bash | ||
Line 313: | Line 342: | ||
& | & | ||
- | </code> | + | </file> |
==== Starting the Build ==== | ==== Starting the Build ==== | ||
In the directory where you want to save your builds, save the following file as x2go-tce-build, | In the directory where you want to save your builds, save the following file as x2go-tce-build, | ||
- | <code> | + | <file - x2go-tce-build> |
#!/bin/bash | #!/bin/bash | ||
Line 332: | Line 361: | ||
if [ -z " | if [ -z " | ||
- | ( echo " | + | |
[ -z " | [ -z " | ||
[ -z " | [ -z " | ||
Line 376: | Line 405: | ||
if [ -d " | if [ -d " | ||
cp -a ../patch/* config/ | cp -a ../patch/* config/ | ||
+ | fi | ||
+ | |||
+ | # This will copy any patches we have prepared for microdesktop | ||
+ | if [ -d " | ||
+ | cp -a ../ | ||
fi | fi | ||
Line 389: | Line 423: | ||
rsync -aPH --ignore-existing --exclude=" | rsync -aPH --ignore-existing --exclude=" | ||
fi | fi | ||
- | | + | |
+ | | ||
# Note that this is an accessibility feature for blind users, so use with care. | # Note that this is an accessibility feature for blind users, so use with care. | ||
- | sed -e " | + | sed -e " |
+ | sed -e " | ||
+ | |||
+ | # this will set the boot timeout for all syslinux/ | ||
+ | if [ -n " | ||
+ | sed -e " | ||
+ | fi | ||
# This enables an i386-only package in the sources.list file when an i386 build is requested | # This enables an i386-only package in the sources.list file when an i386 build is requested | ||
Line 402: | Line 443: | ||
if echo $LBX2GO_ARCH | grep -q " | if echo $LBX2GO_ARCH | grep -q " | ||
- | # bullseye and newer do not need this | + | |
- | if [ " | + | if [ " |
- | # firmware for wifi | + | # firmware for wifi |
- | echo " | + | echo " |
- | fi | + | fi |
- | if [ " | + | |
- | # modules required for Raspberry Pi 3 LAN | + | # modules required for Raspberry Pi 3 LAN |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | # firmware for basic raspi functions - required for boot on Pi3 | + | |
- | echo " | + | if [ " |
- | # standard linux kernel - for Pi3 | + | |
- | echo " | + | # standard linux kernel - for Pi3 |
+ | echo " | ||
+ | fi | ||
- | elif [ " | + | |
- | # bullseye and newer do not need this | + | # bullseye and newer do not need this |
- | if [ " | + | if [ " |
- | # firmware for basic raspi functions - required for boot on Pi4 | + | # firmware for basic raspi functions - required for boot on Pi4 |
- | echo " | + | echo " |
- | echo " | + | echo " |
- | # newer linux kernel - required for pi4/pi400 | + | |
- | echo " | + | echo " |
- | fi | + | fi |
- | else | + | else |
- | echo " | + | echo " |
- | fi | + | fi |
fi | fi | ||
- | |||
- | # This is for minidesktop builds only | + | # This is for micro- and minidesktop builds only |
if [ -f config/ | if [ -f config/ | ||
if [ -n " | if [ -n " | ||
- | for LBX2GO_SINGLE_LANG in $(echo " | + | for LBX2GO_SINGLE_LANG in $(echo " |
echo "LANG: ' | echo "LANG: ' | ||
- | sed -i -e 's/# | + | sed -i -e 's|# |
+ | if ! grep -v " | ||
+ | echo " | ||
+ | sed -i -e " | ||
+ | fi | ||
done | done | ||
else | else | ||
Line 450: | Line 496: | ||
fi | fi | ||
fi | fi | ||
+ | |||
if [ " | if [ " | ||
echo '# | echo '# | ||
Line 469: | Line 516: | ||
# at files not being downloaded, disable these three entries. | # at files not being downloaded, disable these three entries. | ||
export https_proxy=$LB_APT_HTTP_PROXY | export https_proxy=$LB_APT_HTTP_PROXY | ||
- | export http_proxy=$LB_APT_HTTP_PROXY | + | |
export ftp_proxy=$LB_APT_FTP_PROXY | export ftp_proxy=$LB_APT_FTP_PROXY | ||
fi | fi | ||
Line 475: | Line 522: | ||
# This is part of our experimental ARM support | # This is part of our experimental ARM support | ||
# It is used when building for the ARM architecture (on Intel/AMD hardware and on ARM). | # It is used when building for the ARM architecture (on Intel/AMD hardware and on ARM). | ||
- | # It makes some necessary changes, and also tries to speed up squashfs creation when it | + | # It makes some necessary changes, and also tries to speed up squashfs creation when it |
# detects a crossbuild environment. | # detects a crossbuild environment. | ||
if echo $LBX2GO_ARCH | grep -q ' | if echo $LBX2GO_ARCH | grep -q ' | ||
Line 484: | Line 531: | ||
sed -e ' | sed -e ' | ||
- | # This command removes the X2Go repository from the directory where additional | + | |
- | # archives are stored. | + | # archives are stored. |
# packages, but Debian Buster does - so that's what we're falling back to. | # packages, but Debian Buster does - so that's what we're falling back to. | ||
echo " | echo " | ||
rm ./ | rm ./ | ||
- | # The following is a hack to reduce squashfs creation time in a crossbuild environment. | + | |
- | # We're replacing mksquashfs in the changeroot with a wrapper script that drops the | + | # We're replacing mksquashfs in the changeroot with a wrapper script that drops the |
- | # original mksquashfs call into a file. | + | # original mksquashfs call into a file. |
- | if (uname -m | grep -q ' | + | |
- | # We need to do this as a background task, waiting for the mksquashfs executable to | + | echo "INFO: using host-architecture mksquashfs from outside instead of the target-architecture one inside chroot." |
- | # appear in the changeroot; as the changeroot will only be created later on, once | + | |
- | # lb build is called. | + | # appear in the changeroot; as the changeroot will only be created later on, once |
- | + | # lb build is called. | |
- | # The other background task waits until the command file has been created, then | + | |
- | # it applies some necessary patches to it, and starts the mksquashfs command natively | + | |
- | # on the build host, rather than in the changeroot environment. | + | |
- | # This is because in the changeroot, we'd be running the ARM mksquashfs in a qemu | + | |
- | # software emulation of the ARM architecture, | + | |
- | # native, raw CPU power and cores available to us. | + | |
- | # To make sure we don't have any lingering processes in the background, | + | |
- | # our own PID along to the background tasks, and tell them to terminate if our PID | + | # it applies some necessary patches |
- | # disappears while they're still in their waiting/ | + | # on the build host, rather than in the changeroot environment. |
+ | # This is because in the changeroot, we'd be running the ARM mksquashfs | ||
+ | # software emulation of the ARM architecture, | ||
+ | # native, raw CPU power and cores available to us. | ||
- | MASTERPID=$$ | + | # To make sure we don't have any lingering processes in the background, we're passing |
+ | # our own PID along to the background tasks, and tell them to terminate if our PID | ||
+ | # disappears while they' | ||
- | # Replace mksquashfs in chroot with script | + | |
- | # (script will undo this upon completion) | + | |
- | ( | + | |
- | # wait until the chroot has been populated or until our parent process dies | + | |
- | while ! [ -x ./ | + | |
- | ps $MASTERPID | + | |
- | sleep 1 | + | |
- | done | + | |
- | # make sure we don't overwrite the real executable if it has already been | + | |
- | # moved out of the way | + | |
- | if ! [ -x ./ | + | |
- | cp ./ | + | |
- | fi | + | |
- | echo '# | + | |
- | # log the name we've been called with and all parameters into this file | + | |
- | echo 'echo "$0 $@" >/ | + | |
- | # once the native mksquashfs is complete, we will remove this file | + | |
- | echo 'while [ -f / | + | |
- | echo ' | + | |
- | echo ' | + | |
- | # so let's wait until it has been removed before deleting ourselves ... | + | |
- | echo 'rm / | + | |
- | # ... and moving the real executable back into its place | + | |
- | echo 'mv / | + | |
- | chmod 755 ./ | + | |
- | ) & | + | |
- | # start the native | + | |
- | ( | + | # (script will undo this upon completion) |
- | | + | |
- | | + | # wait until the chroot |
- | ps $MASTERPID >/ | + | while ! [ -x ./chroot/usr/bin/ |
- | sleep 1 | + | ps $MASTERPID >/ |
- | | + | sleep 1 |
- | | + | done |
- | | + | # make sure we don't overwrite |
- | # parameter completely | + | # moved out of the way |
- | # also, all absolute paths (detected by beginning with " | + | if ! [ -x ./chroot/ |
- | # prefixed with "./chroot" so the mksquashfs | + | |
- | # to look for the corresponding paths/files. | + | fi |
- | sed -e 's/ -Xbcj x86/ /g' | + | |
- | ./chroot/ | + | # log the name we've been called with and all parameters into this file |
- | #needs switch from e.g. / | + | echo 'echo "$0 $@" >/ |
- | sed -e "s#^.*mksquashfs#$(which mksquashfs)# | + | |
- | ./chroot/ | + | echo 'while [ -f / |
- | | + | echo ' |
- | | + | echo ' |
+ | # so let' | ||
+ | echo 'rm / | ||
+ | # ... and moving the real executable | ||
+ | echo 'mv / | ||
+ | chmod 755 ./chroot/usr/bin/ | ||
+ | ) & | ||
- | | + | # start the native mksquashfs after patching the parameters |
- | | + | ( |
- | | + | # wait until the trigger file has been created or until our parent process dies |
- | | + | while ! [ -f ./ |
- | | + | ps $MASTERPID >/ |
- | | + | sleep 1 |
- | | + | done |
- | | + | # using any of the available filters (x86, arm, armthumb) for the |
- | | + | # -Xbcj command results in an unusable squashfs on arm, so we drop the |
- | | + | # parameter completely if it's there. |
- | | + | # also, all absolute paths (detected by beginning with " /") need to be |
- | | + | # prefixed with " |
- | | + | # to look for the corresponding paths/ |
- | ) & | + | sed -e 's/ -Xbcj x86/ /g' -e 's# /# ./ |
- | fi | + | ./ |
+ | #needs switch from e.g. / | ||
+ | sed -e " | ||
+ | ./ | ||
+ | # if the mksquashfs command was missing, add it | ||
+ | grep -q mksquashfs ./ | ||
+ | sed -e "s#^ #$(which mksquashfs) #g" -i \ | ||
+ | ./ | ||
+ | # now let's make this executable | ||
+ | chmod 755 ./ | ||
+ | |||
+ | | ||
+ | # in the squashfs - no idea why we don't need them while inside the chroot ... | ||
+ | echo ' | ||
+ | echo ' | ||
+ | echo ' | ||
+ | # now let's execute the script and, if it terminates without an error, | ||
+ | # we'll move the newly created squashfs into the chroot where the chrooted | ||
+ | # mksquashfs command would have created it; if that worked as well, we' | ||
+ | # remove the script file so our dummy mksquashfs inside the chroot knows | ||
+ | # it's time to terminate itself. | ||
+ | ./ | ||
+ | mv ./ | ||
+ | rm ./ | ||
+ | ) & | ||
+ | fi | ||
fi | fi | ||
Line 590: | Line 642: | ||
# This is part of our experimental ARM support | # This is part of our experimental ARM support | ||
if [ " | if [ " | ||
- | # after the build, let's determine the name of our image file ... | + | |
- | IMAGEFILE=" | + | IMAGEFILE=" |
- | # ... and change the partition type to reflect the file system actually in use for partition 1 | + | |
- | # (" | + | # (" |
- | sfdisk --part-type $IMAGEFILE 1 b | + | sfdisk --part-type $IMAGEFILE 1 b |
- | # next, we need to patch two things inside the image, so we need to set up a loop device for it. | + | |
- | FREELOOP=$(losetup -f) # note that this could become a TOCTOU issue if more than 1 process tries to use loop devices | + | FREELOOP=$(losetup -f) # note that this could become a TOCTOU issue if more than 1 process tries to use loop devices |
- | # as the image is a full disk image containing a partition, we need to jump to the position where the first partition starts | + | |
- | losetup -o 1048576 $FREELOOP $IMAGEFILE | + | losetup -o 1048576 $FREELOOP $IMAGEFILE |
- | # now let's mount it | + | |
- | mkdir -p ./ | + | mkdir -p ./ |
- | mount $FREELOOP ./tempmount | + | mount $FREELOOP ./tempmount |
- | # purge this dir, so we have enough space; we'll return to fill it later | + | |
- | rm ./ | + | rm ./ |
- | # first, we copy the contents of the boot/ | + | |
- | # see if inplace helps against out of space errors | + | # see if inplace helps against out of space errors |
- | rsync -aP --inplace ./ | + | rsync -aP --inplace ./ |
- | mkdir -p ./ | + | |
- | rsync -aP ./ | + | rsync -aP ./ |
- | # next, we replace the " | + | |
- | sed -e ' | + | sed -e ' |
- | # here comes the cleanup part | + | |
- | sync | + | sync |
- | umount $FREELOOP | + | umount $FREELOOP |
- | losetup -d $FREELOOP | + | losetup -d $FREELOOP |
- | rmdir ./ | + | rmdir ./ |
- | fi | + | fi |
if [ " | if [ " | ||
Line 675: | Line 727: | ||
fi | fi | ||
- | + | </file> | |
- | </code> | + | |
===== Netbooting ===== | ===== Netbooting ===== | ||
Line 827: | Line 878: | ||
* create a folder '' | * create a folder '' | ||
* install grub-legacy into it: | * install grub-legacy into it: | ||
- | * '' | + | * '' |
* '' | * '' | ||
* check, and, if required, edit the contents of '' | * check, and, if required, edit the contents of '' | ||
* if you had to make changes, re-run '' | * if you had to make changes, re-run '' | ||
- | * optional: '' | + | * optional: '' |
* create a boot loader configuration file using the following template: | * create a boot loader configuration file using the following template: | ||
<file - menu.lst> | <file - menu.lst> | ||
Line 862: | Line 913: | ||
=== Installing syslinux === | === Installing syslinux === | ||
- | * install syslinux and mbr: '' | + | * install syslinux and mbr: '' |
* run '' | * run '' | ||
* note that you have to mark / | * note that you have to mark / | ||
Line 914: | Line 965: | ||
@echo off | @echo off | ||
setlocal | setlocal | ||
- | set BCDEDIT=%SYSTEM%\bcdedit.exe | + | set BCDEDIT=%SYSTEMROOT%\system32\bcdedit.exe |
if not exist %BCDEDIT% exit 1 | if not exist %BCDEDIT% exit 1 | ||
for /f " | for /f " | ||
Line 1024: | Line 1075: | ||
=== These are entirely optional === | === These are entirely optional === | ||
+ | * '' | ||
* '' | * '' | ||
+ | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
* '' | * '' | ||
- | | + | * The SVG must be in SVG1.1 or SVG1.2 tiny format, or things may break |
- | * '' | + | * Newer versions of X2Go-TCE-Live will check for the strings '' |
+ | * Newer versions of X2Go-TCE-Live also support '' | ||
+ | | ||
+ | * '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
+ | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
+ | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
+ | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
+ | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
Line 1048: | Line 1110: | ||
* '' | * '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
+ | * Note that x5250 support is currently not part of the standard image available via git, as there is no x5250 executable in Debian. You can try using x3270 instead, most modern IBM i (System i, iSeries, AS/400) systems support 3270-type connections as well. Note that you need to specify " | ||
+ | * For a full mapping of x3270 keys to x5250 keys, see [[https:// | ||
+ | * If you need native 5250 support, say, with a commercial, closed-source 5250 terminal emulator, | ||
* '' | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
=== These are only intended to be used with TCE images stored on local media === | === These are only intended to be used with TCE images stored on local media === | ||
* '' | * '' | ||
Line 1065: | Line 1130: | ||
* '' | * '' | ||
- | ===== Client Branding/ | + | ===== Client Branding/ |
It is possible to make X2Go-TCE-Live match your Corporate Design/ | It is possible to make X2Go-TCE-Live match your Corporate Design/ | ||
This is actually a feature of X2GoClient itself, so it will also work on //fat client// installations, | This is actually a feature of X2GoClient itself, so it will also work on //fat client// installations, | ||
+ | Note that only **SVGs** are supported for these two parameters | ||
{{: | {{: | ||
You can find a more detailed explanation in the [[wiki: | You can find a more detailed explanation in the [[wiki: | ||
+ | |||
+ | For X2Go-TCE-Live-Openbox-MicroDesktop, | ||
===== Querying X2Go-TCE version info ===== | ===== Querying X2Go-TCE version info ===== | ||
- | images built using the https:// | + | X2Go-TCE-Live will create a file ''/ |
A command like < | A command like < | ||
Line 1217: | Line 1285: | ||
Basically: | Basically: | ||
< | < | ||
- | apt-get install ipxe | + | apt install ipxe |
cd / | cd / | ||
mkdir -p {bios,uefi} | mkdir -p {bios,uefi} | ||
Line 1304: | Line 1372: | ||
* / | * / | ||
* store the results somewhere under / | * store the results somewhere under / | ||
- | * turning it into a package would mean we could add dependencies as well, so the manual apt-get install would not be neccessary | + | * turning it into a package would mean we could add dependencies as well, so the manual apt install would not be neccessary |
* additional scripts could be added that work " | * additional scripts could be added that work " | ||