BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Port-Patches automatisch generieren

Ändert man einen FreeBSD -Port und möchte dazu Patches erstellen, welche im Port unter dem Verzeichnis files gespeichert werden, so muss man diese nicht unbedingt von Hand mit diff(1) erzeugen. Zuerst erstellt man von jeder Datei, die man verändern möchte, unterhalb des work/-Verzeichnisses eine Kopie mit der Endung .orig und bearbeitet das Original.

# cd /usr/ports/security/nss/work/nss-3.12.4/mozilla/security/nss/lib/nss/
# ls -l config.mk*
-rw-r-----  1 root  wheel  3181 30 Aug 22:27 config.mk
-rw-r-----  1 root  wheel  3182 11 Jun 02:55 config.mk.orig

Sind alle Änderungen gemacht, geht man in das Port-Verzeichnis und gibt make makepatch ein:

# cd /usr/ports/security/nss
# ls -l files
total 0
# make makepatch
/usr/bin/diff -ud ./cmd/modutil/modutil.h.orig ./cmd/modutil/modutil.h > /usr/ports/security/nss/files/patch-cmd__modutil__modutil.h
/usr/bin/diff -ud ./cmd/modutil/pk11.c.orig ./cmd/modutil/pk11.c > /usr/ports/security/nss/files/patch-cmd__modutil__pk11.c
/usr/bin/diff -ud ./cmd/platlibs.mk.orig ./cmd/platlibs.mk > /usr/ports/security/nss/files/patch-cmd__platlibs.mk
/usr/bin/diff -ud ./tests/common/init.sh.orig ./tests/common/init.sh > /usr/ports/security/nss/files/patch-tests__common__init.sh
/usr/bin/diff -ud ./lib/ckfw/dbm/ckdbm.h.orig ./lib/ckfw/dbm/ckdbm.h > /usr/ports/security/nss/files/patch-lib__ckfw__dbm__ckdbm.h
/usr/bin/diff -ud ./lib/ssl/config.mk.orig ./lib/ssl/config.mk > /usr/ports/security/nss/files/patch-lib__ssl__config.mk
/usr/bin/diff -ud ./lib/smime/config.mk.orig ./lib/smime/config.mk > /usr/ports/security/nss/files/patch-lib__smime__config.mk
/usr/bin/diff -ud ./lib/certdb/xauthkid.c.orig ./lib/certdb/xauthkid.c > /usr/ports/security/nss/files/patch-lib__certdb__xauthkid.c
/usr/bin/diff -ud ./lib/certdb/xbsconst.c.orig ./lib/certdb/xbsconst.c > /usr/ports/security/nss/files/patch-lib__certdb__xbsconst.c
/usr/bin/diff -ud ./lib/certdb/xconst.c.orig ./lib/certdb/xconst.c > /usr/ports/security/nss/files/patch-lib__certdb__xconst.c
/usr/bin/diff -ud ./lib/softoken/legacydb/cdbhdl.h.orig ./lib/softoken/legacydb/cdbhdl.h > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__cdbhdl.h
/usr/bin/diff -ud ./lib/softoken/legacydb/dbmshim.c.orig ./lib/softoken/legacydb/dbmshim.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__dbmshim.c
/usr/bin/diff -ud ./lib/softoken/legacydb/keydb.c.orig ./lib/softoken/legacydb/keydb.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__keydb.c
/usr/bin/diff -ud ./lib/softoken/legacydb/pcertdb.c.orig ./lib/softoken/legacydb/pcertdb.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__pcertdb.c
/usr/bin/diff -ud ./lib/softoken/legacydb/pk11db.c.orig ./lib/softoken/legacydb/pk11db.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__pk11db.c
/usr/bin/diff -ud ./lib/softoken/legacydb/keydbi.h.orig ./lib/softoken/legacydb/keydbi.h > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__keydbi.h
/usr/bin/diff -ud ./lib/softoken/config.mk.orig ./lib/softoken/config.mk > /usr/ports/security/nss/files/patch-lib__softoken__config.mk
/usr/bin/diff -ud ./lib/nss/config.mk.orig ./lib/nss/config.mk > /usr/ports/security/nss/files/patch-lib__nss__config.mk
/usr/bin/diff -ud ./lib/freebl/config.mk.orig ./lib/freebl/config.mk > /usr/ports/security/nss/files/patch-lib__freebl__config.mk
/usr/bin/diff -ud ./lib/pk11wrap/secmodi.h.orig ./lib/pk11wrap/secmodi.h > /usr/ports/security/nss/files/patch-lib__pk11wrap__secmodi.h
/usr/bin/diff -ud ./Makefile.orig ./Makefile > /usr/ports/security/nss/files/patch-Makefile
# ls -l files
total 42
-rw-r--r--  1 root  wheel   434 30 Aug 22:29 patch-Makefile
-rw-r--r--  1 root  wheel   451 30 Aug 22:29 patch-cmd__modutil__modutil.h
-rw-r--r--  1 root  wheel  1448 30 Aug 22:29 patch-cmd__modutil__pk11.c
-rw-r--r--  1 root  wheel   635 30 Aug 22:29 patch-cmd__platlibs.mk
-rw-r--r--  1 root  wheel   341 30 Aug 22:29 patch-lib__certdb__xauthkid.c
-rw-r--r--  1 root  wheel   509 30 Aug 22:29 patch-lib__certdb__xbsconst.c
-rw-r--r--  1 root  wheel   481 30 Aug 22:29 patch-lib__certdb__xconst.c
-rw-r--r--  1 root  wheel   285 30 Aug 22:29 patch-lib__ckfw__dbm__ckdbm.h
-rw-r--r--  1 root  wheel   291 30 Aug 22:29 patch-lib__freebl__config.mk
-rw-r--r--  1 root  wheel   284 30 Aug 22:29 patch-lib__nss__config.mk
-rw-r--r--  1 root  wheel   301 30 Aug 22:29 patch-lib__pk11wrap__secmodi.h
-rw-r--r--  1 root  wheel   311 30 Aug 22:29 patch-lib__smime__config.mk
-rw-r--r--  1 root  wheel   296 30 Aug 22:29 patch-lib__softoken__config.mk
-rw-r--r--  1 root  wheel   333 30 Aug 22:29 patch-lib__softoken__legacydb__cdbhdl.h
-rw-r--r--  1 root  wheel   372 30 Aug 22:29 patch-lib__softoken__legacydb__dbmshim.c
-rw-r--r--  1 root  wheel   332 30 Aug 22:29 patch-lib__softoken__legacydb__keydb.c
-rw-r--r--  1 root  wheel   361 30 Aug 22:29 patch-lib__softoken__legacydb__keydbi.h
-rw-r--r--  1 root  wheel   341 30 Aug 22:29 patch-lib__softoken__legacydb__pcertdb.c
-rw-r--r--  1 root  wheel   353 30 Aug 22:29 patch-lib__softoken__legacydb__pk11db.c
-rw-r--r--  1 root  wheel   368 30 Aug 22:29 patch-lib__ssl__config.mk
-rw-r--r--  1 root  wheel   495 30 Aug 22:29 patch-tests__common__init.sh

Nun wurde von allen veränderten Dateien ein Patch im Verzeichnis files erstellt.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Fehlende Abhängigkeiten eines Ports anzeigen

Möchte man einen Port installieren, vorher aber herausfinden welche Ports als Abhängigkeiten dieses Ports installiert werden, so kann dies mit make missing im Portverzeichnis gemacht werden:

# cd /usr/ports/editors/openoffice.org-3
# make missing
sysutils/coreutils
devel/patch
archivers/p5-Archive-Zip
devel/apache-ant

Mehr Informationen zu den make-Targes des Portbaums findet man in der Manpage ports(7).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Zwei CSV-Dateien miteinander vergleichen

Mit Hilfe von csvdiff lassen sich zwei CSV-Dateien vergleichen und deren Unterschiede übersichtlich darstellen. Im FreeBSD Portbaum findet man csvdiff unter textproc/csvdiff:

# cd /usr/ports/textproc/csvdiff && make install clean

Mit der -e Option wird die ursprüngliche, mit der -a Option die veränderte CSV-Datei angegebenen. Möchte man die Spaltennamen anzeigen lassen, erstellt man eine weitere CSV-Datei in der auf einer Zeile die Spaltennamen aufgeführt sind. Diese Datei kann danach mit der -c Option an csvdiff übergeben werden. Standardmässig wird als Trennzeichen ein Komma verwendet, möchte man ein anderes Trennzeichen angeben, kann dies mit der -s Option gemacht werden:

# /usr/local/bin/csvdiff -e kalender.csv -a kalender_neu.csv -c spalten.csv

-------------------------------------------------------------------------------

Record no: 002 is different:
 Actual   line: "1","11/26/05","07:00:00 am","11/27/05","10:00:00 pm","False","False","","","null","null","null","True"
 Expected line: "1","11/26/05","08:00:00 am","11/27/05","10:00:00 pm","False","False","","","null","null","null","True"
  Difference in field no.: 03 - field name: "Start Time"
   Actual  : "07:00:00 am"
   Expected: "08:00:00 am"

-------------------------------------------------------------------------------

Record no: 106 is different:
 Actual   line: "3","11/10/06","01:00:00 am","11/13/06","01:00:00 am","False","False","","","null","","Mailand","True"
 Expected line: "3","11/10/06","01:00:00 am","11/13/06","01:00:00 am","True","False","","","null","","Mailand","True"
  Difference in field no.: 06 - field name: "All day event"
   Actual  : "False"
   Expected: "True"

-------------------------------------------------------------------------------

Record no: 306 is different:
 Actual   line: "6","10/18/08","12:00:00 am","10/20/08","12:00:00 am","True","False","","","null","null","null","True"
 Expected line: "6","10/18/08","12:00:00 am","10/20/08","12:00:00 am","True","False","","","null","null","null","False"
  Difference in field no.: 13 - field name: "Private"
   Actual  : "True"
   Expected: "False"

-------------------------------------------------------------------------------

Record no: 401 is different:
 Actual   line: "E","09/17/09","12:00:00 am","09/21/09","12:00:00 am","True","False","","","null","null","null","False"
 Expected line: "e","09/17/09","12:00:00 am","09/21/09","12:00:00 am","True","False","","","null","null","null","False"
  Difference in field no.: 01 - field name: "Subject"
   Actual  : "E"
   Expected: "e"

===============================================================================

Following lines exists only in actual result kalender_neu.csv:

-------------------------------------------------------------------------------

 Actual 412 line 413 : "Fut","??/??/10","","","","True","False","","","null","null","null","True"

Mehr Informationen und weitere Optionen zu csvdiff erhält man mit der -h Option:

# csvdiff -h
 Permalink

PDF Dateien auf der Kommandozeile bearbeiten

Mit Hilfe von pdfjam können PDF-Dateien auf der Kommandozeile bearbeitet werden. Im FreeBSD Portbaum findet man pdfjam unter print/pdfjam:

# cd /usr/ports/print/pdfjam && make install clean

Mit Hilfe von pdfjoin können mehrere PDF-Dateien aneinandergehängt und in einer neuen PDF-Datei gespeichert werden:

# ls -l *pdf
-rw-r--r--  1 test  wheel   15860 22 Aug 20:30 dokument1.pdf
-rw-r--r--  1 test  wheel  851091 22 Aug 20:30 dokument2.pdf
# pdfjoin dokument1.pdf dokument2.pdf 
This is pdfjoin version 1.21
  Temporary LaTeX file for this job is /var/tmp/pdfjoin.jjSZME/29339.tex
  Calling pdflatex...
  Finished: output is /tmp/dokument2-joined.pdf
# ls -l *pdf
-rw-r--r--  1 test  wheel   15860 22 Aug 20:30 dokument1.pdf
-rw-r--r--  1 test  wheel  978692 22 Aug 20:34 dokument2-joined.pdf
-rw-r--r--  1 test  wheel  851091 22 Aug 20:30 dokument2.pdf

Möchte man ein PDF-Dokument um 90 Grad gegen den Uhrzeigersinn drehen, kann dazu pdf90 verwenden werden:

# pdf90 dokument1.pdf 
This is pdf90 version 1.21
Processing dokument1.pdf...
  Temporary LaTeX file for this job is /var/tmp/pdf90.oMQtaH/29449-1.tex
  Calling pdflatex...
  Finished: output is /tmp/dokument1-rotated.pdf

Sollen immer zwei Seiten eines PDF-Dokumentes auf einer zusammengefasst werden, kann dies mit pdfnup gemacht werden:

# pdfnup dokument2.pdf
This is pdfnup version 1.21
Processing dokument2.pdf...
  Temporary LaTeX file for this job is /var/tmp/pdfnup.HBQi4Y/29485-1.tex
  Calling pdflatex...
  Finished: output is /tmp/dokument2-2x1.pdf

Mehr Informationen zu pdfjam findet man in den Manpages pdfjoin(1), pdf90(1) und pdfnup(1).

Comments (1)  Permalink

Steuerzeichen aus einer mit script erstellten Datei entfernen

Zeichnet man die Terminalausgabe mit script(1) auf so werden die Steuerzeichen von zum Beispiel der Rücktaste oder der Pfeiltasten mitaufgezeichnet was das Bearbeiten einer solchen Datei erschwert:

Script started on Sat Aug 15 15:06:22 2009
# ls -1^M^M
Makefile^M
distinfo^M
files^M
pkg-descr^M
pkg-plist^M
typescript^M
# echo hallo weld^H^[[Kt > testdatei^M^M
# echo hallo welt > testdatei^[[27Dls -1^[[K^M^M
Makefile^M
distinfo^M
files^M
pkg-descr^M
pkg-plist^M
testdatei^M
typescript^M
# exit^H^H
Script done on Sat Aug 15 15:07:09 2009

Möchte man diese entfernen, kann dies mit der -b Option von col gemacht werden. Im folgenden Beispiel wird der bereinigte Inhalt in eine Datei namens ausgabe geschrieben:

# cat typescript | col -b > ausgabe

Danach sind alle Steuerzeichen entfernt und die Datei kann weiter bearbeitet werden:

Script started on Sat Aug 15 15:06:22 2009
# ls -1
Makefile
distinfo
files
pkg-descr
pkg-plist
typescript
# echo hallo welt > testdatei
# echo hallo welt > testdatei
# ls -1
Makefile
distinfo
files
pkg-descr
pkg-plist
testdatei
# exit
Script done on Sat Aug 15 15:07:09 2009

Auf FreeBSD ist col standardmässig im Basissystem vorhanden. Mehr Informationen zu col findet man in der Manpage col(1).

 Permalink

Limitierte Benutzershell verwenden

Möchte man Benutzern eine Shell auf einem Rechner zur Verfügung stellen, jedoch festlegen, dass nur gewisse Befehle verwendet werden können, so kann man dazu lshell verwenden. Im FreeBSD Portbaum findet man lshell unter shells/lshell:

# cd /usr/ports/shells/lshell && make install clean

Nun kann die Shell der Benutzer auf lshell gewechselt werden:

# pw usermod -s /usr/local/bin/lshell -n <Benutzer>

In der Datei /usr/local/etc/lshell.conf werden unter allowed die Befehle angegeben, welche von den lshell Benutzern verwendet werden dürfen. Unter forbidden werden Zeichen oder Befehle eingetragen, welche die Benutzer nicht verwenden dürfen. Unter aliases können Abkürzungen für Befehle angegeben werden:

[default]
allowed         : ['ls','echo','cd','ll']
forbidden       : [';', '&', '|','`','>','<']
aliases         : {'ll':'ls -l'}

Meldet sich ein lshell-Benutzer an, kann dieser mit ? oder help seine erlaubten Befehle ansehen. Verwendet der Benutzer ein verbotenes Kommando, so wird er nach dem zweiten Versuch automatisch abgemeldet:

# ssh <Benutzer>@<Server>

You are in a limited shell.
Type '?' or 'help' to get the list of allowed commands
testbenutzer:~$ ?
cd  echo  exit  help  ll  ls
testbenutzer:~$ make
*** unknown syntax: make
testbenutzer:~$ echo test > datei
*** forbidden synthax -> "echo test > datei"
*** You have 0 joker(s) left, before getting kicked out.
This incident has been reported.
testbenutzer:~$ echo test2 > datei
*** forbidden synthax -> "echo test2 > datei"
- Kicked out -
Connection to <server> closed.

Auch können Einstellungen pro Benutzergruppe gemacht werden. Folgendes Beispiel entfernt der Gruppe limited die Berechtigung für ll, fügt jedoch cat zu den erlaubten Befehlen hinzu:

[grp:limited]
allowed         : -['ll'] + ['cat']

Möchte man die Berechtigungen für einen bestimmten Benutzer anpassen, erstellt man eine weitere Sektion in der Konfigurationsdatei, setzt den Benutzernamen in eckige Klammern und fügt danach die Konfiguration für den entsprechenden Benutzer hinzu. Mehr Informationen zu lshell findet man in der Manpage lshell(1).

 Permalink

Zeilennummern einer Datei anzeigen

Mit Hilfe von nl lassen sich die Zeilen innerhalb einer Textdatei durchnummerieren:

# cat testdatei
asdf
foo

bar
blafasel
# nl testdatei
     1  asdf
     2  foo
        
     3  bar
     4  blafasel

Standardmässig werden leere Zeile nicht nummeriert. Soll dies trotzdem gemacht werden, kann dies mit der -b a Option festgelegt werden:

# nl -b a testdatei
     1  asdf
     2  foo
     3  
     4  bar
     5  blafasel

Auf FreeBSD ist nl standardmässig im Basissystem vorhanden. Mehr Informationen zu nl findet man in der Manpage nl(1).

 Permalink
1-7/7