Debian tippek és trükkök

Innen: AdminWiki

Figyelem, ez a lap részben elavult, rendezetlen, stb... - én szóltam! :-)

Boot probléma

GRUB boot floppy

Innen származik: "A probléma: elszáll a bootloader, CD nincs és be kell indítani a rendszert egy boot floppy-val. Boot floppy nincs (miért is lenne :-), készíteni kell egyet. Szükséges egy olyan linuxos gép amelyben van floppy meghajtó és van rajta grub. A következőket kell csinálni:

  • leformázni a lemezt, DOS kompatibilis fájlrendszert létrehozni, lemezt felmountolni, helyet létrehozni, dolgokat felmásolni:
fdformat /dev/fd0
mkfs -t msdos /dev/fd0
mount -t msdos /dev/fd0 /media/floppy
mkdir -p /media/floppy/boot/grub
cp /boot/grub/* /media/floppy/boot/grub
  • esetleges módosításokat eszközölni a menüben (grafikus menü, jelszó kikapcsolása, stb.):
mcedit /media/floppy/boot/grub/menu.lst
  • lemezt lemountolni, a GRUB-ot rátelepíteni:
umount /media/floppy
grub
grub> root (fd0)
grub> setup (fd0)
grub> quit

Elkészült a boot lemez. Megtörténhet, hogy bootoláskor nem találja a kernelt vagy nem tudja felmountolni a fájlrendszert ilyenkor jön jól a grub nagy előnye a futás közbeni menüátszerkesztés, hát használjuk."

GRUB boot CD

A hivatalos manuálból származik, egy teljesen üres GRUB-ot indít el - hasznos lehet floppyt nem tartalmazó gépeknél. Mindössze egyetlen file-t kell rámásolni az El-Torito boot lemezképre:

mkdir iso
mkdir -p iso/boot/grub
cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub # Ubuntun itt van
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso iso

A megírt CD-ről bootolva a GRUB shelljébe jutunk.

GRUB telepítés (változtatás) GRSec alatt

A boot record írásához (grub-install) az alábbi PaX engedélyeket kell megadni a /usr/sbin/grub ELF-nek:

chpax -v /usr/sbin/grub

----[ chpax 0.7 : Current flags for /usr/sbin/grub (PeMRxS) ]----
 
 * Paging based PAGE_EXEC       : enabled (overridden)
 * Trampolines                  : not emulated
 * mprotect()                   : restricted
 * mmap() base                  : randomized
 * ET_EXEC base                 : not randomized
 * Segmentation based PAGE_EXEC : enabled

chpax -prs /usr/sbin/grub
chpax -v /usr/sbin/grub
 
----[ chpax 0.7 : Current flags for /usr/lib/j2sdk1.4-sun/bin/java (peMrxs) ]----
 
 * Paging based PAGE_EXEC       : disabled
 * Trampolines                  : not emulated
 * mprotect()                   : restricted
 * mmap() base                  : not randomized
 * ET_EXEC base                 : not randomized
 * Segmentation based PAGE_EXEC : disabled

TODO: utánanézni, kevesebb nem elég-e!

Lemezkezelés

Szétesett sw RAID helyreállítása

mdadm --detail /dev/mdX          # Megnézzük, melyik a faulty disk
mdadm /dev/mdX -r /dev/sdY       # Kivesszük a faulty disket a RAID-ből 
                                 # Megjavítjuk vagy cseréljük, vagy...
mdadm /dev/mdX --re-add /dev/sdY # Visszaadjuk a disket
watch cat /proc/mdstat           # Gúvadt szemmel nézzük, ahogy visszaszinkronizál :-)

Harmadik lemez hozzáadása RAID-1-hez

mdadm --grow /dev/md0 -n3      # Plusz egy lemez
mdadm /dev/mda --add /dev/sdc1 # Hozzáad és szinkronizál

A végeredmény egy hármas tükör lesz, ami egy lemez meghibásodása esetén is redundáns marad. Ez a felállás azért jobb a hagyományos spare disknél, mert így összeállításkor és nem meghibásodáskor kell szinkronizálni (ami nagy partíción órákig tarthat, és addig az egész lemezkezelés lelassul).

Kernel

Kifelejtettünk egy modult

Mondjuk, kifelejtettünk egy modult a kernelből, és valami nem megy. Reboot nélkül hozzáadhatjuk úgy, hogy az azonos verziójú(!) és újrafordított kernel csomag CONTENTS/lib/modules alól könyvtárhelyesen bemásoljuk a /lib/modules-be, utána:

depmod -ae
modprobe modulneve

Ha szerencsénk van :-), működik.

UDP conntrack timeout emelése

Elsősorban tömeges DNS lekérdezéskor előfordulhat, hogy a válasz kicsúszik az alapértelmezett 30 másodperces időhatárból. Ilyenkor hasznos lehet az ip_conntrack_udp_timeout emelése:

echo 60 >/proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout

illetve tartósan:

-r-------- root root /etc/sysctl.conf

[...]
# Increase UDP conntrack timeout (defaults to 30)
net/ipv4/netfilter/ip_conntrack_udp_timeout=60
[...]

Csalamádé

Ide kerül minden szívás, amiről nem volt érkezésünk rendes szócikket írni, de jobb, ha nem felejtjük el...

Hostnév és domain név megváltoztatása

Ezeket az adatokat számos program használja (pl. a kimenő levelek generálásakor, stb.).

Lekérdezés:

hostname; dnsdomainname

A hostnév megváltoztatása:

hostname uj_hostnev

A domain név megváltoztatásához a /etc/hosts-beli bejegyzést kell átírni.

Hiányzó nyilvános kulcsok beszerzése

A hivatalos Debian repository-khoz tartozó nyilvános kulcsokat az alaptelepítés tartalmazza. Testing változatban vagy 3rd party repositoryknál előfordulhat, hogy ez a kulcs megváltozik vagy ismeretlen, ilyenkor nem lehet használni a repokat (apt-get update a "nem elérhető a nyilvános kulcs az X azonosítóhoz" hibával leáll). Ez esetben kézzel kell beszerezni az up-to-date nyilvános kulcsot valamely keyserverről, és hozzáadni az apt keyring-hez:

gpg --keyserver subkeys.pgp.net --recv-keys KEYID # a hibaüzenetből véve
gpg --armor --export KEYID | apt-key add -

Ehhez a tűzfalon a tcp 11371 kifele legyen nyitva! Sikeres hozzáadás után már működik az update.

DAV mount Linuxon

Ez a két script megkönnyíti a webhelyek fileterületének fejlesztői elérését davfs használatával desktop Linuxon. Ubuntu 7-10 változaton tesztelve, davfs2 1.2.1 használatával. Sudo kell hozzá!

-rwx------ USER USER /home/USER/dav_mount.sh

#!/bin/bash
#
# Shell snippet to mount a davfs.
# kovacs.zoltan@ionlab.net 
# 
# v0.1 initial version 2007-12-05

MOUNT_BASE="$HOME/mnt/dav"
OPTIONS="noauto,noexec,nosuid,uid=$USERNAME,gid=$USERNAME,dir_mode=750,file_mode=640"
USAGE="Usage: $0 URL relative_mountpoint as root user."

# Need root
if [ $UID -ne 0 ]; then echo -e "$USAGE" >&2; exit 1; fi

# Get and check parameters
URL=$1; shift
MOUNT_REL=$1; shift
if [ -z "$URL" -o -z "$MOUNT_REL" ]; then
    echo -e "$USAGE" >&2
    exit 1
fi

# Mount via davfs
mount -t davfs -o "$OPTIONS" "$URL" "$MOUNT_BASE"/"$MOUNT_REL"
-rwx------ USER USER /home/USER/dav_umount.sh
#!/bin/bash
#
# Shell snippet to umount a davfs.
# kovacs.zoltan@ionlab.net 
#
# v0.1 initial version 2007-12-05

MOUNT_BASE="/$HOME/mnt/dav"
USAGE="Usage: $0 relative_mountpoint as root user."

# Need root
if [ $UID -ne 0 ]; then
    echo -e "$USAGE" >&2
    exit 1
fi

# Get and check parameters
MOUNT_REL=$1; shift
if [ -z "$MOUNT_REL" ]; then
    echo -e "$USAGE" >&2
    exit 1
fi

umount "$MOUNT_BASE"/"$MOUNT_REL"


SMTP teszt telnettel

Igen, ezer helyen le van írva, fejből is tudni kéne...

telnet SMTP-FQHN 25
HELO my-FQHN
MAIL FROM: felado@host
RCPT TO: cimzett@host
DATA
levélszöveg
.
QUIT

Exim4 beragadt levelek törlése

Ha sok van belőlük, és az egyenkénti manuális

exim4 -Mrm MESSAGE-ID MESSAGE-ID ...

sokáig tartana:

exim4 -bpru | awk {'print $3'} | xargs exim4 -Mrm

Exim logból egy user által küldött levelek kikeresése

Előfordul, hogy egy felhasználó reklamál: nem ment el a Nagyon Fontos Levél. Ilyenkor hasznos lehet az általa az adott napon küldött összes levél kikeresése. Az alábbi script feltételezi, hogy az SMTP a VExim-alapú levelező szervernél leírt beállításokkal megy, vagyis plain_courier_authdaemon authentikációval. A scriptet paraméter nélkül meghívva az összes felhasználó aznapi (aktuális mainlog-beli) aktivitását (a tőle hibaüzenet nélkül elvett levelek sorsát) kiírja.

-rwxr-x--- root staff /usr/local/sbin/smtp_userlog.sh

#!/bin/bash
# 
# Simple script to select user's SMTP activity from an (unzipped) Exim log.
# kovacs.zoltan@ionlab.net 2007-11-09
#
# Usage: $0 [user_id [ logfile_pathname ]]

EXIMLOG="/var/log/exim4/mainlog"        # Default Exim logfile
GREP="/bin/grep"                        # grep command call
SMTP_AUTH="plain_courier_authdaemon:"   # SMTP auth marker

userid=$1; shift                        # userid given
logfile=${1:-$EXIMLOG}; shift           # logfile pathname defaults to current

for id in `cat $logfile | grep $SMTP_AUTH$userid | cut -d ' ' -f 3`
do
    cat $logfile | grep $id 
done

A script kimenetében a levelekre vonatkozó bejegyzések levelenként időrendben, kigyűjtve szerepelnek.

Exim4 TLS "Base64 decoding" hiba

TLS error on connection from ... (DH params import): Base64 decoding error - ez egy bolond hibaüzenet, azt jelzi, hogy az Exim nem tudja olvasni vagy a certificate-jeit (/etc/exim4/exim.crt illetve /etc/exim4/exim.key) vagy a TLS paramétereket (/var/spool/exim4/gnutls-params) - ezek amúgy tényleg Base64 kódolásúak :-). Ha a tanusítvány hibás, azt újra kell generálni, ha a paraméterfile, azt egyszerűen le kell törölni (és exim restart).

Exim4 mint smarthost kliens titkosítatlan authentikációval

Akkor okozhat problémát, ha egy Debian gépről idegen SMTP smarthoston keresztül kell levelet küldeni. A legtöbb ISP authentikációt kér a smarthostoláshoz, viszont nem mindegyik engedélyezi a TLS-t (vagy SSL-t). Az Exim (kliensként) alapértelmezésben nem küld jelszavakat titkosítatlan kapcsolaton keresztül, így ilyen esetben ezt külön engedélyezni kell:

 -rw-r--r-- root root /etc/exim4/conf.d/main/99_exim4-config_custom_settings

# Custom settings - nor provided by maintainer,
# nor customizable by Debian automagic

[...]
AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = YES

A fenti beállítás az Exim konfiguráció frissítésével érvényesíthető:

/usr/sbin/update-exim4.conf; /etc/init.d/exim4 reload

Üres könyvtárak törlése

Hasznos parancs lehet:

perl -MFile::Find -e"finddepth(sub{rmdir},'.')" # Perl
find -depth -type d -empty -exec rmdir {} \;    # Bash

Hálókártya eszköznév beállítása (Etch, udev)

Volt szerencsém hálókártyát cserélni Etch-ben (azonos típus, násik példányra). Régebben ilyenkor reboot, az új kártya a régi helyén látszik (mondjuk eth0) és ment tovább minden. Az udev elterjedésével azonban minden hálókártya (is) külön betűt kap: az új kártya az eth-next (pl. eth1) lesz akkor is, ha a fejünk tetejére állunk  :-) . Ergo a /etc/network/interface bejegyzései, tűzfalszabályok, mifene érvénytelenek lesznek... Némi hajtépés után rájöttem, hogy a /etc/udev/rules.d/z25_persistent-net.rules állományban vannak a hozzárendelések - ezt módosítva helyreállt a rend.

Offtopic megjegyzés: Ubuntuban van egy /etc/iftab állomány lényegében ugyanerre.

Debian csomag újrafordítás speciális paraméterekkel

Itt olvasható.

Váratlan login problémák

-bash: /etc/profile: Permission denied
I have no name!@HOSTNAME:~$

Valószínűleg nem olvasható a /etc/ (0755 kell rá). A su ilyenkor azért megy, root-ként megjavítható.

Hibás saját configure script tud pl. ilyet csinálni, ha a /etc/$valami könyvtárra adna jogokat, de a $valami éppen üres...

IPv6 tiltása Squeeze alatt kernel paraméterrel

innen van:

-rw-r--r-- root root /etc/default/grub

[...]
GRUB_CMDLINE_LINUX="ipv6.disable=1"
[...]

Érvényesítés:

mount -o remount,rw /boot
update-grub
reboot

de jelenleg nem működik :-(

Shadow passwords utólagos engedélyezése

Ha telepítéskor nem engedélyeztük volna, root-ként futtassuk a pwconf-ot, utána adjuk ki a shadowconfig on parancsot, ezek után passwd, és jelszó megadása.