[X2Go-Commits] [[X2Go Wiki]] page changed: doc:howto:tce

wiki-admin at x2go.org wiki-admin at x2go.org
Sun Jan 15 19:17:01 CET 2017


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

Date        : 2017/01/15 18:17
Browser     : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
IP-Address  : 78.43.90.159
Hostname    : HSI-KBW-078-043-090-159.hsi4.kabel-badenwuerttemberg.de
Old Revision: http://wiki.x2go.org/doku.php/doc:howto:tce?rev=1484503943
New Revision: http://wiki.x2go.org/doku.php/doc:howto:tce
Edit Summary: [Starting the Build] 
User        : stefanbaur

@@ -86,8 +86,193 @@
  # in a "build failed" message, even though the build might have worked):
  # export LBX2GO_IMAGETYPE='hdd'
  # to create a tar file only (seems to be broken in live-build):
  # export LBX2GO_IMAGETYPE='tar'
+ 
+ </code>
+ 
+ ==== Live-Patching the Build ====
+ This patch is required if you need USB mount capability on the ThinClient while [[http://bugs.x2go.org/cgi-bin/bugreport.cgi?bug=1136|Bug #1136]] is still unresolved.
+ 
+ <code>
+ mkdir -p ./includes.chroot/usr/lib/x2go/tce/
+ 
+ cat
>./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 at 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;
+ use
Sys::Syslog qw( :standard :macros );
+ 
+ my $user;
+ if ( -d "/lib/live/config" ) {
+         $user='user';
+ } else {
+         $user='x2gothinclient';
+ }
+ 
+ mkdir "~$user/export" unless ( -d "~$user/export");
+ mkdir "~$user/logins" unless ( -d "~$user/logins");
+ 
+ openlog($0,'cons,pid','user');
+ setlogmask( LOG_UPTO(LOG_NOTICE) );
+ 
+ 
+ sub check_x2gothinclientmode {
+         # check if X2GoClient is running in thinclient mode
+         # old code would check if x2gothinclientd was running,
+         # which fails on X2Go-TCE-live
+         my $x=`ps u -C x2goclient`;
+         if ( $x=~m/\W*--thinclient\W*/ )
+         {
+                 return 1;
+         }
+         return 0;
+ }
+ 
+ if (  check_x2gothinclientmode() ||  ( -d "/usr/share/doc/x2gothinclient-minidesktop" ) )
+ {
+ 
+         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 ( $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
+                 if(system("mount $dev /media/$name/$ldev -o uid=$user,sync,uni_xlate")==0)
+                 {
+                         syslog('notice', "USB device $name ($ldev) successfully mounted");
+                         # 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);
+                                 }
+                                 else
+                                 {
+                                         # on mount failures release the decrypted device again
+                                         system("/sbin/cryptsetup luksClose keystick");
+                                 }
+                         }
+                         else
+                         {
+                                 print F "cryptodisk already present\n";
+                         }
+                 }
+         }
+         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"));
+                         print D "unexport=/media/$name/$ldev\n";
+                         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);
+ }
+ USBMOUNTPATCH
  
  </code>
  
  ==== Starting the Build ====


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



More information about the x2go-commits mailing list