home Sonstiges Linux OpenBSD Links

Tips für Linux

joe den Zeilenumbrauch ausreden und Umlaute beibringen
Hierzu muß die Konfigurationsdatei bearbeitet werden. Bei Debian ist es /etc/joe/joerc . Dies ist aber nicht der Standart, also mittels locate nach joerc suchen.
Diese Konfigurationsdatei weicht vom üblichen Schema ab. Wenn man eine Option aktivieren will, darf kein Leerzeichen vor ihr stehen. Wenn sie deaktiviert sein soll, muß ein Leerzeichen vor ihr vorhanden sein. Alles andere wird ignoriert.

Umlaute:
-asis        Option ohne Leerzeichen davor!!

keinen automatischen Zeilenumbruch:
 -wordwrap   Option mit Leerzeichen davor!!


Wer war wann zuletzt eingeloggt?
Dies läßt sich ganz einfach mit dem Befehl lastlog feststellen.


Wer war wann eingeloggt?
Auch für das gibt es einen Befehl: last . Je länger das System schon läuft, desto länger dauert die Ausgabe! Mittels dem Pipesysmbol läßt es sich auch nach bestimmten Begriffen suchen:
www:# last | grep root   Zeigt alle Logins vom root an


Uhrzeit stellen
Bei Linux gibt es zwei Uhrzeiten: eine vom BIOS und die Linux eigene Zeit.
Anzeigen der BIOS Uhr:

# hwclock
Anzeigen der Linux Uhr:
# date
Setzen der BIOS Uhr auf den 4.6.2002 16:45:05 Uhr:
# hwclock --set --date="6/4/2002 16:45:05"
Setzen der Linuxzeit durch die BIOS Uhr:
# hwclock --hctosys

Bash Prompt anpassen
Ray hat sich mal etwas schlau gemacht und herausgefunden, wie man den Prompt der Bash ändert. Diese Änderung muß entweder in die /etc/profile, ~/.bashrc oder ~/.profile eingetragen werden, damit das Prompt bei jeden Login gesetzt wird. /etc/profile ist für das ganze System zuständig, allerdings kann dort ein gesetztes Prompt von einen userdefinierten Prompt in ~/.bashrc oder ~/.profile überschrieben werden.

\u zeigt der Username an
\h zeigt den Hostnamen an
\w zeigt das aktuelle Verzeichnis an

export PS1="\u@\h:\w # "
läßt das Prompt so aussehen:
root@www:/usr/src #

ftp in Scripten verwenden
Manchmal kann es hilfreich sein, das ftp Programm in eigene Scripte einzubinden, um zum Beispiel den Upload für die Homepage zu automatisieren. Ein einfaches Script wäre dieses:
#! /bin/sh
ftp -i -n host.sonstwo.marty44.net << "EOF"
user testuser geheim
cd html
mput *.html
bye
EOF
Der Parameter "-i" gibt an, das ftp nicht nachfragen soll, ob es eine Datei bei multiplen Up/Downloads empfangen/senden soll (mput/mget). Um zu verhindern, das ftp nach einen Usernamen und Passwort fragt, ist der Parameter "-n" da. Allerdings sollte dann danach die erste Anweisung gleich das ftp Kommando USER sein. Ftp kennt ziemlich viele Kommando's (grüne Schrift), siehe dazu auch "man ftp".


nervendes Piepsen der Bash abschalten
Wer viel mit der Tabtaste zur Autovervollständigung von Pfadnamen arbeitet, kennt das nervtötende Piepsen. Mit folgenden Eintrag in der Datei ~/.bashrc oder ~/.profile läßt es sich ausschalten:

setterm -blength 0
Natürlich kann der Befehl auch so eingegeben werden, dann gilt er nur für die aktuelle Sitzung.


LILO entfernen
Falls es mal von Not sein sollte den LILO zu entfernen, geht dies einfach mit dem Befehl:

lilo -u /dev/geraet


Welchen Dateien öffnet ein Programm?
Jeder kennt bestimmt die Fehlermeldung von irgendwelchen Programmen, das irgendwo eine Datei nicht gefunden wurde. Mit strace kann man nachvollziehen, welche Dateien ein Programm öffnen will:

strace -e trace=file PROGRAMM
Mit strace kann man auch nach Netzwerkaufrufen und so weiter suchen, siehe dazu man strace.


ein Patchset erstellen
Um ein Patchset von zwei Versionen eines Programmes zu erstellen empfiehlt sich diff. Hier als Beispiel an einen Linux Kernel:

root:~# cd /usr/src
root:/usr/src# ls -l
drwxr-xr-x   14 573      573          4096 Dec 24 11:20 linux-2.4.20
drwxr-xr-x   14 573      573          4096 Dec 24 11:16 linux-2.4.20working
root:/usr/src# diff -Naur linux-2.4.20 linux-2.4.20working > patch-2.4.21pre2-mips-silly-console_setup
Intern hat so ein Patch eine auf den ersten Blick chaotische Struktur: patch-2.4.21pre2-mips-silly-console_setup


ein Patchset einspielen
Meistens klappt das Einspielen eines Patches mit dem nachfolgeden Befehl. Allerdings haben patch und diff so viele Optionen, so das dies hier keine Allgemeinlösung ist. Zuerst muß man in das Hauptverzeichnis wechseln von dem Programm, was man patchen will und danach den patch Befehl ausführen.

root:~# cd /usr/src/linux-2.4.20
root:/usr/src/linux-2.4.20# patch -Np1 -i /von/wo/auch/immer/patch-2.4.21pre2-mips-silly-console_setup

Pine meldet Mailbox is open by another process, access is readonly
Erst mal sollte man mit ps ax prüfen, ob nicht noch irgendein pine/elm/anderes Mailprogramm läuft. Wenn dies nicht der Fall ist, sollte man die Berechtigung vom Verzeichnis /tmp checken. Dieses muß für alle User beschreibar sein und sollte die Rechte 1777 haben.


Logeinträge über den syslog unter der Shell
Wenn man zum Beispiel in einen Shellscript einen Logeintrag erstellen will, kann man dazu das Programm logger verwenden:

root:~# logger -p local7.info Dies ist ein Test
Die Option -p gibt an, wo der syslog den Eintrag hinschreibt (hier in dem Beispiel ist es local7). Der Zusatz .info gibt den Loglevel an, alle möglichen Werte sind in der Manpage zu logger aufgelistet. Wie der Eintrag dann im Log erscheint, hängt natürlich auch von der Konfiguration des syslogd ab.

Probleme bei der Installation von Debian Buster / Devuan ASCII 2.1 auf einem Microsoft Surface 3 Pro
Während der Installation bemerkt der Installer das eine WLAN Netzwerkkarte vorhanden ist, kann sie aber nicht in Betrieb nehmen da die Firmware Datei fehlt.
Lösung: Datei pcie8897_uapsta.bin von https://github.com/wkennington/linux-firmware/tree/master/mrvl herunterladen und auf einen USB Stick packen. Den Installer einmal probieren lassen die Datei selbst vom USB Stick zu laden.
Schlägt dies fehl, den USB Stick mounten. Via Alt-F2 Konsole wechseln und aktivieren:

# mount /dev/sdc1 /mnt  (eventuell vorher das richtige Device via dmesg | grep sd lokalisieren)
# mkdir -p /lib/firmware/mrvl
# cp /mnt/pcie8897_uapsta.bin /lib/firmware/mrvl/
# umount /mnt
Mit Alt-F1 wieder auf die Installerkonsole wechseln und erneut die Firmware suchen lassen. Sie sollte nun gefunden werden. In der Netzwerkkartenauswahl anschließ libertas auswählen.

Später in der Installation wird Grub als Bootmanager eingerichtet. Da das Surface UEFI nutzt, kann es passieren das man folgende Fehlermeldung erhät:

Unable to install GRUB in dummy
Executing 'grub-install dummy' failed.

This is a fatal error.
Mit Alt-F2 die Konsole wechseln und manuell das efivarfs mounten:
# mount -t efivarfs efivarfs /target/sys/firmware/efi/efivars
Zuück zur Installerkonsole mit Alt-F1 und erneut den Grubeintrag auswählen. Grub sollte nun ohne Probleme durchlaufen.

nicht darstellbare Zeichen in einer UTF-8 Datei entfernen

iconv -f utf8 -t utf8 -o Clean_UFT8_Eurobilltracker_hits_by_80060.csv -c Eurobilltracker_hits_by_80060.csv

apr undefined reference to sys_siglist Fehler bei make test
Falls man folgende Fehlermeldung bei make test erhält:

/bin/sh /tmp/t/apr-1.7.2/libtool --silent --mode=compile --tag=CC gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I../include -I./../include -o globalmutexchild.lo -c globalmutexchild.c && touch globalmutexchild.lo
/bin/sh /tmp/t/apr-1.7.2/libtool --silent --mode=link --tag=CC gcc -g -O2 -pthread -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE -I../include -I./../include -no-install -o globalmutexchild globalmutexchild.lo ../libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
/usr/bin/ld: ../.libs/libapr-1.so: undefined reference to `sys_siglist'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:115: globalmutexchild] Error 1
make[2]: Leaving directory '/tmp/t/apr-1.7.2/test'
make[1]: *** [/tmp/t/apr-1.7.2/build/apr_rules.mk:119: all-recursive] Error 1
make[1]: Leaving directory '/tmp/t/apr-1.7.2/test'
make: *** [Makefile:129: check] Error 2
sys_siglist scheint outdated zu sein, man kann das configure Skript zwingen diese Funktion nicht zu nutzen:
ac_cv_have_decl_sys_siglist=no ./configure --prefix=/usr --disable-static --with-installbuilddir=/usr/share/apr-1/build
Ansonsten wie gehabt auf https://www.linuxfromscratch.org/blfs/view/svn/general/apr.html vorgehen.

Update von meson auf die alte Art

python3 setup.py build
python3 setup.py install --root=dest
cp -rv dest/* /

Update von tzdata auf einen LFS System

mkdir t
cd t
tar -xf ../tzdata2021e.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica asia australasia backward; do
    zic -L /dev/null   -d $ZONEINFO       ${tz}
    zic -L /dev/null   -d $ZONEINFO/posix ${tz}
    zic -L leapseconds -d $ZONEINFO/right ${tz}
done
cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO

Certbot manuell installieren
als root
pip install --upgrade pip
pip install certbot certbot-apache
certbot certonly
- Fragen beantworten
Zertifikat und Key sollten dann unter /etc/letsencrypt/live/FQDN liegen
Apache anpassen (bei mir /etc/httpd/extra/httpd-vhosts.conf) Bsp:

<VirtualHost *:443>
    ServerAdmin ssl_ca_admin@example.com
    DocumentRoot "/srv/www"
    ServerName einBsp.example.com
SSLEngine on SSLCertificateFile /etc/letsencrypt/live/FQDN/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/FQDN/privkey.pem SSLHonorCipherOrder on SSLCipherSuite 'EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:+3DES:ECDH+AESGCM:ECDH+AES:ECDH:AES:HIGH:MEDIUM:!RC4:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP' SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
<Directory "/srv/www"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog "/var/log/httpd/SSLwww_error.log" CustomLog "/var/log/httpd/SSLwww_access.log" combined </VirtualHost>

renewal Prozess:

certbot renew
crontab
# Apache httpd graceful restarten um eventuell neue Zertifikate zu nutzen
5 1 2 1,3,5,7,9,11 *    /usr/bin/certbot renew -q
15 1 2 1,3,5,7,9,11 *   /usr/sbin/apachectl -k graceful

zurück zur Linux-Übersicht
Letzte Aktualisierung dieser Seite: 4. Februar 2023