A page in your DokuWiki was added or changed. Here are the details: Date : 2019/01/18 00:24 Browser : Mozilla/5.0 (X11; Linux x86_64; rv:52.9) Gecko/20100101 Goanna/3.4 Firefox/52.9 PaleMoon/27.9.4 IP-Address : 149.172.203.221 Hostname : HSI-KBW-149-172-203-221.hsi13.kabel-badenwuerttemberg.de Old Revision: https://wiki.x2go.org/doku.php/doc:howto:tce?rev=1547749609 New Revision: https://wiki.x2go.org/doku.php/doc:howto:tce Edit Summary: [Live-Patching the Build] - script is now in git and can be fetched with wget User : stefanbaur @@ -145,292 +145,9 @@ <code> #!/bin/bash mkdir -p ./patch/includes.chroot/usr/lib/x2go/tce/ - - cat >./patch/includes.chroot/usr/lib/x2go/tce/x2gousbmount <<'USBMOUNTPATCH' - - #!/usr/bin/perl - # Copyright (C) 2007-2017 by X2Go project, http://wiki.x2go.org - # Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> - - # X2Go is free software; you can redistribute it and/or modify - # it under the terms of the GNU General Public License as published by - # the Free Software Foundation; either version 2 of the License, or - # (at your option) any later version. - # - # X2Go is distributed in the hope that it will be useful, - # but WITHOUT ANY WARRANTY; without even the implied warranty of - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - # GNU General Public License for more details. - # - # You should have received a copy of the GNU General Public License - # along with this program; if not, write to the - # Free Software Foundation, Inc., - # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. - - use strict; - use File::Path::Expand; - # comment out this "use" and the following two lines, and instead - # uncomment the block below if you need to do early boot stage - # debugging of the automounter, when rsyslogd isn't running yet - use Sys::Syslog qw( :standard :macros ); - openlog($0,'cons,pid','user'); - setlogmask( LOG_UPTO(LOG_NOTICE) ); - #open (B,">>/var/log/usbdebug"); - #sub syslog { - # print B $_[0].': '.$_[1]."\n"; - #} - - my $user; - if ( -f "/etc/x2go/x2gothinclient-minidesktop_start" ) { - # this is a minidesktop environment, which uses - # username "x2gothinclient" regardless of whether - # it runs on X2Go-TCE-Live or X2Go-TCE-NFS - $user='x2gothinclient'; - } - elsif ( -d "/lib/live/config" ) { - # this is X2Go-TCE-Live, but not with a minidesktop - # (if it were, the first condition would have matched), - # so we use Debian-Live's standard username "user" - $user='user'; - } - else { - # this is X2Go-TCE-NFS or something completely different, - # so we'll play it safe and pick the username "x2gothinclient" - # just like previous versions of this script did - $user='x2gothinclient'; - } - - # We need this as chown requires numeric uid/gid - my ($login,$pass,$uid,$gid) = getpwnam($user); - - # Some last-ditch efforts to fulfill the prerequisites for File Sharing: - # - This is stuff that should already have happened earlier in the boot process. - # - Also, if a directory already exists, we silently assume that ownership and - # permissions are correct. This is so that users that deliberately set - # different ownership/permission values don't have their settings silently - # overwritten. - - unless ( -d expand_filename("~$user/mounts") ) { - mkdir expand_filename("~$user/mounts"); - chmod 0700, expand_filename("~$user/mounts"); - chown $uid, $gid, expand_filename("~$user/mounts"); - } - - unless ( -d expand_filename("~$user/export") ) { - mkdir expand_filename("~$user/export"); - chmod 0700, expand_filename("~$user/export"); - chown $uid, $gid, expand_filename("~$user/export"); - } - - unless ( -d expand_filename("~$user/logins") ) { - mkdir expand_filename("~$user/logins"); - chmod 0700, expand_filename("~$user/logins"); - chown $uid, $gid, expand_filename("~$user/logins"); - } - - sub check_x2gothinclientmode { - my $ret = 0; - - # Check for x2gothinclientd first... - my $x=`ps ax | grep x2gothinclient`; - if ( $x=~m/thinclientd/ ) { - $ret = 1; - } - - return $ret; - } - - # TCE-NFS TCE-Live MMD-Live - if ( check_x2gothinclientmode() || ( -x "/lib/live/config/2900-x2go-thinclientconfig" ) || ( -x "/etc/x2go/x2gothinclient-minidesktop_start" ) ) - { - syslog('notice', "some kind of thinclient mode detected"); - - open (F,">>/var/log/usb"); - - my $dev=$ENV{'DEVNAME'}; - my $model=$ENV{'ID_MODEL'}; - my $vendor=$ENV{'ID_VENDOR'}; - my $action=$ENV{'ACTION'}; - my @ldev=split("/","$dev"); - my $ldev=@ldev[@ldev-1]; - # mntdir is not the directory where the mountpoint will be rooted, - # but where tracking of mount states takes place - my $mntdir; - if ( -d expand_filename("~$user/mounts") ) { - $mntdir=expand_filename("~$user/mounts"); - } - elsif ( -d "/var/run" ) { - $mntdir="/var/run"; - } - elsif ( -d "/run" ) { - $mntdir="/run"; - } - else { - die "No directory found that we could use as \$mntdir..." - } - - my $name="${vendor}_${model}"; - $name=~s/ //g; - $name=~s/\\//g; - $name=~s/\///g; - print F "action: $action, device: $dev, model: $model ($ldev), total: $name\n"; - mkdir("/media"); - mkdir("/media/$name"); - print F "$name\n"; - - if (`lsblk -ln -oRM $dev`=~/0$/) { - syslog('notice', "device is non-removable device, skipping"); - exit 0; - } - - if ( $action eq "add" ) { - - ### - ### ACTION: mount device after it has been added to USB subsystem - ### - - syslog('notice', "device add action called"); - - # prepare mount points - mkdir("/media"); - mkdir("/media/$name"); - mkdir("/media/$name/$ldev"); - - # mount the USB device - # sync is supported by all file systems - # uid is supported by vfat (via fat),ntfs,hfs,hpfs - # uni_xlate is supported by vfat,ntfs - # we must not trigger on iso9660 and udf, or else hybrid USB media - # would only cause a mount of the iso9660 raw device, - # blocking the mount of individual partitions - # real optical media ->x2gocdmanager/x2gothinclient-cdmanager package - - if ( system("mount -tntfs $dev /media/$name/$ldev -o uid=$user,sync,uni_xlate")==0 ) { - syslog('notice', "USB device $name ($ldev) successfully mounted (ntfs detected)"); - # if mounted, inform x2goclient about it... - system("touch $mntdir/$ldev.mounted"); - open (D,">",expand_filename("~$user/export/$name.$ldev")); - print D "export=/media/$name/$ldev\n"; - close (D); - } - elsif ( system("mount -tvfat $dev /media/$name/$ldev -o uid=$user,sync,uni_xlate")==0 ) { - syslog('notice', "USB device $name ($ldev) successfully mounted (vfat detected)"); - # if mounted, inform x2goclient about it... - system("touch $mntdir/$ldev.mounted"); - open (D,">",expand_filename("~$user/export/$name.$ldev")); - print D "export=/media/$name/$ldev\n"; - close (D); - } - elsif ( system("mount -t hfs $dev /media/$name/$ldev -o uid=$user,sync")==0 ) { - syslog('notice', "USB device $name ($ldev) successfully mounted (hfs detected)"); - # if mounted, inform x2goclient about it... - system("touch $mntdir/$ldev.mounted"); - open (D,">",expand_filename("~$user/export/$name.$ldev")); - print D "export=/media/$name/$ldev\n"; - close (D); - } - elsif ( system("mount -t hpfs $dev /media/$name/$ldev -o uid=$user,sync")==0 ) { - syslog('notice', "USB device $name ($ldev) successfully mounted (hpfs detected)"); - # if mounted, inform x2goclient about it... - system("touch $mntdir/$ldev.mounted"); - open (D,">",expand_filename("~$user/export/$name.$ldev")); - print D "export=/media/$name/$ldev\n"; - close (D); - } - elsif ( system("fuseext2 $dev /media/$name/$ldev -o ro,allow_other")==0 ) { - syslog('notice', "USB device $name ($ldev) successfully mounted readonly (ext*fs detected)"); - # if mounted, inform x2goclient about it... - system("touch $mntdir/$ldev.mounted"); - open (D,">",expand_filename("~$user/export/$name.$ldev")); - print D "export=/media/$name/$ldev\n"; - close (D); - } - else { - # the mount failed, let's assume that the device is encrypted... - my $enc=`ls -1 $mntdir | grep .encrypted`; - if ( $enc eq "" ) { - # use cryptsetup to decrypt the device... - system("/sbin/cryptsetup --key-file /etc/keys/keystick.key luksOpen $dev keystick"); - - # mount the ,,decrypted'' USB device via devmapper... - if ( system("mount /dev/mapper/keystick /media/$name/$ldev")==0 ) { - # inform x2goclient about this... - system("touch $mntdir/$ldev.encrypted"); - system("chown -R $user /media/$name/$ldev/dsa.key"); - open (D,">",expand_filename("~$user/logins/$name.$ldev")); - print D "login=/media/$name/$ldev\n"; - close (D); - print F "encrypted mount successful ($ldev)\n"; - } - else { - # on mount failures release the decrypted device again - system("/sbin/cryptsetup luksClose keystick"); - print F "mount failed ($ldev)\n"; - } - } - else { - print F "cryptodisk already present\n"; - } - } - if ( -e "/media/$name/$ldev" ) { - print F "detected mountpoint '/media/$name/$ldev'\n"; - print F "running '/sbin/blkid -o value -s LABEL $dev'\n"; - my $label=`/sbin/blkid -o value -s LABEL $dev`; - chomp($label); - if ($label) { - print F "symlinking '/media/$name/$ldev' and '/media/$name/$label'\n"; - unlink "/media/$name/$label" if ( -l "/media/$name/$label" ); - symlink("/media/$name/$ldev","/media/$name/$label"); - open (D,">>",expand_filename("~$user/export/$name.$ldev")); - print D "export=/media/$name/$label\n"; - close (D); - } - } - - } - elsif ( $action eq "remove" ) { - - ### - ### ACTION: unmount device after it has been removed from the USB subsystem - ### - - syslog('notice', "device remove action called"); - - # we rely on our own mount logistics here... - if ( -e "$mntdir/$ldev.mounted" ) { - # inform x2goclient that the device has been removed - system ("umount -ff /media/$name/$ldev"); - unlink ("$mntdir/$ldev.mounted"); - open ( D,">",expand_filename("~$user/export/$name.$ldev.unexport")); - open (I,"<",expand_filename("~$user/export/$name.$ldev")); - while (<I>) { - $_=~s/^export=/unexport=/i; - print D $_; - } - close (I); - close (D); - syslog('notice', "USB device $name ($ldev) successfully unmounted"); - } - elsif ( -e "$mntdir/$ldev.encrypted" ) { - # inform x2goclient that the device has been removed - # release the encrypted device mapping - unlink ("$mntdir/$ldev.encrypted"); - open ( D,">",expand_filename("~$user/logins/$name.$ldev.unexport")); - print D "logout=/media/$name/$ldev\n"; - system("umount /media/$name/$ldev"); - system("/sbin/cryptsetup luksClose keystick"); - close (D); - } - } - - close (F); - } else { - - syslog('notice', "not in any thinclient mode, exiting"); - } - USBMOUNTPATCH + wget -O ./patch/includes.chroot/usr/lib/x2go/tce/x2gousbmount 'https://code.x2go.org/gitweb?p=x2gothinclient.git;a=blob_plain;f=usbmount/x2...' chmod 755 ./patch/includes.chroot/usr/lib/x2go/tce/x2gousbmount </code> ==== Starting the Build ==== -- This mail was generated by DokuWiki at https://wiki.x2go.org/