Kein Platz mehr auf der /boot Partition in Ubuntu / Debian

Per Default ist die Boot Partition ca. 500M groß, da sich hier durch die Updates gerne alte Kernel ansammeln ist es ratsam zwischendurch aufzuräumen.

Beispiel einer abgebrochenen Installation, Meldung ist „No space left on device“

linux-image-4.4.0-116-generic (4.4.0-116.140) wird eingerichtet ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-4.4.0-116-generic
vmlinuz(/boot/vmlinuz-4.4.0-116-generic
) points to /boot/vmlinuz-4.4.0-116-generic
 (/boot/vmlinuz-4.4.0-116-generic) -- doing nothing at /var/lib/dpkg/info/linux-image-4.4.0-116-generic.postinst line 491.
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-116-generic /boot/vmlinuz-4.4.0-116-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-116-generic /boot/vmlinuz-4.4.0-116-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-116-generic
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.4.0-116-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-4.4.0-116-generic.postinst line 1052.
dpkg: Fehler beim Bearbeiten des Paketes linux-image-4.4.0-116-generic (--configure):
 Unterprozess installiertes post-installation-Skript gab den Fehlerwert 2 zurück

Bei ubuntuusers gibt es einen nützlichen Artikel wie man am besten seine alten Kernel entsorgt.

Hier die Kurzfassung, weitere Details bitte direkt bei ubuntuusers nachlesen.

Aktuellen Kernel feststellen:

max@kronos01:~$ uname -a
Linux kronos01 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Alte Kernel in Textdatei schreiben, prüfen ob aktueller Kernel dabei ist wenn ja entfernen:

max@kronos01:~$ dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | tee zu_entfernende_Kernel
max@kronos01:~$ cat zu_entfernende_Kernel 
linux-headers-4.4.0-101
linux-headers-4.4.0-101-generic
linux-headers-4.4.0-103
linux-headers-4.4.0-103-generic
linux-headers-4.4.0-104
linux-headers-4.4.0-104-generic
linux-headers-4.4.0-108
linux-headers-4.4.0-108-generic
linux-headers-4.4.0-81
linux-headers-4.4.0-81-generic
linux-headers-4.4.0-93
linux-headers-4.4.0-93-generic
linux-headers-4.4.0-97
linux-headers-4.4.0-97-generic
linux-headers-4.4.0-98
linux-headers-4.4.0-98-generic
linux-image-4.4.0-101-generic
linux-image-4.4.0-103-generic
linux-image-4.4.0-104-generic
linux-image-4.4.0-108-generic
linux-image-4.4.0-81-generic
linux-image-4.4.0-93-generic
linux-image-4.4.0-97-generic
linux-image-4.4.0-98-generic
linux-image-extra-4.4.0-101-generic
linux-image-extra-4.4.0-103-generic
linux-image-extra-4.4.0-104-generic
linux-image-extra-4.4.0-108-generic
linux-image-extra-4.4.0-93-generic
linux-image-extra-4.4.0-97-generic
linux-image-extra-4.4.0-98-generic

Alte Kernel löschen und File löschen:

max@kronos01:~$ cat zu_entfernende_Kernel | xargs sudo apt-get -y purge 

max@kronos01:~$ rm zu_entfernende_Kernel

 

Quelle: https://wiki.ubuntuusers.de/Skripte/Alte_Kernel_entfernen/

 

 

Defekten GRUB Bootloader reparieren

Defekten Rechner mit Knoppix oder der systemrescuecd starten, mit fdisk -l oder parted -l kann man sich alle Partitionen anzeigen lassen. Je nach Installation ist die Bootpartition einzeln z.B. bei einem LVM Setup oder in einer Partition.

Um per Chroot in die Installation des Rechners zu wechseln müssen die Partitionen gemountet werden, im Beispiel befindet sich die Bootpartition auf einer Partition mit den restlichen Daten:

mkdir /mnt/linux
mount /dev/sda1 /mnt/linux
mount -o bind /sys /mnt/linux/sys
mount -o bind /proc /mnt/linux/proc
mount -o bind /dev /mnt/linux/dev

Wenn alles gemountet ist kann man mit chroot in die Umgebung wechseln:

chroot /mnt/linux /bin/bash

Wenn die Bootpartition extra ist muss in der chroot Umgebung die Bootpartition extra gemountet werden:

mount /dev/sda2 /boot

Jetzt kann man mit grub-install die GRUB Installation fixen:

grub-install /dev/sda

 

 

Festplatte aus einem kaputten Seagate NAS System mounten – EXT4 mit 64k Blocksize mounten

Neulich hat mir ein Kunde eine kaputte Seagate NAS gebracht, eine der Disks hatte ein Problem, die NAS hat nicht mehr zuverlässig gebootet.

Ich habe die Disks in meinen Linux PC eingebaut, mit mdadm –scan –assemble hat er die Software RAIDs gefunden.

Auf ein Problem bin ich dann doch gestoßen, ein Linux mit Standardkernel kann kein Filesystem mit einer Blocksize von 65536 (64k) mounten.

Dmesg gibt folgende Fehlermeldung aus:

EXT4-fs bad block size 65536

Ich habe dazu einen Artikel gefunden wie man dennoch die Platte im Lesemodus mounten kann.

Die Blocksize des Filesystems kann man sich mit

tune2fs -l /dev/mapper/vg8-lv8

anzeigen lassen.

Mit folgendem Kommando lässt sich die Disk als Readonly mounten:

fuseext2 -o ro -o sync_read /dev/vg8/lv8 /mnt

Sollte das fuseext2 Paket nicht installiert sein lässt es sich mit apt install fuseext2 installieren.

Quelle: https://john-hunt.com/2013/04/25/recovering-data-from-a-wd-mybook-live-2tb-3tbor-similar/

debian-sys-maint Zugangsdaten verwenden für MySQL Login in der Bash

Für Wartungszwecke gibt es einen User „debian-sys-maint“ der auf jedem Debian verwandten System automatisch angelegt wird. Die Zugangsdaten sind unter /etc/mysql/debain.cnf zu finden. Der User hat die gleichen Rechte wie der DB root User.

Da die Zugangsdaten eh schon auf dem System sind kann man sich ein kleines Helferlein bauen welches den User und das Passwort verwendet für einen MySQL Login auf der CLI.

Dazu folgendes Script anlegen z.B. /usr/local/sbin/my

#!/bin/bash

mysql -u`grep user /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'` -p`grep password /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`

Danach noch einen „chmod 500 /usr/local/sbin/my“ und wir können es testen:

max@cmkdevel:~$ sudo my
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6264
Server version: 5.7.18-0ubuntu0.16.04.1-log (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Viel Spaß 😉

 

Unattended Installation von APT Paketen (Debian/Ubuntu)

Um Pakete ohne manuelle Eingaben zu Installieren müssen die Antworten für die Assistenten bereits vorliegen.

Als Beispiel eine unattended Installation von Postfix auf einem Ubuntu 16.04 LTS System.

Um die möglichen Parameter zu erfahren verwendet man das „debconf-show“ Tool, Postfix muss auf dem Testsystem bereits installiert sein.

max@cmkdevel:/opt$ sudo debconf-show postfix
  postfix/procmail: false
  postfix/chattr: false
  postfix/recipient_delim: +
  postfix/sqlite_warning:
  postfix/dynamicmaps_conversion_warning:
  postfix/mydomain_warning:
  postfix/relayhost:
  postfix/compat_conversion_warning: true
  postfix/not_configured:
  postfix/rfc1035_violation: false
  postfix/root_address:
  postfix/protocols: all
  postfix/destinations: $myhostname, cmkdevel.m.local, localhost.m.local, , localhost
  postfix/kernel_version_warning:
  postfix/relay_restrictions_warning:
  postfix/mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  postfix/mailbox_limit: 0
  postfix/tlsmgr_upgrade_warning:
* postfix/mailname: cmkdevel.m.local
* postfix/main_mailer_type: Internet Site
  postfix/bad_recipient_delimiter:
  postfix/main_cf_conversion_warning: true
  postfix/retry_upgrade_warning:

Um für ein neues System jetzt die Antworten dem Assistenten zu übergeben verwendet man das Tool „debconf-set-selections“. Der Kommandostapel setzt alle Optionen und Installiert automatisch Postfix.

debconf-set-selections <<< "postfix postfix/main_cf_conversion_warning string true"
debconf-set-selections <<< "postfix postfix/destinations string \$myhostname, $(hostname), localhost"
debconf-set-selections <<< "postfix postfix/root_address string max@m.local"
debconf-set-selections <<< "postfix postfix/bad_recipient_delimiter string ''"
debconf-set-selections <<< "postfix postfix/mynetworks string 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"
debconf-set-selections <<< "postfix postfix/recipient_delim string +"
debconf-set-selections <<< "postfix postfix/protocols string all"
debconf-set-selections <<< "postfix postfix/relayhost string mail.example.org"
debconf-set-selections <<< "postfix postfix/mailname string $(hostname)"
debconf-set-selections <<< "postfix postfix/mailbox_limit string 0"
debconf-set-selections <<< "postfix postfix/chattr string false"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Satellite system'"
apt-get install -y postfix

Viel Spaß 😉

TMUX die Screen Alternative

TMUX ist eine nette Alternative zu Screen, es unterstützt per Default das Teilen eines Fensters horizontal oder/und vertikal.

Installation von TMUX

#Für Ubuntu / Debian:
apt install tmux

#Für Fedora / RedHat / CentOS:
yum install tmux

Tastenkürzel (Hotkeys)

HotkeyBedeutung
CTRL-B ?Anzeiger aller Hotkeys
CTRL-B D(detatch) Trennen der aktuellen Sitzung
CTRL-B S(switch) Wechseln zwischen verschiedenen Sitzungen
CTRL-B C(create) Neues Fenster
CTRL-B &Beenden des Fensters
CTRL-B ,Umbennennen des Fensters
CTRL-B "Fenster horizonal Teilen
CTRL-B %Fenster vertikal Teilen
CTRL-B PfeiltastenWechseln zwischen den Panes (Fensterscheiben)
CTRL-B WListe aller Fenster anzeigen
CTRL-B [SPACE]Pane Größe ändern
CTRL-B L(last) Wechseln zum letzen Fenster, ist mit einem Minus markiert
CTRL-B Pvorheriges Fenster
CTRL-B Nnächstes Fenster
CTRL-B 1...Wechsel zu Fenster Nr.
CTRL-B !Pane Lösen und neues Fenster

per SSH direkt in tmux Sitzung starten

Praktisches Feature wenn man seine Sitzung nicht verlieren möchte bei einem Verbindungsabriss. Dazu muss die .bashrc des Users angepasst werden.

Einfach am Ende folgendes einfügen:

if [[ -z "$TMUX" ]] && [ "$SSH_CONNECTION" != "" ]; then
    tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux
fi

tmux Scripting

Man kann auch ganz Easy sich eigene Umgebungen scripten.

Hier ein angepasstes Beispiel von ubuntuusers.de (https://wiki.ubuntuusers.de/tmux/):

#!/bin/bash
SESSION=main
tmux="tmux -2"

# if the session is already running, just attach to it.
$tmux has-session -t $SESSION
if [ $? -eq 0 ]; then
       echo "Session $SESSION already exists. Attaching."
       sleep 1
       $tmux attach -t $SESSION
       exit 0;
fi
                                 
# create a new session, named $SESSION, and detach from it
$tmux new-session -d -s $SESSION
$tmux new-window    -t $SESSION:0 
$tmux rename-window    -t $SESSION:0 "Default SHELL"
$tmux split-window  -h -t $SESSION:0
$tmux new-window    -t $SESSION:1 "tail -f /var/log/syslog"
$tmux rename-window    -t $SESSION:1 "SYSLOG"
$tmux new-window    -t $SESSION:2 "top"
$tmux rename-window    -t $SESSION:2 "TOP"
$tmux new-window    -t $SESSION:3 "tail -f /var/log/mail.log"
$tmux rename-window    -t $SESSION:3 "MAILLOG"
$tmux split-window  -h -t $SESSION:3
$tmux new-window    -t $SESSION:4 "tail -f /omd/sites/dev1/var/log/cmc.log"
$tmux rename-window    -t $SESSION:4 "CMCLOG"
$tmux select-window -t $SESSION:0
$tmux attach -t $SESSION

 

 

Python: Oracle DB Modul für Python für CentOS6

Quelle: https://gist.github.com/hangtwenty/5547377

#!/bin/bash

# INSTALL ORACLE INSTANT CLIENT #
#################################

# NOTE: Oracle requires at least 1176 MB of swap (or something around there).
# If you are using CentOS in a VMWare VM, there's a good chance that you don't have enough by default.
# If this describes you and you need to add more swap, see the
# "Adding a Swap File to a CentOS System" section, here:
# http://www.techotopia.com/index.php/Adding_and_Managing_CentOS_Swap_Space

# Install basic dependencies
sudo yum -y install libaio bc flex

echo "Now go get some the following two RPMs ..."
echo "- basic: oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm"
echo "- SDK/devel: oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm"
echo "... from this URL: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html"
echo "WARNING: It's pretty annoying, they make you sign up for an Oracle account, etc."
echo 'I will assume you have put these two files are into ~/Downloads'
echo "Press any key once you're ready" && read -n 1 -s

sudo rpm -ivh ~/Downloads/oracle-instantclient11.2-basic-*
sudo rpm -ivh ~/Downloads/oracle-instantclient11.2-devel-*

# SET ENVIRONMENT VARIABLES #
#############################

# Source for this section: http://cx-oracle.sourceforge.net/BUILD.txt

# (SIDENOTE: I had to alter it by doing some digging around for where the Oracle RPMs really installed to;
# if you ever need to do this, do a command like this:
#     rpm -qlp <rpm_file_of_concern.rpm>)

echo '# Convoluted undocumented Oracle bullshit.' >> $HOME/.bashrc
echo 'export ORACLE_VERSION="11.2"' >> $HOME/.bashrc
echo 'export ORACLE_HOME="/usr/lib/oracle/$ORACLE_VERSION/client64/"' >> $HOME/.bashrc
echo 'export PATH=$PATH:"$ORACLE_HOME/bin"' >> $HOME/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$ORACLE_HOME/lib"' >> $HOME/.bashrc
. $HOME/.bashrc

# INSTALL cx_Oracle #
#####################

pip install cx_Oracle

Gute Anleitung zur Verwendung von cs_Oracle: http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html

Beispiel:

import cx_Oracle

# db helper named arrays
def rows_to_dict_list(cursor):
    columns = [i[0] for i in cursor.description]
    return [dict(zip(columns, row)) for row in cursor]

# Connect to DB
dsn_tns = cx_Oracle.makedsn("10.10.10.1",1521,"TESTDB")
db = cx_Oracle.connect("testuser","password",dsn_tns)
cursor = db.cursor()

# Get data from DB
cursor.execute("SELECT * FROM test_tab")
result = rows_to_dict_list(cursor)

# Insert to DB
cursor.execute('INSERT INTO test_tab (row1, row2, row2) VALUES ("xxx", "yyy", "zzz")')
db.commit()

# close db
db.close()

 

Ubuntu/Debian: Eigene Rootzertifikate importieren und vertrauen

Um Zertifikatsfehler bei eigenen CAs zu beseitigen muss man das Root CA Zertifikat dem Zertifikatsstore des Betriebssystems bekannt machen.

Das Root CA Zertifikat muss im Ordner /usr/share/ca-certificates abgelegt werden mit der Endung .crt (nicht .pem). Man sollte einen passenden und aussagekräfigen Namen für die Datei vergeben. Bei Ubuntu sind zusätzlich die Zertifikate in verschiedene Unterordner einsortiert. Wenn es mehrere sind kann man auch noch einen eigenen Ordner erstellen.

root@foobar:/usr/share/ca-certificates# ls -la
insgesamt 52
drwxr-xr-x  11 root root  4096 2011-07-29 12:29 .
drwxr-xr-x 101 root root  4096 2011-07-28 11:10 ..
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 brasil.gov.br
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 cacert.org
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 debconf.org
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 gouv.fr
drwxr-xr-x   2 root root 12288 2011-07-28 10:16 mozilla
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 signet.pl
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 spi-inc.org
drwxr-xr-x   2 root root  4096 2011-07-28 10:16 telesec.de

Nach dem Ablegen des Zertifikats muss man dieses noch installieren. Dazu ist das Kommando „dpkg-reconfigure ca-certificates“ auszuführen. Es öffnet sich ein Menü, hier ist sicherheitshalber „Fragen“ auszuwählen.

 ┌──────────────────────────────┤ ca-certificates configuration ├───────────────────────────────┐
 │ Dieses Paket kann neue Zertifikate von CAs (Zertifizierungsstellen) installieren, wenn ein   │
 │ Upgrade durchgeführt wird. Sie sollten solche neuen CA-Zertifikate vielleicht prüfen und     │
 │ nur Zertifikate auswählen, denen Sie vertrauen.                                              │
 │                                                                                              │
 │  - Ja    : neuen CA-Zertifikaten wird vertraut und sie werden installiert;                   │
 │  - Nein  : neue CA-Zertifikate werden standardmäßig nicht installiert;                       │
 │  - Fragen: fragt bei jedem neuen CA-Zertifikat nach.                                         │
 │                                                                                              │
 │ Neuen Zertifikaten von Zertifizierungsstellen vertrauen?                                     │
 │                                                                                              │
 │                                            Ja                                                │
 │                                            Nein                                              │
 │                                            Fragen                                            │
 │                                                                                              │
 │                                                                                              │
 │                                            <Ok>                                              │
 │                                                                                              │
 └──────────────────────────────────────────────────────────────────────────────────────────────┘

Im nächsten Screen muss das zu installierende Zertifikat markiert werden.

 

┌──────────────────────────────┤ ca-certificates configuration ├──────────────────────────────┐
│ Dieses Paket installiert gebräuchliche Zertifikate von CAs (Zertifizierungsstellen) unter   │
│ /usr/share/ca-certificates.                                                                 │
│                                                                                             │
│ Bitte wählen Sie die Zertifizierungsstellen aus, denen Sie vertrauen, damit deren           │
│ Zertifikate in /etc/ssl/certs installiert werden. Sie werden in eine einzige Datei          │
│ /etc/ssl/certs/ca-certificates.crt zusammengestellt.                                        │
│                                                                                             │
│ Zu aktivierende Zertifikate:                                                                │
│                                                                                             │
│    [*] brasil.gov.br/brasil.gov.br.crt                                                  ↑   │
│    [*] cacert.org/cacert.org.crt                                                        ▮   │
│    [*] debconf.org/ca.crt                                                               ▒   │
│    [*] gouv.fr/cert_igca_dsa.crt                                                        ▒   │
│    [*] gouv.fr/cert_igca_rsa.crt                                                        ▒   │
│    [ ] eigene-root-ca/root-ca.crt                                                       ▒   │
│    [*] mozilla/ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt                            ▒   │
│    [*] mozilla/AddTrust_External_Root.crt                                               ↓   │
│                                                                                             │
│                                                                                             │
│                                           <Ok>                                              │
│                                                                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

Das ganze mit OK bestätigen, das Zertifikat wird installiert.

Postfix: Mail-Relay mit SMTP-Auth via Submission/TLS für ausgehende Mails

Ein Server soll als Relayhost (oder in der Windowswelt auch Smarthost gennant) dienen. Wer keine feste IP Adresse mit passenden DNS Reverse Eintrag hat wird schlechte Chancen haben das ein richtig konfigurierter Mailserver die Mails annehmen wird. Die Lösung ist die Mails an einen anderen Relayhost oder Mailserver zu schicken und dieser stellt dann die Mails zu. Manchmal bieten die Provider selbst Relayhosts an in vielen Fällen bleibt nichts anderes übrig als das ganze über ein Postfach zu versenden. Einige Provider bieten das Anliefern von Mails nur noch über Submission (TCP/587) und TLS verschlüsselt an. Ist mir persönlich auch lieber …

Beispielszenario

Provider: example.net

Mailaccount: user1@example.net Password: example%1

Mailserver: mail.example.net

Submission (TCP/587) und TLS sind notwendig.

 Lösung

„/etc/postfix/main.cf“ ergänzen mit:

relayhost = mail.example.net:submission
smtp_use_tls=yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
smtp_sasl_security_options = noanonymous, noplaintext
smtp_sasl_tls_security_options = noanonymous

/etc/postfix/smtp_auth (Map-Datei, muss initialisiert werden!!!)

mail.example.net:submission               user1@example.net:example%1

Folgende Kommandos sind noch auszuführen:

postmap /etc/postfix/smtp_auth

durchführen um die Datei zu mappen.

/etc/init.d/postfix restart

durchführen um die Änderungen zu aktivieren.

Massenhafte Änderungen von Datei und Verzeichnis Rechten unter Linux

Ich habe gerade das Tool OpenTimeTool auf einem Server installiert. Im Paket sind alle Dateien und Verzeichnisse mit 777 Rechten vorhanden. Man sollte wenn die Kiste im Internet steht die Berechtungungen schon ein wenig restriktiver vergeben. Normalerweise haben Dateien auf einem Webserver eine 644 Maske und Verzeichnisse eine 755 Maske.

foo@bar:/var/www/bar/opentimetool/test# ls -la
insgesamt 2404
drwxr-xr-x  7 root   root      4096 2011-07-21 15:10 .
drwxr-xr-x  8 foo    foo       4096 2011-07-21 15:10 ..
-rwxrwxrwx  1 root   root      9513 2011-04-18 22:12 CHANGELOG
drwxrwxrwx  3 root   root      4096 2011-04-18 22:25 classes
-rwxrwxrwx  1 root   root      1371 2008-10-21 21:20 config-local.php.dist
-rwxrwxrwx  1 root   root      8179 2011-04-18 22:12 config.php
-rwxrwxrwx  1 root   root      3642 2011-01-05 00:10 db_upgrade.php
drwxrwxrwx  3 root   root      4096 2011-04-18 22:25 docs
drwxrwxrwx  9 root   root      4096 2011-04-18 22:25 htdocs
drwxrwxrwx 15 root   root      4096 2011-04-18 22:25 includes
-rwxrwxrwx  1 root   root      1546 2008-03-18 15:45 index.php
-rwxrwxrwx  1 root   root     22871 2011-01-05 00:10 init.php
-rwxrwxrwx  1 root   root      2983 2008-09-22 18:51 INSTALL
-rwxrwxrwx  1 root   root      2403 2008-09-22 18:51 INSTALL.de
-rwxrwxrwx  1 root   root     18009 2008-03-18 15:45 LICENSE
-rwxrwxrwx  1 root   root        17 2008-03-18 15:45 media
-rwxrwxrwx  1 root   root       856 2008-03-18 15:45 messages.php
-rwxrwxrwx  1 root   root       717 2008-10-21 21:20 mobile_access.README
drwxrwxrwx  2 root   root      4096 2011-04-18 22:25 mobile_login
-rwxrwxrwx  1 root   root     63312 2010-09-09 10:24 mysql.sql
-rw-r--r--  1 root   root   2201345 2011-04-27 22:02 openTimetool_2.3.1.tar.gz
-rwxrwxrwx  1 root   root       214 2008-03-18 15:45 phpinfo.php
-rwxrwxrwx  1 root   root       676 2008-03-18 15:45 README
-rwxrwxrwx  1 root   root       915 2008-03-18 15:45 SafeMode.README
-rwxrwxrwx  1 root   root       709 2008-03-24 21:18 Suhosin-README.txt
-rwxrwxrwx  1 root   root     10215 2008-03-18 15:45 TODO
-rwxrwxrwx  1 root   root     10761 2010-02-09 09:59 translate_de.sql
-rwxrwxrwx  1 root   root      9243 2010-02-09 09:59 translate_en.sql
-rwxrwxrwx  1 root   root       982 2010-02-09 09:59 update.README

Mit den Linuxboardmitteln kann man sich viel Arbeit sparen. Mit „find“ kann ich einen Parameter -type mitgeben wo ich entweder Dateien (f = Files) oder Verzeichnisse (d = Directory) als Ergebnis zurückgeben lassen kann. Mit dem Parameter -exec kann ich anschließend direkt ein Kommando ausführen und das gefundene als Parameter ({}) mitgeben.

find /var/www/bar/opentimetool/test -type f -exec chmod 644 {} \;
find /var/www/bar/opentimetool/test -type d -exec chmod 755 {} \;

Zuletzt sollte man noch den Benutzer und die Gruppe richtig setzen.

chown www-data:www-data -R /var/www/bar/opentimetool/test

Das Resultat sieht dann wie folgt aus:

foo@bar:/var/www/opentimetool/test# ls -la
insgesamt 2404
drwxr-xr-x  7 www-data www-data    4096 2011-07-21 15:10 .
drwxr-xr-x  8 foo      foo         4096 2011-07-21 15:10 ..
-rw-r--r--  1 www-data www-data    9513 2011-04-18 22:12 CHANGELOG
drwxr-xr-x  3 www-data www-data    4096 2011-04-18 22:25 classes
-rw-r--r--  1 www-data www-data    1371 2008-10-21 21:20 config-local.php.dist
-rw-r--r--  1 www-data www-data    8179 2011-04-18 22:12 config.php
-rw-r--r--  1 www-data www-data    3642 2011-01-05 00:10 db_upgrade.php
drwxr-xr-x  3 www-data www-data    4096 2011-04-18 22:25 docs
drwxr-xr-x  9 www-data www-data    4096 2011-04-18 22:25 htdocs
drwxr-xr-x 15 www-data www-data    4096 2011-04-18 22:25 includes
-rw-r--r--  1 www-data www-data    1546 2008-03-18 15:45 index.php
-rw-r--r--  1 www-data www-data   22871 2011-01-05 00:10 init.php
-rw-r--r--  1 www-data www-data    2983 2008-09-22 18:51 INSTALL
-rw-r--r--  1 www-data www-data    2403 2008-09-22 18:51 INSTALL.de
-rw-r--r--  1 www-data www-data   18009 2008-03-18 15:45 LICENSE
-rw-r--r--  1 www-data www-data      17 2008-03-18 15:45 media
-rw-r--r--  1 www-data www-data     856 2008-03-18 15:45 messages.php
-rw-r--r--  1 www-data www-data     717 2008-10-21 21:20 mobile_access.README
drwxr-xr-x  2 www-data www-data    4096 2011-04-18 22:25 mobile_login
-rw-r--r--  1 www-data www-data   63312 2010-09-09 10:24 mysql.sql
-rw-r--r--  1 www-data www-data 2201345 2011-04-27 22:02 openTimetool_2.3.1.tar.gz
-rw-r--r--  1 www-data www-data     214 2008-03-18 15:45 phpinfo.php
-rw-r--r--  1 www-data www-data     676 2008-03-18 15:45 README
-rw-r--r--  1 www-data www-data     915 2008-03-18 15:45 SafeMode.README
-rw-r--r--  1 www-data www-data     709 2008-03-24 21:18 Suhosin-README.txt
-rw-r--r--  1 www-data www-data   10215 2008-03-18 15:45 TODO
-rw-r--r--  1 www-data www-data   10761 2010-02-09 09:59 translate_de.sql
-rw-r--r--  1 www-data www-data    9243 2010-02-09 09:59 translate_en.sql
-rw-r--r--  1 www-data www-data     982 2010-02-09 09:59 update.README

socat: Pfiffiges Tool zum Mappen von IPv6 auf IPv4 Adressen

Wer gerade vor dem Problem steht alle Dienste auf seinen Linux Maschinen IPv4/IPv6 Dualstack fähig zu machen, der ist froh wenn er so ein Tool wie socat findet.

Es sind zwar die meisten Linux Dienste bereits Dualstack fähig aber es gibt vereinzelt noch Dienste wo keine regelmäßige bis keine Pflege der Software stattfindet.

socat ist quasi ein IPv6 -> IPv4 Relay. Das Paket ist im Packet Repository von Debian / Ubuntu verfügbar.

Beschreibung von socat aus der README des Pakets:

socat is a relay for bidirectional data transfer between two independent data
channels. Each of these data channels may be a file, pipe, device (serial line
etc. or a pseudo terminal), a socket (UNIX, IP4, IP6 - raw, UDP, TCP), an
SSL socket, proxy CONNECT connection, a file descriptor (stdin etc.), the GNU
line editor (readline), a program, or a combination of two of these.
These modes include generation of "listening" sockets, named pipes, and pseudo
terminals.

socat can be used, e.g., as TCP port forwarder (one-shot or daemon), as an
external socksifier, for attacking weak firewalls, as a shell interface to UNIX
sockets, IP6 relay, for redirecting TCP oriented programs to a serial line, to
logically connect serial lines on different computers, or to establish a
relatively secure environment (su and chroot) for running client or server
shell scripts with network connections.

Many options are available to refine socats behaviour:
terminal parameters, open() options, file permissions, file and process owners,
basic socket options like bind address, advanced socket options like IP source
routing, linger, TTL, TOS (type of service), or TCP performance tuning.

More capabilities, like daemon mode with forking, client address check,
"tail -f" mode, some stream data processing (line terminator conversion),
choosing sockets, pipes, or ptys for interprocess communication, debug and
trace options, logging to syslog, stderr or file, and last but not least
precise error messages make it a versatile tool for many different purposes.

In fact, many of these features already exist in specialized tools; but until
now, there does not seem to exists another tool that provides such a generic,
flexible, simple and almost comprehensive (UNIX) byte stream connector.

Das Tool kann noch wesentlich mehr, Infos findet man auf der Webseite des Programmierers http://www.dest-unreach.org/socat/.

Ich habe das für meinen alten SKS Keyserver verwendet, der noch kein IPv6 beherrscht. Ich lasse das ganze in einzelnen Screens laufen.

screen -dmS socat1 socat TCP6-LISTEN:11370,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11370
screen -dmS socat2 socat TCP6-LISTEN:11371,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11371
screen -dmS socat3 socat TCP6-LISTEN:80,ipv6only=1,reuseaddr,fork TCP4:1.2.3.4:11371

Damit das ganze auch noch einen Neustart überlebt kann man es noch in die /etc/rc.local vor dem „exit 0“ einfügen.

Seriennummer und Parameter aus Festplatte auslesen

Mit sdparm lassen sich alle Festplattenparameter auslesen.

 
apt-get install sdparm
 
root@server:~# sdparm /dev/sdb
   /dev/sdb: ATA       SAMSUNG HD502IJ   1AA0
Read write error recovery mode page:
  AWRE        1
  ARRE        0
  PER         0
Caching (SBC) mode page:
  WCE         1
  RCD         0
Control mode page:
  SWP         0

Seriennummer:

root@server:~# sdparm --inquiry /dev/sdb
    /dev/sdb: ATA       SAMSUNG HD502IJ   1AA0
Device identification VPD page:
  Addressed logical unit:
    designator type: vendor specific [0x0],  code set: ASCII
 00     53 31 33 54 4a 31 42 51  36 30 31 32 38 31 20 20    S13TJ1BQ601281
 10     20 20 20 20
    designator type: T10 vendor identification,  code set: ASCII
      vendor id: ATA
      vendor specific: SAMSUNG HD502IJ                         S13TJ1BQ601281                              

Caching Mode Seite:

root@server:~# sdparm --page=ca /dev/sdb
    /dev/sdb: ATA       SAMSUNG HD502IJ   1AA0
Caching (SBC) mode page:
  IC          0
  ABPF        0
  CAP         0
  DISC        0
  SIZE        0
  WCE         1
  MF          0
  RCD         0
  DRRP        0
  WRP         0
  DPTL        0
  MIPF        0
  MAPF        0
  MAPFC       0
  FSW         0
  LBCSS       0
  DRA         0
  NV_DIS      0
  NCS         0
  CSS         0

Export einer Liste installierter deb Pakete

Howto für Ubuntu und Debian

Um eine Liste mit Paketen auszugeben einfach

dpkg -l

ausführen.

Wenn man die Liste der installierten Pakete für eine Neuinstallation auf einem anderen System verwenden will funktioniert folgendes Kommando.

Nur Anzeigen
dpkg -l | awk '{print $2}' | sed ':a;N;$!ba;s/\n/ /g'
Direkt in eine Datei schrieben
dpkg -l | awk '{print $2}' | sed ':a;N;$!ba;s/\n/ /g' > /tmp/installed_debs

Achtung: Es sollten die gleichen Paketquellen verfügbar sein! /etc/apt/sources.list mitkopieren.

UUID der HDDs anzeigen

Mit

sudo blkid

können alle UUIDs im System angezeigt werden.

root@server:~# blkid
/dev/sda1: TYPE="swap" UUID="5798db50-d232-4877-835a-xxxxxxxxxxxxxx"
/dev/sda2: UUID="f655640c-a973-46b9-8038-86a711cxxxxx" TYPE="ext3"
/dev/sdb1: UUID="afc712ab-333d-4a11-ad48-703a94xxxxxx" TYPE="ext3"
/dev/sdc1: UUID="81161f94-0bdb-4220-a104-c25fasxxxxxx" TYPE="ext3"
/dev/sdd1: UUID="19959052-c0f5-47e6-9b5e-dd2c1fxxxxxx" TYPE="ext3"
/dev/sde1: UUID="5083e4ce-ef64-40b3-bc01-daf65bxxxxxx" TYPE="reiserfs"

http://wiki.ubuntuusers.de/fstab?highlight=fstab

.iso mount mit Gnome

Folgende Scripts müssen in den Ordner ~/.gnome2/nautilus-scripts

iso-mount.sh:

#!/bin/bash
# mount

gksudo -k /bin/echo "got r00t?"

BASENAME=`basename $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS .iso`

sudo mkdir "/media/$BASENAME"

zenity --info --title "ISO Mounter" --text "$BASENAME e $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"


if sudo mount -o loop -t iso9660 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS "/media/$BASENAME"
then
if zenity --question --title "ISO Mounter" --text "$BASENAME Successfully Mounted. Open Volume?"

then
nautilus /media/"$BASENAME" --no-desktop
fi

exit 0
else
sudo rmdir "/media/$BASENAME"

zenity --error --title "ISO Mounter" --text "Cannot mount $BASENAME!"

exit 1
fi

iso-unmount.sh:

#!/bin/bash
# unmount

gksudo -k /bin/echo "got r00t?"

BASENAME=`basename $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS .iso`

sudo umount "/media/$BASENAME"

sudo rmdir "/media/$BASENAME"

zenity --info --text "Successfully unmounted /media/$BASENAME"

exit 0

Beide Files müssen ausführbar sein. (chmod 700 iso-*.sh)

Jetzt lassen sich .iso Files in Gnome folgendermaßen starten.

File auswählen → Rechtsklick → „Skripte >“ auswählen → iso-mount.sh anklicken.

Gleiche Prozedur mit iso-unmount.sh für das Unmounten.

ISO Images werden unter /media/„Name der Datei“ eingebunden.

Pos1 und Ende auch mit PuTTY

Für Windows verwende ich PuTTY um auf meine Linuxmaschinen zu kommen. Bei manchen Rechnern funktionierte die Pos1 und Ende Taste nicht. Ich suchte erst die Schuld am Linuxsystem das der die Tastencodes nicht kennt, herausgestellt hat sich allerdings das PuTTY damit ein Problem hat.

Das Problem kann man lösen indem man bei der Verbindung unter Connection → Data den Wert Terminal-type string von xterm auf xterm-color ändert.