====== RSSH als RPM ====== Es gibt das schöne Tool rssh (http://www.pizzashack.org/rssh/index.shtml). Es wird als Shell für einen User eingetragen und erlaubt diesem User, Dateien per ''scp'', ''sftp'', ''rsync'', ''cvs'' und/oder ''rdist'' zu übertragen, aber es erlaubt ihm nicht, sich am System anzumelden. Wer was darf, wird in ''/etc/rssh.conf'' festgelegt. Saubere Sache, das! :-) Die Software wurde im Januar 2006 zuletzt aktualisiert und ist jetzt perfekt, sagt der Autor. Mag sein, aber die Installationsroutinen sind es leider nicht. ===== Schwachpunkt 1: sftp-server ===== Der erste Schwachpunkt bei der Installation ist, dass das Binary sftp-server auf 64 Bit-Systemen nicht gefunden wird, weil es in ''/usr/lib64'' liegt und die Routine nur in ''/usr/lib'' sucht. Habe mich gefragt, warum configure nicht da nachsieht, wo es konfiguriert ist (und dann feststellen müssen, dass die Datei nur von root gelesen werden kann :-(), und mir einen kleinen Patch ausgedacht: --- ./configure 2008-11-23 17:17:59.000000000 +0100 +++ ../rssh-orig/configure 2006-01-07 03:24:58.000000000 +0100 @@ -4984,10 +4984,6 @@ fi scp_path=$ac_cv_path_scp_path -if test -z "$scp_path"; then - scp_path=`which scp` -fi - if test -n "$scp_path"; then echo "$as_me:$LINENO: result: $scp_path" >&5 echo "${ECHO_T}$scp_path" >&6 @@ -5032,10 +5028,6 @@ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="/usr/libexec:/usr/libexec/openssh:/usr/local/libexec/openssh:/usr/lib/openssh:/usr/lib:/usr/local/libexec:/usr/lib/ssh" -as_arch_helper=`uname -m` -if test "a$as_arch_helper" = "ax86_64"; then - as_dummy="$as_dummy:/usr/lib64/openssh:/usr/lib64:/usr/lib64/ssh" -fi for as_dir in $as_dummy do IFS=$as_save_IFS @@ -5054,12 +5046,6 @@ fi sftp_path=$ac_cv_path_sftp_path -if test -z "$sftp_path"; then - if test -r /etc/ssh/sshd_config; then - sftp_path=`grep sftp-server /etc/ssh/sshd_config | awk '{print $3}'` - fi -fi - if test -n "$sftp_path"; then echo "$as_me:$LINENO: result: $sftp_path" >&5 echo "${ECHO_T}$sftp_path" >&6 In diesem Patch ist außerdem der ''scp''-Teil enthalten -- weiß der Kuckuck, warum ''scp'' vom openSUSE Build System sonst nicht gefunden wird :-/ Der Code lässt sich z. B. als ''configure.patch'' abspeichern. Wenn man dann ein ''patch -p0 < configure.patch'' ausführt, sollte der Flicken eingesetzt sein ;-). Oder man fügt die gekennzeichneten Zeilen manuell ein, je nachdem, was schneller geht :-). ===== Schwachpunkt 2: rpmbuild und rssh_chroot_helper ===== So weit, so gut. Nun habe ich aus dem [[http://www.pizzashack.org/rssh/download.shtml|zum Download angebotenen]] .src.rpm das Spec-File extrahiert und die gepatchten Sources dazu genommen. Der Build schlägt fehl. Und zwar wird ganz zum Schluss ein "chmod" auf das Binary ''rssh_chroot_helper'' ausgeführt, aber leider wird dabei auf ''/usr/lib64/rssh_chroot_helper'' zugegriffen und nicht auf das Binary, das gerade gebaut wurde :-( Im Bugtracker auf sourceforge.net wird zwar in Bug 1384981 eine Lösung gegeben, aber sie hilft nicht. Stattdessen habe ich Zeile 731 in Makefile.in um das ''$(DESTDIR)'' erweitert, **das** hilft :-). ===== Vorgehen: ===== - auf http://www.pizzashack.org/rssh/download.shtml dem Link zum Download des .src.rpm folgen, Datei herunterladen - als root das .src.rpm installieren. Danach existieren ''/usr/src/packages/SPECS/rssh.spec'' und ''/usr/src/packages/SOURCES/rssh-2.3.2.tar.gz'' - das Source-Archiv auspacken und die beiden oben beschriebenen Änderungen durchführen - das Source-Archiv löschen und neu erstellen (''tar -cvzf rssh-2.3.2.tar.gz rssh-2.3.2'') - sicherstellen, dass es sich bei ''/usr/src/packages/SOURCES/rssh-2.3.2.tar.gz'' jetzt um die modifizierten Quellen handelt (Zeitstempel beachten) - (fakultativ) ändern der Zeile ''Release: 1'' in (z. B.) ''Release: 1m'' (m für modified) in der Datei ''/usr/src/packages/SPECS/rssh.spec'' - ''cd /usr/src/packages'' - ''rpmbuild -ba SPECS/rssh.spec'' - ''rpm -ivh RPMS/$(uname -m)/rssh*.rpm'' :-) Der ''rpmbuild''-Befehl hat sowohl ein .src.rpm als auch ein binäres RPM -- passend zur verwendeten Architektur -- gebaut. Der ''rpm''-Befehl zum Schluss installiert das dann auch :-) **Nachtrag 2009-01-19**: Das Gefreckel hat mich inspiriert, mir einen Account für den openSUSE-Buildservice zu holen. SUSE-Nutzer können das Paket deshalb jetzt auch aus dem Buildservice ziehen, die Basis-URL ist [[http://download.opensuse.org/repositories/home:/werfl]], darunter suche man seine Distri :-)