Teamwork
The Answer Girl
Umbauen
konzept.tex hin oder her – nachdem einmal die Struktur stand, mutierte die Datei immer mehr zum eigentlichen Kursskript. Nach einigen Arbeitsphasen jedenfalls stimmte der Name vorn und hinten nicht mehr, während das früher mal eingecheckte unixkurs.tex im skript-Verzeichnis von niemandem bearbeitet wurde. Kurzum: es ist an der Zeit, einen Schnitt zu machen, unixkurs.tex mit dem Inhalt von konzept.tex zu überschreiben und konzept.tex aus dem Repository zu nehmen:
[trish@lillegroenn kurs]$ mv konzept/konzept.tex skript/unixkurs.tex [trish@lillegroenn kurs]$ cvs remove konzept/konzept.tex cvs remove: scheduling `konzept/konzept.tex' for removal cvs remove: use 'cvs commit' to remove this file permanently [trish@lillegroenn kurs]$ cvs ci
Beim Check-In gibt's jetzt zwei Nachfragen: Der neue Inhalt von unixkurs.tex will kommentiert sein (z.B. mit konzept.tex jetzt unixfoil.tex), und bei der Dokumentation des konzept.tex-Rausschmisses gibt cvs netterweise gleich denselben Kommentar vor:
konzept.tex jetzt unixfoil.tex CVS: ———————————————————————- CVS: Enter Log. Lines beginning with `CVS:' are removed automatically CVS: CVS: Committing in konzept CVS: CVS: Removed Files: CVS: konzept.tex CVS: ———————————————————————-
Fertig abgespeichert, werden wir Zeug(inn)en der Veränderungen im Depot:
cvs commit: Examining . cvs commit: Examining folien cvs commit: Examining konzept cvs commit: Examining skript Checking in folien/unixfoil.tex; /home/trish/cvs/linuxkurs/kursunterlagen/linuxkurs/folien/unixfoil.tex,v <-- unixfoil.tex new revision: 1.3; previous revision: 1.2 done Removing konzept/konzept.tex; /home/trish/cvs/linuxkurs/kursunterlagen/linuxkurs/konzept/konzept.tex,v <-- konzept.tex new revision: delete; previous revision: 1.1.1.1 done
Jetzt gilt es nur noch, das mittlerweile leere konzept-Verzeichnis zu löschen, und das übernimmt ein
[trish@lillegroenn kurs]$ cvs update -P
("purge" – "säubern") für uns.
Nichts ist endgültig
Das Konzept also existiert nicht mehr. Doch da kommt die unerwartete Frage: "Haben Sie vielleicht ein Konzept für mich?" Wir nicht mehr, aber cvs. Alles, was wir tun müssen, ist, uns daran erinnern, zu welchem Zeitpunkt das Konzept ein Konzept war.
Glücklicherweise führt CVS penibel Buch. Dieses kann man sich mit cvs log auch anschauen. Das geht am besten, indem wir nicht alles an uns vorbeirauschen lassen, sondern durch less schicken:
[trish@lillegroenn kurs]$ cvs log | less
Mit dem less-Suchbefehl /konzept finden wir darin auch die Bemerkung zur Umbenennung wieder:
RCS file: /home/trish/cvs/linuxkurs/kursunterlagen/linuxkurs/folien/unixfoil.tex,v[…] —————————- revision 1.3 date: 2001/03/30 21:57:53; author: trish; state: Exp; lines: +1 -1 konzept.tex jetzt unixfoil.tex —————————-
Leider bekommen wir keinen Hinweis auf die vormalige Existenz der Datei konzept.tex selbst: Unsere Schuld… Hätten wir das leere konzept-Verzeichnis mit seinen Informationen im CVS-Unterverzeichnis nicht mit dem -P-Flag von update gelöscht, wären wir jetzt nicht so hilflos.
Im schlimmsten Fall muss man jetzt mit less und ls im Dateibaum des CVS-Depots wühlen, bis sich das passende Attic-File zu konzept.tex (z.B. ~/cvs/linuxkurs/kursunterlagen/linuxkurs/konzept/Attic/konzept.tex,v) findet. Auf jeden Fall stellen wir fest, dass konzept.tex am 30.03.2001 gegen 21:55 noch am Leben gewesen sein muss.
Passen wir also unseren Datenbestand an den an, der um diese Zeit aktuell war:
[trish@lillegroenn kurs]$ cvs update -D "2001-03-30 21:55:53" cvs update: Updating . cvs update: Updating folien U folien/unixfoil.tex cvs update: Updating skript U skript/unixkurs.tex
Leider ist konzept.tex da nicht mit dabei.
[trish@lillegroenn kurs]$ cvs update --help
update: invalid option – -
Usage: cvs update [-APdflRp] [-k kopt] [-r rev|-D date] [-j rev]
[-I ign] [-W spec] [files…]
-A Reset any sticky tags/date/kopts.
-P Prune empty directories.
-d Build directories, like checkout does.[…]
… war gar nicht mal so falsch: Obwohl es die Option --help nicht gibt, spuckt cvs genau das aus, was wir brauchen: eine Hilfe zum cvs-Befehl update. Die Option -d erscheint vielversprechend und lässt sich so interpretieren: Zwar aktualisiert update normalerweise nur bereits ausgecheckte Dateien, doch wenn man update -d sagt, ist es etwas kooperationswilliger und erzeugt auch Verzeichnisse, die im Arbeitsdatenverzeichnis fehlen.
[trish@lillegroenn kurs]$ cvs update -dD "2001-03-30 21:55:53" cvs update: Updating . cvs update: Updating folien cvs update: Updating konzept U konzept/konzept.tex cvs update: Updating skript
Jetzt haben wir konzept.tex wieder und können das Konzept ausdrucken. Damit Sie nicht erst das im Kasten "Mehr Dokumentation zu cvs" erwähnte CVS-Buch konsultieren müssen, verrate ich Ihnen jetzt noch, dass das ominöse -A-Flag zum update-Kommando die einzige Möglichkeit ist, um wieder an eine aktuelle Arbeitskopie ohne konzept.tex zu kommen:
[trish@lillegroenn kurs]$ cvs update -A cvs update: Updating . cvs update: Updating folien U folien/unixfoil.tex cvs update: Updating konzept cvs update: warning: konzept/konzept.tex is not (any longer) pertinent cvs update: Updating skript U skript/unixkurs.tex
Ob Sie mit -P jetzt noch das konzept-Verzeichnis löschen wollen, sei allerdings Ihnen überlassen.
Keinen Shellzugang?
Ein Account auf einem Rechner heißt noch lange nicht, dass er für sämtliche Kollegen und Freundinnen auch zum Stöbern im System, zum Nutzen von Internetdiensten oder zum Ablegen von Daten zu gebrauchen sein soll. Vielmehr gibt es viele gute Gründe, den Zugang auf den CVS-Zugriff zu beschränken, ohne auf die Sicherheit zu verzichten, die SecureShell bietet.
Alles, was die Administratorin des CVS-Servers dazu braucht, sind öffentliche SSH-Schlüssel der CVS-Nutzer/innen von deren Arbeitsrechnern. Ähnlich wie bei PGP erzeugen diese auf ihren Alltagsaccounts ein Schlüsselpaar, von denen der public key nach Belieben verteilt werden kann, der private key jedoch geheimgehalten werden muss. Dies geschieht mit dem den SSH-Paketen beigelegten Kommando ssh-keygen und wurde im Answer-Girl in Heft 04/2001 ausführlich besprochen.
ssh-keygen legt den geheimen privaten Schlüssel in der Voreinstellung unter ~/.ssh/identity ab. Dieser darf nicht weitergegeben werden! Das, was die CVS-Sysadmine gerne hätte, ist eine Textdatei namens ~/.ssh/identity.pub und sieht etwa so aus:
1024 35 165043668525388007503675301831634125912119991502526700029105958161542269846546772572229108798152992529758074045707003573273020044380873112356724249904219939995856241718046388628225862962791292865950083481899332539835181290112611354730215142417376960062146599043065554089684980963002106747241282736545822186999 bille@billabox.bille.de
Diese eine lange Zeile überträgt die Sysadmine in die Datei .ssh/authorized_keys im Homeverzeichnis des Users. billes öffentlicher Schlüssel kommt also in ~bille/.ssh/authorized_keys auf dem CVS-Server zu liegen.
Die Server-Admine hat in der Zwischenzeit ein wenig in der Manpage zum SecureShell-Server sshd gestöbert und ist unter der Rubrik AUTHORIZED_KEYS FILE FORMAT darauf gestoßen, dass sie am Anfang einer Schlüsselzeile ein Kommando angeben kann, das anstelle einer Loginshell immer dann ausgeführt wird, wenn die entsprechende Benutzerin versucht, sich mit dem passenden privaten Key über ssh einzuloggen.
Wenn bille also mit ihrem cvs-Request per ssh kommt, soll einfach der cvs-Server starten und lediglich auf das Depot in ~trish/cvs/linuxkurs/kursunterlagen Zugriff gewähren. Einen passenden cvs-Server startet man mit cvs server --allow-root=/home/trish/cvs/linuxkurs/kursunterlagen, womit die Sysadmine lediglich ein command="cvs server --allow-root=/home/trish/cvs/linuxkurs/kursunterlagen" an den Schlüsselzeilenanfang von billes Public-Key stellen muss:
command="cvs server --allow-root=/home/trish/cvs/linuxkurs/kursunterlagen" 1024 35 165043668525388007503675301831634125912119991502526700029105958161542269846546772572229108798152992529758074045707003573273020044380873112356724249904219939995856241718046388628225862962791292865950083481899332539835181290112611354730215142417376960062146599043065554089684980963002106747241282736545822186999 bille@billabox.bille.de
Wichtig dabei: Der gesamte Rattenschwanz muss auch weiterhin eine einzige Zeile bleiben.
Mehr Dokumentation zu
cvs
Wer an der mit cvs mitgelieferten Dokumentation schier verzweifelt, sollte nicht aufgeben: Unter http://cvsbook.red-bean.com/ findet sich der GPLte Teil von Karl Fogels CVS-Buch zum Onlinestöbern oder Downloaden. Da dieses Answer-Girl keinesfalls erschöpfende Auskunft zu cvs geben kann, empfiehlt es sich als weitergehende Lektüre für alle, die Blut geleckt haben.
Glossar
ASCII-Texte
Texte, deren Zeichen im "American Standard Code for Information Interchange" abgespeichert sind. Leider umfasst dieser Code in der 7-Bit-Fassung nicht einmal deutsche Umlaute, sondern nur die Zeichen, die auf einer amerikanischen Tastatur zu finden sind, sowie einige Steuercodes wie CR ("Carriage Return") für den Wagenrücklauf (ursprünglich einer Schreibmaschine) oder LF ("Line Feed") für einen Zeilenumbruch. In 8-Bit-ASCII können immerhin die meisten Sonderzeichen aus Sprachen mit lateinischen Alphabeten kodiert werden. Wer allerdings kyrillische oder hebräische Zeichen schreiben will, muss andere Kodierungen wie UTF8 benutzen. Die meisten hierzulande gängigen Texteditoren benutzen ASCII.
Pfad
Der "Weg" zu einer Datei vom Wurzelverzeichnis / aus. So führt der absolute Pfad zur Programmdatei /usr/sbin/groupadd über die Verzeichnisse /usr und sbin und lautet daher /usr/sbin. Relative Pfade gehen im Gegensatz dazu immer vom aktuellen Arbeitsverzeichnis aus.
SecureShell
Sicherer Ersatz für Internetdienste wie Telnet und RSH ("Remote Shell"), mit deren Hilfe man auf entfernten Rechnern so arbeiten kann, als säße man direkt davor. Die Datenübertragung wird dabei verschlüsselt. Das SecureShell-Paket bringt meist auch einen sicheren Ersatz für RCP ("Remote Copy") namens scp mit.
tunneln
Nutzen eines Dienstes über eine Verbindung, die ein anderer Dienst aufbaut. So kann man z.B. CVS-Pakete in SSH-Paketen verpackt übertragen.
tex-Datei
Text-Datei, die aus Inhalt sowie TeX- oder LaTeX-Kommandos besteht, die die Struktur des Inhalts kennzeichnen. Mit Hilfe der Textsatz-Befehle tex oder latex wird daraus die tatsächliche Darstellung der druckfertigen Datei.
Loginshells
Der Kommandozeileninterpreter, den man nach dem Einloggen auf einer virtuellen Konsole zu Gesicht bekommt, in den meisten Linux-Fällen die "Bourne Again Shell" bash. Dass eine Bash Loginshell wird, wird mit der Option -login bestimmt, sodass man auch in X-Terminalprogrammen unter X11 Loginshells untergejubelt bekommen kann. Sollte ein echo $variablenname verraten, dass eine in ~/.bashrc gesetzte Variable in der aktuellen Shell nicht auftaucht, hat man es meist mit einer Loginshell zu tun, denn die schert sich bei der Bash nicht um die ~/.bashrc, sondern um ~/.bash_profile. Bleibt auch mit dort gesetzten Variablen der Erfolg aus (sofern es nicht daran liegt, dass sich beim Setzen Fehler eingeschlichen haben), wurde dieser vermutlich durch den Bash-Parameter -noprofile unterbunden. Hier hilft dann nur noch tieferes Graben im System oder das besprochene Sourcen der Variablen kurz vor Gebrauch.
Attic
In Verzeichnissen dieses Namens lagert CVS den Inhalt und die Geschichte aus dem Depot gelöschter Dateien.
PGP
"Pretty Good Privacy", das wohl am weitesten verbreitete Programm zum Verschlüsseln und Signieren von E-Mails u.a. Daten.



