Inhaltsverzeichnis
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 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