+%define name pl_sshd
+%define version 1.0
+%define release 8.planetlab%{?date:.%{date}}
+
+Vendor: PlanetLab
+Packager: PlanetLab Central <support@planet-lab.org>
+Distribution: PlanetLab 3.0
+URL: http://cvs.planet-lab.org/cvs/pl_sshd
+
Summary: SSH server config for PlanetLab
-Name: pl_sshd
-Version: 0.1
-Release: 1
-Requires: automount, sshd
-Copyright: GPL
-URL: http://www.planet-lab.org
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Requires: autofs, openssh-server
+License: GPL
Group: System Environment/Base
-Source: %{_fullname}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
+
+Source0: %{name}-%{version}.tar.bz2
%description
-SSH server configuration for PlanetLab nodes. Configures an automounted
+SSH server configuration for PlanetLab nodes. Configures an automounted
directory as source for authorized_keys files and points sshd to that
directory.
-Created from $Header$.
%prep
%setup
%install
-install -m 0755 -o root -g root pl_sshd.sh $RPM_BUILD_ROOT/usr/local/sbin
-install -m 0755 -o root -g root pl_sshd $RPM_BUILD_ROOT/etc/init.d
-install -m 0755 -o root -g root auto.pl_sshd $RPM_BUILD_ROOT/etc
-echo "OPTIONS='-p 806'" >$RPM_BUILD_ROOT/etc/sysconfig/sshd
+mkdir -p $RPM_BUILD_ROOT/var/pl_sshd/keys
+install -D -m 0755 pl_sshd.sh $RPM_BUILD_ROOT/usr/local/sbin/pl_sshd.sh
+install -D -m 0755 pl_sshd $RPM_BUILD_ROOT/etc/init.d/pl_sshd
+install -D -m 0755 auto.pl_sshd.py $RPM_BUILD_ROOT/etc/auto.pl_sshd
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
+%dir /var/pl_sshd/keys
%attr(0755,root,root) /usr/local/sbin/pl_sshd.sh
%attr(0755,root,root) /etc/init.d/pl_sshd
%attr(0755,root,root) /etc/auto.pl_sshd
%post
-RUNLEVEL=`/sbin/runlevel`
-
-if [ "$1" -ge 1 ]; then
- chkconfig --add pl_sshd
-
- if [[ "$RUNLEVEL" != "unknown" ]]; then
- /etc/init.d/pl_sshd restart
- fi
+# 1 = install, 2 = upgrade/reinstall
+if [ $1 -ge 1 ]; then
+ # create the magic directory for automount
+ keydir=/var/pl_sshd/keys
+
+ # add appropriate entry to auto.master
+ auto_master=/etc/auto.master
+ auto_master_entry="$keydir /etc/auto.pl_sshd"
+ grep -qF "$auto_master_entry" $auto_master || \
+ echo $auto_master_entry >>$auto_master
+
+ #
+ # use the sysconfig file to tell our system sshd to look in the
+ # magic location for authorized_keys files
+ #
+ sysconfig_sshd=/etc/sysconfig/sshd
+ [ -r $sysconfig_sshd ] && \
+ mv $sysconfig_sshd $sysconfig_sshd.pl_sshd
+ echo "OPTIONS='-o \"AuthorizedKeysFile $keydir/%u/authorized_keys\"'" \
+ >$sysconfig_sshd
+
+ # link sshd pam config to pl_sshd so that we can actually login
+ pam_pl_sshd=/etc/pam.d/pl_sshd
+ [ -r $pam_pl_sshd ] || ln -s sshd $pam_pl_sshd
+
+ chkconfig --add pl_sshd
+
+ if [[ "$PL_BOOTCD" != "1" ]]; then
+ #
+ # don't try to start/restart various things automatically,
+ # it's too ugly (particularly if we're upgrading while
+ # connected over ssh)
+ #
+ echo
+ echo "You need to manually restart autofs and sshd, and"
+ echo "start the pl_sshd (ssh on port 806) service."
+ echo "Make sure you know what you're doing, particularly"
+ echo "if you're making this change over an ssh connection."
+ echo
+ fi
fi
%preun
-if [ "$1" = 0 ]; then
+# 0 = erase, 1 = upgrade
+if [ $1 -eq 0 ]; then
+ #
+ # stop pl_sshd, remove it from rcX.d init dirs, remove link
+ # to sshd's pam config
+ #
+ [ "$PL_BOOTCD" = "1" ] || /etc/init.d/pl_sshd stop || :
chkconfig --del pl_sshd
+ rm -f /etc/pam.d/pl_sshd
+
+ #
+ # remove funky config options for sshd (so that when we restart
+ # things will operate normally i.e., without automount magic)
+ #
+ rm /etc/sysconfig/sshd
+ if [ "$PL_BOOTCD" != "1" ]; then
+ echo
+ echo "You need to manually restart sshd."
+ echo "Make sure you know what you're doing, particularly"
+ echo "if you're making this change over an ssh connection."
+ echo
+ fi
+
+ #
+ # stop automounter, remove entry from auto.master, restart if
+ # necessary
+ #
+ [ "$PL_BOOTCD" != "1" ] && /etc/init.d/autofs stop
+ auto_master=/etc/auto.master
+ mv $auto_master $auto_master.pl_sshd.preun
+ sed -e '\,^/var/pl_sshd/keys,d' $auto_master.pl_sshd.preun \
+ >$auto_master
+
+ [ "$PL_BOOTCD" != "1" ] && /etc/init.d/autofs start
fi
%changelog
-* Tue Nov 25 2003 Steve Muir <smuir@cs.princeton.edu>
-- fixed a couple of Node Manager bugs:
- - bootstrapping pl_conf state when boot server unreachable
- - canonical hostnames should be all lower-case
-- fixup UID and GID of users within vservers to match real world
-- enable access to dynamic slices through port 806 sshd
-
-* Sun Oct 26 2003 Aaron Klingaman <Aaron.L.Klingaman@intel.com>
-- readded start/stop only when runlevel is known, for install purposes
-
-* Thu Oct 16 2003 Jeff Sedayao <Jeff.Sedayao@intel.com>
-- Fixed bug in pl_conf - it was getting negative wait times. Also added
- duke4 as a trusted user.
-
-* Tue Oct 8 2003 Jeff Sedayao <Jeff.Sedayao@intel.com>
-- Removed special fetch login from init function, updated release
-
-* Tue Oct 7 2003 Jeff Sedayao <Jeff.Sedayao@intel.com>
-- Moved special fetch login into main loop, fix account deletion
- problem
-
-* Tue Oct 7 2003 Aaron Klingaman <Aaron.L.Klingaman@intel.com>
-- Commented out code to start pl_* upon install
+* Thu Apr 7 2005 Steve Muir <smuir@cs.princeton.edu>
+- convert auto.pl_sshd to a python script (simpler and less error-prone)
-* Wed Aug 26 2003 Tammo Spalink <tammo.spalink@intel.com>
-- Initial build.
+* Mon Dec 1 2003 Steve Muir <smuir@cs.princeton.edu>
+- initial creation from files in sidewinder repository