A page in your DokuWiki was added or changed. Here are the details:

Date        : 2021/01/25 00:19
Browser     : Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/87.0.4280.66 Safari/537.36
IP-Address  : 82.212.29.219
Hostname    : HSI-KBW-082-212-029-219.hsi.kabelbw.de
Old Revision: https://wiki.x2go.org/doku.php/doc:howto:tce?rev=1611533899
New Revision: https://wiki.x2go.org/doku.php/doc:howto:tce
Edit Summary: [Starting the Build] This is part two of the patch to create 
Images for the Raspberry Pi
User        : stefanbaur

@@ -248,13 +248,16 @@
 . ./x2go-tce-config
# Create Timestamp
 LBX2GO_TIMESTAMP=$(date +"%Y%m%d%H%M%S")
+ + exec > >(tee "/tmp/$LBX2GO_TIMESTAMP.log") 2>&1 # Set Directory name
- LBX2GO_TCEDIR="./live-build-x2go-${LBX2GO_TIMESTAMP}-${LBX2GO_IMAGETYPE}-$(echo 
"$LBX2GO_ARCH" | awk '{print $2}')-${LBX2GO_CONFIG##*/}"
+ 
LBX2GO_TCEDIR="./live-build-x2go-${LBX2GO_TIMESTAMP}-${LBX2GO_IMAGETYPE}-$(echo 
$LBX2GO_ARCH | awk
'{print $2}')-${LBX2GO_CONFIG##*/}"
if [ -z "$LBX2GO_ARCH" ] ||
+         ( echo "$LBX2GO_ARCH" | grep -q "arm" && [ -z "$LBX2GO_ARCH_MODEL" ] 
) ||
    [ -z "$LBX2GO_SPACE" ] ||
    [ -z "$LBX2GO_CONFIG" ] ||
    [ -z "$LBX2GO_DEFAULTS" ] ||
    [ -z "$LBX2GO_DEBVERSION" ] ||
@@ -264,8 +267,9 @@
    [ -z "$LBX2GO_BOOTLOADER" ] ||
    [ -z "$LBX2GO_ARCHIVE_AREAS" ]; then
     echo -e "One or more of the following variables is unset:"
     echo -e "LBX2GO_ARCH: '${LBX2GO_ARCH}'"
+     echo "$LBX2GO_ARCH" | grep -q "arm" && echo -e "LBX2GO_ARCH_MODEL: 
'${LBX2GO_ARCH_MODEL}'"
     echo -e "LBX2GO_SPACE: '${LBX2GO_SPACE}'"
     echo -e "LBX2GO_DEFAULTS: '${LBX2GO_DEFAULTS}'"
     echo -e "LBX2GO_DEBVERSION: '${LBX2GO_DEBVERSION}'"
     echo -e "LBX2GO_CONFIG: '${LBX2GO_CONFIG}'"
@@ -280,24 +284,82 @@
     # This will create a timestamped subdirectory for the build
     mkdir -p $LBX2GO_TCEDIR
     cd $LBX2GO_TCEDIR
+ X2GO_LBCONFIG_STRING=$(cat
<<X2GOLBCONFIGSTRING
     lb config $LBX2GO_ARCH $LBX2GO_SPACE $LBX2GO_DEFAULTS \
        --config $LBX2GO_CONFIG --binary-images $LBX2GO_IMAGETYPE \
        --archive-areas "$LBX2GO_ARCHIVE_AREAS" \
        --bootappend-live "$LBX2GO_BOOTAPPEND_LIVE"
+ X2GOLBCONFIGSTRING
+ )
+     # Our previous way of doing this had issues with newlines and multiple 
blanks. So we're now doing a bit
+     # of sanitizing, then we eval the variable.
+     X2GO_LBCONFIG_STRING=$(echo "$X2GO_LBCONFIG_STRING" | tr '\n' ' ' | tr -s 
' ')
+     eval "$X2GO_LBCONFIG_STRING"
+ # This will copy any patches we have prepared
     if [ -d "../patch" ] ; then
         cp -a ../patch/* config/
     fi
+ # This will copy any patches we have prepared for minidesktop
     if [ -d "../patch-minidesktop" ] && (echo "$LBX2GO_CONFIG" | grep -q 
minidesktop) ; then
         cp -a ../patch-minidesktop/* config/
     fi
+ + # This checks if a bootloader directory is present (e.g. because of a
custom splash.svg)
+     # and adds all other files that might be missing (live-build won't add 
them automatically
+     # if the directory already exists)
+     if [ -d config/bootloaders ] ; then
+         rsync -aPH --ignore-existing --exclude="splash.svg" 
/usr/share/live/build/bootloaders/* config/bootloaders
+     fi
+     # When enabled, this silences the audible beep at 
syslinux/isolinux/pxelinux/extlinux startup.
+     # Note that this is an accessibility feature for blind users, so use with 
care.
+     sed -e "s/$(echo -e "\07")//g" -i config/bootloaders/*/menu.cfg
+ # This enables an i386-only package in the sources.list file when an i386 build is requested
-     if echo "$LBX2GO_ARCH" | grep -q -i "i386" ; then
+     if echo $LBX2GO_ARCH | grep -q -i "i386" ; then
         sed -i -e 's/# for i386 only #//' 
config/package-lists/desktop.list.chroot
     fi
+ + # This is part of our experimental ARM support
+     # It adds required arm64-only packages when an
arm64 build is requested
+     if echo $LBX2GO_ARCH | grep -q "arm" ; then
+ + # firmware for wifi
+         echo "firmware-brcm80211/buster-backports" 
>>config/package-lists/raspi.list.chroot
+ + if [ "$LBX2GO_ARCH_MODEL" = "Pi3" ] ; then
+                 # modules required for Raspberry Pi 3 LAN
+                 echo "crc16" >> 
config/includes.chroot/etc/initramfs-tools/modules
+                 echo "mii" >> 
config/includes.chroot/etc/initramfs-tools/modules
+                 echo "smsc95xx" >> 
config/includes.chroot/etc/initramfs-tools/modules
+                 echo "usbcore" >> 
config/includes.chroot/etc/initramfs-tools/modules
+                 echo "usbnet" >> 
config/includes.chroot/etc/initramfs-tools/modules
+                 echo "fake-hwclock" >>config/package-lists/raspi.list.chroot
+                 echo "usbutils" >>config/package-lists/raspi.list.chroot
+ + # firmware for basic raspi functions - required for boot on Pi3 + echo "raspi3-firmware/buster" >>config/package-lists/raspi.list.chroot
+                 # standard linux kernel - for Pi3
+                 echo "linux-image-arm64/buster" 
>>config/package-lists/raspi.list.chroot
+ + elif [ "$LBX2GO_ARCH_MODEL" = "Pi4" ] ; then
+                 # firmware for basic raspi functions - required for boot on 
Pi4
+                 echo "raspi3-firmware/buster-backports" 
>>config/package-lists/raspi.list.chroot
+                 echo "raspi-firmware/buster-backports" 
>>config/package-lists/raspi.list.chroot
+ + # newer linux kernel - required for pi4/pi400
+                 echo "linux-image-arm64/buster-backports" 
>>config/package-lists/raspi.list.chroot
+ + else
+                 echo "WARNING: ARM Platform selected, but unknown model: 
'$LBX2GO_ARCH_MODEL'. Assuming no additional packages/patches are required."
+         fi
+ + fi + + # This is for minidesktop builds only
     if [ -f
config/package-lists/firefox-langpacks.list.chroot ]; then
             if [ -n "$LBX2GO_LANG" ]; then
                     for LBX2GO_SINGLE_LANG in $(echo "$LBX2GO_LANG" | tr ';' ' 
'); do
@@ -326,108 +388,114 @@
         # Here, we should have reached a point where it is safe to point all 
proxy variables
         # at the apt-cacher-ng proxy.  If you're seeing errors during your 
build that hint
         # at files not being downloaded, disable these three entries.
         export https_proxy=$LB_APT_HTTP_PROXY
-       export http_proxy=$LB_APT_HTTP_PROXY
+         export http_proxy=$LB_APT_HTTP_PROXY
         export ftp_proxy=$LB_APT_FTP_PROXY
     fi
- # This is a crude hack to detect crossbuilds for ARM on Intel/AMD hardware.
-     # It makes some necessary changes, and also tries to speed up squashfs 
creation.
-     if (uname -r | grep -q 'i.86' || uname -r | grep -q 'amd64') && \
-        echo "$LBX2GO_ARCH" | grep -q 'arm'; then
+     # 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 makes some necessary changes, and also tries to speed up squashfs 
creation when it
+     # detects a crossbuild environment.
+     if echo $LBX2GO_ARCH | grep -q 'arm'; then
- # This command removes all references to fuseext and x2gothinclient from the
-         # package list files.  Currently needed as there are no ARM packages 
for either.
-         echo "WARNING: Removing all references to fuseext and x2gothinclient from 
the build."
-         sed -e 's/^.*fuseext.*$//g' -e 's/^.*x2gothinclient.*$//g' -i 
./config/package-lists/*
+         # This command removes all references to fuseext, freerdp-nightly, 
and x2gothinclient from the
+         # package list files.  Currently needed as there are no ARM packages 
for any of these.
+         echo "WARNING: Removing all references to fuseext,freerdp-nightly and 
x2gothinclient from the build."
+ sed -e 's/^.*fuseext.*$//g' -e 's/^.*freerdp-nightly.*$//g' -e 's/^.*x2gothinclient.*$//g' -i ./config/package-lists/* - # This command removes the X2Go repository from the directory where additional - # archives are stored. Currently needed as the X2Go repository offers no arm64 + # This command removes the X2Go repository from the directory where additional
+         # archives are stored.  Currently needed as the X2Go repository 
offers no arm64
         # packages, but Debian Buster does - so that's what we're falling back 
to.
         echo "WARNING: Removing all references to the X2Go repository from the 
build."
         rm ./config/archives/*x2go*
- # The following is a hack to reduce squashfs creation time. We're replacing mksquashfs - # in the changeroot environment with a wrapper script that drops the original - # mksquashfs call into a file.
+         # 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
+         # original mksquashfs call into a file.
- # We need to do this as a background task, waiting for the mksquashfs executable to
-         # 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, while on the host, we 
can use all the
-         # native, raw CPU power and cores available to us.
+         if (uname -r | grep -q 'i.86' || uname -r | grep -q 'amd64') ; then
+ # We need to do this as a background task, waiting for the mksquashfs executable to
+                 # appear in the changeroot; as the changeroot will only be 
created later on, once
+                 # lb build is called.
- # 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're still in their waiting/looping state.
+                 # 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, while on the 
host, we can use all the
+                 #
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're still in their waiting/looping 
state.
- # 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 ./chroot/usr/bin/mksquashfs ]; do
-                 ps $MASTERPID >/dev/null || exit 1
-                 sleep 1
-             done
-             # make sure we don't overwrite the real executable if it has 
already been
-             # moved out of the way
-             if ! [ -x ./chroot/usr/bin/mksquashfs.real ]; then
-                 cp ./chroot/usr/bin/mksquashfs
./chroot/usr/bin/mksquashfs.real
-             fi
-            echo '#!/bin/bash' >./chroot/usr/bin/mksquashfs
-            # log the name we've been called with and all parameters into this 
file
-            echo 'echo "$0 $@" >/tmp/filesystem.squashfs.temp' 
>>./chroot/usr/bin/mksquashfs
-            # once the native mksquashfs is complete, we will remove this file
-            echo 'while [ -f /tmp/filesystem.squashfs.temp ]; do' 
>>./chroot/usr/bin/mksquashfs
-            echo '        sleep 1' >>./chroot/usr/bin/mksquashfs
-            echo 'done' >>./chroot/usr/bin/mksquashfs
-            # so let's wait until it has been removed before deleting 
ourselves ...
-            echo 'rm /usr/bin/mksquashfs' >>./chroot/usr/bin/mksquashfs
-            # ... and moving the real executable back into its place
-            echo 'mv /usr/bin/mksquashfs.real /usr/bin/mksquashfs' 
>>./chroot/usr/bin/mksquashfs
-            chmod 755 ./chroot/usr/bin/mksquashfs
-         ) &
+ MASTERPID=$$ - # start the native mksquashfs after patching the parameters
-         (
-             # wait until the trigger file has been created or until our 
parent process dies
-             while ! [ -f ./chroot/tmp/filesystem.squashfs.temp ]; do
-                 ps $MASTERPID >/dev/null || exit 1
-                 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 "./chroot" so the mksquashfs outside the chroot 
knows where
-             # to look for the corresponding paths/files.
-             sed -e 's/ -Xbcj x86/ /g' -e 's# /# ./chroot/#g' -i \
-                 ./chroot/tmp/filesystem.squashfs.temp
-             # now let's make this executable
- chmod 755 ./chroot/tmp/filesystem.squashfs.temp
+                 # 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 ./chroot/usr/bin/mksquashfs ]; do
+                         ps $MASTERPID >/dev/null || exit 1
+                         sleep 1
+                     done
+                     # make sure we don't overwrite the real executable if it 
has already been
+                     # moved out of the way
+                     if ! [ -x ./chroot/usr/bin/mksquashfs.real ]; then
+                         cp ./chroot/usr/bin/mksquashfs 
./chroot/usr/bin/mksquashfs.real
+                     fi
+                    echo '#!/bin/bash' >./chroot/usr/bin/mksquashfs
+                    # log the name we've been called with and all parameters 
into this file
+                    echo
'echo "$0 $@" >/tmp/filesystem.squashfs.temp' >>./chroot/usr/bin/mksquashfs
+                    # once the native mksquashfs is complete, we will remove 
this file
+                    echo 'while [ -f /tmp/filesystem.squashfs.temp ]; do' 
>>./chroot/usr/bin/mksquashfs
+                    echo '        sleep 1' >>./chroot/usr/bin/mksquashfs
+                    echo 'done' >>./chroot/usr/bin/mksquashfs
+                    # so let's wait until it has been removed before deleting 
ourselves ...
+                    echo 'rm /usr/bin/mksquashfs' >>./chroot/usr/bin/mksquashfs
+                    # ... and moving the real executable back into its place
+                    echo 'mv /usr/bin/mksquashfs.real /usr/bin/mksquashfs' 
>>./chroot/usr/bin/mksquashfs
+                    chmod 755 ./chroot/usr/bin/mksquashfs
+                 ) &
- # we also need to add some more excludes because they shouldn't end up
-             # in the squashfs - no idea why we don't need them
while inside the chroot ...
-             echo 'proc/*' >>./chroot/excludes
-             echo 'sys/*' >>./chroot/excludes
-             echo 'dev/pts/*' >>/.chroot.excludes
-             # 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'll
-             # remove the script file so our dummy mksquashfs inside the 
chroot knows
-             # it's time to terminate itself.
-             ./chroot/tmp/filesystem.squashfs.temp && \
-             mv ./filesystem.squashfs ./chroot/ && \
-             rm ./chroot/tmp/filesystem.squashfs.temp
-         ) &
+                 # start the native mksquashfs after patching the parameters
+                 (
+                     # wait until the trigger file has been created or until 
our parent process dies
+                     while ! [ -f
./chroot/tmp/filesystem.squashfs.temp ]; do
+                         ps $MASTERPID >/dev/null || exit 1
+                         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 "./chroot" so the mksquashfs outside the 
chroot knows where
+                     # to look for the corresponding paths/files.
+                     sed -e 's/ -Xbcj x86/ /g' -e 's# /# ./chroot/#g' -i \
+                         ./chroot/tmp/filesystem.squashfs.temp
+                     #needs switch from e.g. /bin/mksquashfs to $(which 
mksquashfs)
+                     sed -e "s#^.*mksquashfs#$(which mksquashfs)#g" -i \
+ ./chroot/tmp/filesystem.squashfs.temp
+                     # now let's make this executable
+                     chmod 755 ./chroot/tmp/filesystem.squashfs.temp
+ + # we also need to add some more excludes because they shouldn't end up
+                     # in the squashfs - no idea why we don't need them while 
inside the chroot ...
+                     echo 'proc/*' >>./chroot/excludes
+                     echo 'sys/*' >>./chroot/excludes
+                     echo 'dev/pts/*' >>/.chroot.excludes
+                     # 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'll
+                     # remove the script file so our dummy mksquashfs inside 
the chroot knows
+                     # it's time to terminate itself.
+ ./chroot/tmp/filesystem.squashfs.temp && \
+                     mv ./filesystem.squashfs ./chroot/ && \
+                     rm ./chroot/tmp/filesystem.squashfs.temp
+                 ) &
+         fi
     fi
if lb build ; then
         echo -e "Build is done: '$LBX2GO_TCEDIR'"
@@ -435,11 +503,51 @@
         ln $(realpath ./chroot/initrd.img) ./x2go-tce-initrd.img
         ln ./binary/live/filesystem.squashfs ./x2go-tce-filesystem.squashfs
if [ "$LBX2GO_IMAGETYPE" = "hdd" ] ; then
-                 ln ./live-image-$(echo "$LBX2GO_ARCH" | awk '{print $2}').img 
\
-                    ./x2go-tce-live-image-$(echo "$LBX2GO_ARCH" | awk '{print 
$2}').img
+                 ln ./live-image-$(echo $LBX2GO_ARCH | awk '{print $2}').img \
+                    ./x2go-tce-live-image-$(echo $LBX2GO_ARCH | awk '{print 
$2}').img
         fi
+ + # This is part of our experimental ARM support
+         if [ "$LBX2GO_IMAGETYPE" = "hdd" ] && echo $LBX2GO_ARCH | grep
-q "arm" ; then
+                 # after the build, let's determine the name of our image file 
...
+                 IMAGEFILE="./x2go-tce-live-image-$(echo $LBX2GO_ARCH | awk '{print 
$2}').img"
+ + # ... and change the partition type to reflect the file system actually in use for partition 1
+                 # ("b" is FAT32)
+                 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
+ + # 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
+ + # now let's mount it
+                 mkdir -p ./tempmount
+                 mount $FREELOOP ./tempmount
+ + # purge this dir, so we have enough space; we'll return to fill it later
+                 rm ./tempmount/live/*
+ + # first, we copy the contents of the boot/firmware/ folder to the root directory, because that is where these files are needed
+                 # see if inplace helps against out of space errors
+                 rsync -aP --inplace ./chroot/boot/firmware/* ./tempmount
+ + mkdir -p ./tempmount/live/
+                 rsync -aP ./binary/live/*.squashfs ./tempmount/live/
+ + # next, we replace the "root=" parameter with the parameters needed for live-booting
+                 sed -e 's#root=/dev/mmcblk0p2 #'"$LBX2GO_BOOTAPPEND_LIVE"' #' 
-i ./tempmount/cmdline.txt
+ + # here comes the cleanup part
+                 sync
+                 umount $FREELOOP
+                 losetup -d $FREELOOP
+                 rmdir ./tempmount
+         fi
+ if [ "$LBX2GO_IMAGETYPE" = "netboot" ] ; then

            if [ "$LBX2GO_NOSQUASHFS" = "true" ] ; then
                 (cd binary; echo live$'\n'live/filesystem.squashfs |cpio -o -H 
newc | gzip --fast) >./x2go-tce-filesystem.cpio.gz
                 cat ./x2go-tce-initrd.img ./x2go-tce-filesystem.cpio.gz 
>./x2go-tce-initrd-with-fs.img || exit 1
@@ -449,14 +557,14 @@
             fi
         fi
         if [ "$LBX2GO_IMAGETYPE" = "iso" ] || [ "$LBX2GO_IMAGETYPE" = 
"iso-hybrid" ] ; then
             genisoimage -o ./x2go-tce-squashfs-only.iso -R -J -graft-points 
live/filesystem.squashfs=./x2go-tce-filesystem.squashfs
-             if [ -e ./live-image-$(echo "$LBX2GO_ARCH" | awk '{print 
$2}').hybrid.iso ] ; then
-                     ln ./live-image-$(echo "$LBX2GO_ARCH" | awk '{print 
$2}').hybrid.iso \
-                        ./original-x2go-tce-live-image-$(echo "$LBX2GO_ARCH" | 
awk '{print $2}').hybrid.iso
-             elif [ -e ./live-image-$(echo "$LBX2GO_ARCH" | awk '{print 
$2}').iso ] ; then
- ln ./live-image-$(echo "$LBX2GO_ARCH" | awk '{print $2}').iso \
-                        ./original-x2go-tce-live-image-$(echo "$LBX2GO_ARCH" | 
awk '{print $2}').iso
+             if [ -e ./live-image-$(echo $LBX2GO_ARCH | awk '{print 
$2}').hybrid.iso ] ; then
+                     ln ./live-image-$(echo $LBX2GO_ARCH | awk '{print 
$2}').hybrid.iso \
+                        ./original-x2go-tce-live-image-$(echo $LBX2GO_ARCH | 
awk '{print $2}').hybrid.iso
+             elif [ -e ./live-image-$(echo $LBX2GO_ARCH | awk '{print 
$2}').iso ] ; then
+                     ln ./live-image-$(echo $LBX2GO_ARCH | awk '{print 
$2}').iso \
+                        ./original-x2go-tce-live-image-$(echo $LBX2GO_ARCH | 
awk '{print $2}').iso
             fi
             mv ./x2go-tce-filesystem.squashfs 
./original-x2go-tce-filesystem.squashfs
         fi
         # create timestamp file
@@ -485,8 +593,9 @@
         fi
     fi
     cd ..
 fi
+ </code>
 ===== Netbooting =====

--
This
mail was generated by DokuWiki at
https://wiki.x2go.org/

_______________________________________________
x2go-commits mailing list
x2go-commits@lists.x2go.org
https://lists.x2go.org/listinfo/x2go-commits

Reply via email to