1 Install grml to harddisk:
5 Notice: You can pre-select the partition for the partition selector
6 and mbr dialogs inside grml2hd using:
7 # grml2hd /dev/hda1 -mbr /dev/hda
9 See: man grml2hd + http://grml.org/grml2hd/
11 Install grml on software RAID level 1:
13 Create /dev/md0 (and some more /dev/md* devices) first of all:
14 # cd /dev && MAKEDEV dev
17 # mdadm --create --verbose /dev/md0 --level=raid1 \
18 --raid-devices=2 /dev/hda1 /dev/hdc1
20 Finally install grml on it:
21 # SWRAID='mbr-only' grml2hd /dev/md0 -mbr /dev/md0
23 See: man grml2hd + http://grml.org/grml2hd/
25 Install grml in non interactive mode with grml2hd:
27 Adjust configuration as needed:
28 # vim /etc/grml2hd/config
32 # GRML2HD_NONINTERACTIVE=yes grml2hd
38 Use with care and only if you really know what you are doing!
40 See: man grml2hd + http://grml.org/grml2hd/
46 Boot grml via network:
50 See: man grml-terminalserver + http://grml.org/terminalserver/
52 Deactivate error correction of zsh:
56 Run zsh-help for more information regarding zsh.
58 Disable automatic setting of title in GNU screen:
62 Set it manually e.g. via:
64 % screen -X title foobar
66 Run zsh-help for more information regarding zsh.
68 Do not use menu completion in zsh:
72 Run zsh-help for more information regarding zsh.
74 Run GNU screen with grml-configuration:
80 % screen -c /etc/grml/screenrc
82 Print out grml-version:
90 Configure mutt-ng / muttng:
94 Set up Inode-PPTP connection:
98 # grml-pptp-xdsl-students
100 Set up VPN / WLAN connection at TUG (TU Graz):
102 Set ESSID and request for ip-address via DHCP:
103 # iwconfig $DEVICE essid tug
106 Now run the main script:
109 After running the script an init script is available:
111 # /etc/init.d/vpnctug [start|stop]
113 Set up PPTP connection at VCG (Virtual Campus Graz):
123 # grml-vpn -k 2005 add 1000 192.168.20.1 192.168.20.2
127 Use encrypted files / partitions:
129 # grml-crypt <options>
135 # grml-crypt format /mnt/external1/encrypted_file /mnt/test
136 # cp big_file /mnt/test
137 # grml-crypt stop /mnt/test
141 # grml-crypt start /mnt/external1/encrypted_file /mnt/test
142 # grml-crypt stop /mnt/test
146 Change resolution of X:
148 % xrandr -s '1024x768'
150 Change resolution of framebuffer:
154 Configure newsreader slrn:
158 Configure grml system:
162 Or directly run scripts:
167 Lock screen (X / console):
171 Press ctrl-alt-x to lock a GNU screen session.
173 Change wallpaper in X:
175 % grml-wallpaper <press-tab>
177 Start X window system (XFree86 / Xorg / X.org):
179 % grml-x $WINDOWMANAGER
184 % grml-x -mode '1024x768' wmii
185 % grml-x -nosync wm-ng
187 Collect hardware information:
191 or run as root to collect some more information:
195 will generate a file named info.tar.bz2.
197 Configure hardware detection features of harddisk installation:
201 or manually edit /etc/grml/autoconfig[.small]
203 See: man grml-autoconfig
205 Bootoptions / cheatcodes / bootparams for booting grml:
207 On the grml-ISO if not running grml:
208 % less /cdrom/GRML/grml-cheatcodes.txt
211 % most /usr/share/doc/grml-docs/grml-cheatcodes.txt.gz
213 Report bugs to Debian's Bug Tracking System (BTS):
215 % reportbug --bts debian
217 or adjust /etc/reportbug.conf to your needs.
221 http://grml.org/bugs/
222 http://www.debian.org/Bugs/
224 Offline documentation:
228 Online documentation:
231 http://grml.org/docs/
232 http://wiki.grml.org/doku.php
234 Mount ntfs partition (read-write):
237 # ntfsmount /dev/hda1 /mnt/hda1
239 Overwrite specific file on an NTFS partition:
241 ntfscp /dev/hda1 /tmp/file_source path/to/file_target
243 Resize an NTFS partition:
249 ntfsresize -n -s 10G /dev/hda1 # testcase
250 ntfsresize -s 10G /dev/hda1 # testing was successfull, now really resize partition
251 cfdisk /dev/hda # delete partition hda1, create new one with 10000MB and fs-type 07 (NTFS)
253 Modify resolution for intel graphic chipsets:
259 # 915resolution 4d 1400 1050
261 Connect bluetooth mouse:
265 ... and press 'connect' button on your bluetooth device.
267 Connect bluetooth headset:
271 ... and press 'connect' button on your bluetooth device.
273 Secure delete file / directory / partition:
279 Also take a look at shred(1), sfill(1) and http://dban.sourceforge.net/
281 Use grml on Samsung X20 laptop:
283 # apt-get install grml-samsung-x20
285 See: http://www.michael-prokop.at/computer/samsung_x20.html
287 Development information regarding grml:
289 http://grml.supersized.org/
293 #grml on irc.freenode.org - http://grml.org/irc/
294 http://grml.org/contact/
296 Join the grml mailinglist:
298 http://grml.org/mailinglist/
302 http://grml.org/donations/
304 Commercial support / system administration / adjusted live-cds:
306 grml-solutions: http://grml.org/solutions/
308 Information regarding the kernel provided by grml:
310 http://grml.org/kernel/
312 SMTP command-line test tool:
318 % swaks -s $MAILSERVER -tlsc -a -au $ACCOUNT -ap $PASSWORD -f $MAILADRESSE -t $MAILADRESSE
322 NTFS related packages:
328 Modify service through init script:
335 # /etc/init.d/lvm start
339 # jstest /dev/input/js0
343 % mplayer /path/to/movie
345 Use webcam with mplayer:
347 % mplayer tv:// -tv driver=v4l:width=352:height=288:outfmt=yv12:device=/dev/video0
349 Powerful network discovery tool:
353 Grab an entire CD and compress it to Ogg/Vorbis,
354 MP3, FLAC, Ogg/Speex and/or MPP/MP+(Musepack) format:
358 Show a console session in several terminals:
362 Switch behaviour of caps lock key:
366 grep with Perl-compatible regular expressions:
370 ncp: a fast file copy tool for LANs
375 Remote (receive file):
378 utility for sorting records in complex ways:
382 a smaller, cheaper, faster SED implementation:
390 See: http://grml.org/zsh/
392 zsh reference card for grml system:
395 /usr/share/doc/grml-docs/zsh/grml-zsh-refcard.pdf.gz
399 % for i in foo* ; do mv "$i" "bar${i/foo}" ; done
401 % prename 's/foo/bar/' foo*
403 % zmv 'foo(*)' 'bar$1'
405 Test TFT / LCD display:
413 Improved grep version:
417 Grep with highlighting:
419 % grep --color=auto ...
422 Extract matches when grepping:
425 % ifconfig | grepc 'inet addr:(.*?)\s'
426 % ifconfig | glark --extract-matches 'inet addr:(.*?)\s'
428 Output text as sound:
431 % xsay # when running X and text selected via mouse
433 Adjust a grml harddisk (grml2hd) installation:
437 Get information on movie files:
439 % tcprobe -i file.avi
441 Get an overview of your image files:
443 % convert 'vid:*.jpg' thumbnails.jpg
445 List all standard defines:
447 % gcc -dM -E - < /dev/null
449 Send a mail as reminder:
451 echo "mail -s 'check TODO-list' $MAILADDRESS < /dev/null" | at 23:42
453 ncurses-based presentation tool:
457 See: man tpp and /usr/share/doc/tpp/examples/
459 Use ICQ / Jabber / Yahoo! / AIM / MSN /... on command line:
463 Use IRC on command line:
469 % vimdiff file1 file2
475 Moving between diffs:
485 Hardware monitoring without kernel dependencies:
489 Install grml-iso to usb-stick:
491 % grml2usb grml.iso /mount/point
493 Use mplayer on framebuffer console:
495 % mplayer -vo fbdev ...
497 Use links2 on framebuffer console:
499 % links2 -driver fb ...
501 Switch language / keyboard:
503 * use the bootparam lang to set language environment ($LANG, $LC_ALL, $LANGUAGE)
504 * use the bootparams keyboard / xkeyboard to activate specific keyboard layout
505 Usage example: 'grml lang=us keyboard=de xkeyboard=de'
507 Or run one of the following commands:
511 # loadkeys i386/qwertz/de-latin1-nodeadkeys.kmap.gz # console
514 Switch setting of caps-control key (switch between ctrl + shift) on keyboard:
518 Mount usb device / usb stick:
520 % mount /mnt/external1 # corresponds to /dev/sda1
522 % mount /mnt/external # corresponds to /dev/sda
524 Install Sun Java packages:
526 Download j2re.bin-file from http://java.sun.com/downloads/index.html and run
528 # apt-get install java-package
529 # fakeroot make-jpkg j2re-*.bin
530 # dpkg -i sun-j2re*.deb
531 # update-alternatives --config java
535 ddrescue is an improved version of dd which tries to read and
536 if it fails it will go on with the next sectors, where tools
543 How to make an audio file (e.g. Musepack format) out of a DVD track:
545 % mkfifo /tmp/fifo.wav
546 % mppenc /tmp/fifo.wav track06.mpc &
547 % mplayer -vo null -vc null -ao pcm:fast:file=/tmp/fifo.wav -dvd-device /dev/dvd dvd://1 -chapter 6-6
549 Adjust the mppenc line with the encoder you would like to use,
550 for example 'oggenc -o track06.ogg /tmp/fifo.wav' for ogg files.
554 % mplayer -vo null -dumpaudio -dumpfile track06.raw -aid N -dvd-device /dev/dvd dvd://1 -chapter 6-6
555 to extract audio without processing, where 'N' is the corresponding audio channel (see 'man mplayer')
557 Usage example for getting a PCM/wave file from audio channel 128:
558 % mplayer -vo null -vc null -ao pcm:fast:file=track06.wav -aid 128 -dvd-device /dev/dvd dvd://6
560 Create simple chroot:
562 # make_chroot_jail $USERNAME
564 Convert DOS formated file to unix format:
566 sed 's/.$//' dosfile > unixfile # assumes that all lines end with CR/LF
567 sed 's/^M$//' dosfile > unixfile # in bash/tcsh, press Ctrl-V then Ctrl-M
568 sed 's/\x0D$//' dosfile > unixfile # gsed 3.02.80, but top script is easier
569 awk '{sub(/\r$/,"");print}' # assumes EACH line ends with Ctrl-M
570 gawk -v BINMODE="w" '1' infile >outfile # in DOS environment; cannot be done with
571 # DOS versions of awk, other than gawk
572 tr -d \r < dosfile > unixfile # GNU tr version 1.22 or higher
573 tr -d '\015' < dosfile > unixfile # use octal value for "\r" (see man ascii)
574 tr -d '[\015\032]' < dosfile > unixfile # sometimes ^Z is appended to DOS-files
575 vim -c ":set ff=unix" -c ":wq" file # convert using vim
576 vim -c "se ff=dos|x" file # ... and even shorter ;)
577 recode ibmpc..lat1 file # convert using recode
578 echo -e "s/\r//g" > dos2unix.sed; sed -f dos2unix.sed < dosfile > unixfile
580 Save live audio stream to file:
582 % mplayer -ao pcm:file=$FILE
586 % mencoder mms://file.wmv -o $FILE -ovc copy -oac copy
592 % avimerge -i *.avi -o blub.avi
596 % cat *.mpg > blub.mpg
600 % mencoder file1.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -mc 0 -noskip -forceidx -o file1.avi
601 % mencoder file2.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -mc 0 -noskip -forceidx -o file2.avi
602 % avimerge -i file1.avi file2.avi -o blub.avi
604 Display MS-Word file:
606 % strings file.doc | fmt | less
612 Convert MS-Word file to postscript:
614 % antiword -p a4 file.doc > file.ps
616 Convert manual to postscript:
618 % zcat /usr/share/man/man1/zsh.1.gz | groff -man > zsh.1.ps
620 % man -t zsh > zsh.ps
624 % dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
626 Read HTTP via netcat:
628 echo "GET / HTTP/1.0\r\n\r\n" | netcat $DOMAIN 80
630 Get X ressources for specific program:
632 % xrdb -q |grep -i xterm
634 Get windowid of specific X-window:
636 % xwininfo -int | grep "Window id:" | cut -d ' ' -f 4
638 Get titel of specific X-window:
642 check locale - LC_MESSAGES:
644 % locale -ck LC_MESSAGES
646 Create random password:
650 % dd if=/dev/urandom bs=14 count=1 | hexdump | cut -c 9-
652 Get tarballs of various Linux Kernel trees:
655 to get the current stable 2.6 release
658 to get a list of all supported trees
660 Transfer your SSH public key to another host:
662 % ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote-system
664 % cat $HOME/.ssh/id_rsa.pub | ssh user@remote-system 'cat >> .ssh/authorized_keys'
666 Update /etc/fstab entries:
670 See "man grml-rebuildfstab" for more details about
671 generation of /etc/fstab (including stuff like
672 fs LABELs / UUIDs,...).
674 Fetch and potentially change SCSI device parameters:
680 reclaim disk space by linking identical files together:
684 Find and remove duplicate files:
688 Perform layer 2 attacks:
694 Guess PC-type hard disk partitions / partition table:
698 Perform a standard scan:
701 Write back the guessed table:
702 # gpart -W /dev/ice /dev/ice
704 Develop, test and use exploit code with the Metasploit Framework:
707 wget http://www.metasploit.com/tools/framework-2.7-snapshot.tar.gz
708 unp framework-2.7-snapshot.tar.gz
712 Useful documentation:
714 % w3m /usr/share/doc/Debian/reference/reference.en.html
716 % xpdf =(zcat /usr/share/doc/Debian/reference/reference.en.pdf.gz)
718 http://grml.org/docs/ grml Documentation
719 http://wiki.grml.org/ grml Wiki
720 http://www.debian.org/doc/ Debian Documentation
721 http://wiki.debian.org/ Debian Wiki
722 http://www.gentoo.org/doc/en/ Gentoo Documentation
723 http://gentoo-wiki.com/ Gentoo Wiki
724 http://www.tldp.org/ The Linux Documentation Project
728 % fortune debian-hints
732 % fortune debian-hints
733 % dpkg -L funny-manpages
735 Backup master boot record (MBR):
737 # dd if=/dev/ice of=/tmp/backup_of_mbr bs=512 count=1
739 Backup partition table:
741 # sfdisk -d /dev/hda > hda.out
743 Restore partition table:
745 # sfdisk /dev/hda < hda.out
747 Clone disk via network using netcat:
750 # nc -vlp 30000 > hda1.img
752 # dd if=/dev/hda1 | nc -vq 0 192.168.1.2 30000
754 Adjust blocksize (dd's option bs=...) and include 'gzip -c'
757 # dd if=/dev/hda1 bs=32M | gzip -c | nc -vq 0 192.168.1.2 30000
759 Backup specific directories via cpio and ssh:
761 # for f in directory_list; do find $f >> backup.list done
762 # cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
766 This one uses CPU cycles on the remote server to compare the files:
767 # ssh target_address cat remotefile | diff - localfile
768 # cat localfile | ssh target_address diff - remotefile
770 This one uses CPU cycles on the local server to compare the files:
771 # ssh target_address cat <localfile "|" diff - remotefile
773 Useful tools for cloning / backups:
775 * dd: convert and copy a file
776 * dd_rescue: copies data from one file (or block device) to another
777 * pcopy: a replacement for dd
778 * partimage: back up and restore disk partitions
779 * dirvish: Disk based virtual image network backup system
780 * devclone: in-place filesystem conversion -- device cloning
781 * ntfsclone: efficiently clone, image, restore or rescue an NTFS
782 * dump: ext2/3 filesystem backup
783 * udpcast: multicast file transfer tool
784 * cpio: copy files to and from archives
785 * pax: read and write file archives and copy directory hierarchies
786 * netcat / ssh / tar / gzip / bzip2: additional helper tools
788 Use grml as a rescue system:
792 * dd: convert and copy a file
793 * ddrescue: copies data from one file or block device to another
794 * partimage: Linux/UNIX utility to save partitions in a compressed image file
795 * cfdisk: Partition a hard drive
796 * nparted: Newt and GNU Parted based disk partition table manipulator
797 * parted-bf: The GNU Parted disk partition resizing program, small version
798 * testdisk: Partition scanner and disk recovery tool
799 * gpart: Guess PC disk partition table, find lost partitions
803 * e2fsprogs: ext2 file system utilities and libraries
804 * e2tools: utilities for manipulating files in an ext2/ext3 filesystem
805 * e2undel: Undelete utility for the ext2 file system
806 * ext2resize: an ext2 filesystem resizer
807 * recover: Undelete files on ext2 partitions
811 * reiser4progs: administration utilities for the Reiser4 filesystem
812 * reiserfsprogs: User-level tools for ReiserFS filesystems
816 * xfsdump: Administrative utilities for the XFS filesystem
817 * xfsprogs: Utilities for managing the XFS filesystem
821 * jfsutils: utilities for managing the JFS filesystem
825 * ntfsprogs: tools for doing neat things in NTFS partitions from Linux
826 * salvage-ntfs: free NTFS data recovery tools
827 * scrounge-ntfs: data recovery program for NTFS file systems
828 * ntfsresize: resize ntfs partitions
830 Get ASCII value of a character with zsh:
832 % char=N ; print $((#char))
834 Convert a collection of mp3 files to wave or cdr using zsh:
836 % for i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}
838 Convert images (foo.gif to foo.png) using zsh:
840 % for i in **/*.gif; convert $i $i:r.png
842 Remove all "non txt" files using zsh:
846 Remote Shell Using SSH:
849 % ssh -NR 3333:localhost:22 user@yourhost
852 % ssh user@localhost -p 3333
854 Reverse Shell with Netcat:
857 % netcat -v -l -p 3333 -e /bin/sh
860 % netcat 192.168.0.1 3333
862 Reverse Shell via SSH:
864 local host (inside the network):
865 % ssh -NR 1234:localhost:22 remote_host
867 remote host (outside the network):
868 % ssh localhost -p 1234
870 Remove empty directories with zsh:
872 % rmdir ./**/*(/od) 2> /dev/null
874 Find all the empty directories in a tree with zsh:
878 Find all files without a valid owner and change ownership with zsh:
880 % chmod user /**/*(D^u:${(j.:u:.)${(f)"$(</etc/passwd)"}%%:*}:)
882 Display the 5-10 last modified files with zsh:
884 % print -rl -- /path/to/dir/**/*(D.om[5,10])
886 Find and list the ten newest files in directories and subdirs (recursive) with zsh:
888 % print -rl -- **/*(Dom[1,10])
890 Find most recent file in a directory with zsh:
892 % setopt dotglob ; print directory/**/*(om[1])
894 Tunnel all traffic through an external server:
896 % ssh -ND 3333 username@external.machine
898 Then set the SOCKS4/5 proxy to localhost:3333.
899 Check whether it's working by surfing e.g. to checkip.dyndns.org
901 Tunnel everything through SSH via tsocks:
903 set up the SSH proxy on the client side:
905 % ssh -ND 3333 user@remote.host.example.com
907 Adjust /etc/tsocks.conf afterwards (delete all other lines):
912 For programs who natively support proxying connections (e.g. Mozilla
913 Firefox) you can now set the proxy address to localhost port 3333.
915 All other programs which's connections you want to tunnel through your
916 external host are prefixed with tsocks, e.g.:
918 % tsocks netcat example.com 80
919 % tsocks irssi -c irc.quakenet.eu.org -p 6667
921 If you call tsocks without parameters it executes a shell witht the
922 LD_PRELOAD environment variable already set and exported.
924 smartctl - control and monitor utility for harddisks using Self-Monitoring,
925 Analysis and Reporting Technology (SMART):
927 # smartctl --all /dev/ice
929 If you want to use smartctl on S-ATA (sata) disks use:
931 # smartctl -d ata --all /dev/sda
934 # smartctl -t offline /dev/ice
937 # smartctl -t short /dev/ice
939 Display results of test:
940 # smartctl -l selftest /dev/ice
942 Query device information:
943 # smartctl -i /dev/ice
945 Mount a BSD / Solaris partition:
947 # mount -t ufs -o ufstype=ufs2 /dev/hda1 /mnt/hda1
949 Use ufstype 44bsd for FreeBSD, NetBSD, OpenBSD (read-write).
950 Use ufstype ufs2 for >= FreeBSD 5.x (read-only).
951 Use ufstype sun for SunOS (Solaris) (read-write).
952 Use ufstype sunx86 for SunOS for Intel (Solarisx86) (read-write).
954 See /usr/share/doc/linux-doc-$(uname -r)/Documentation/filesystems/ufs.txt.gz
957 Read BIOS (and or BIOS) password:
959 # dd if=/dev/mem bs=512 skip=2 count=1 | hexdump -C | head
961 Clone one of the kernel trees via git:
963 git clone rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
964 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
965 This path defines the tree. See http://kernel.org/git/ for an overview.
967 Mount filesystems over ssh protocol:
969 % sshfs user@host:/remote_dir /mnt/test
973 % fusermount -u /mnt/test
975 (Notice: requires fuse kernel module)
977 Install Gentoo using grml:
979 See http://www.gentoo.org/doc/en/altinstall.xml
981 Install (plain) Debian (sarge release) via grml:
983 Assuming you want to install Debian to sda1:
985 mkfs.ext3 /dev/sda1 # make an ext3 filesystem on /dev/sda1
986 mount -o rw,suid,dev /dev/sda1 /mnt/test # now mount the new partition
987 debootstrap sarge /mnt/test ftp://ftp.tugraz.at/mirror/debian # get main packages from a debian-mirror
988 chroot /mnt/test /bin/bash # let's chroot into the new system
989 mount -t devpts none /dev/pts # ...otherwise running base-config might fail ("Terminated" or "openpty failed")
990 mount -t proc none /proc # make sure we also have a mounted /proc
991 base-config # now configure some main settings
992 vi /etc/mkinitrd/mkinitrd.conf # adjust $ROOT (to /dev/sda1) for your new partition, autodetection will fail in chroot
993 cd /dev ; ./MAKEDEV generic # make sure we have all necessary devices for lilo
994 apt-get install lilo linux-image-2.6.12-1-386 # install lilo and a kernel which fits your needs
995 cp /usr/share/doc/lilo/examples/conf.sample /etc/lilo.conf # let's use a template
996 vi /etc/lilo.conf && lilo # adjust the file for your needs and run lilo afterwards
997 umount /proc ; umount /dev/pts # we do not need them any more
998 exit # now leave chroot
999 cp /etc/hosts /etc/fstab /mnt/test/etc/ # you might want to take the existing files...
1000 cp /etc/network/interfaces /mnt/test/etc/network/ # ...from the running grml system for your new system
1001 umount /mnt/test && reboot # unmount partition and reboot...
1003 See also: http://www.debian.org/releases/stable/i386/apcs04.html.en
1004 Avoid all of the above steps - use grml-debootstrap(8) instead!
1006 Install (plain) Debian (etch release) via grml
1008 Assuming you want to install Debian to sda1:
1010 mkfs.ext3 /dev/sda1 # make an ext3 filesystem on /dev/sda1
1011 mount -o rw,suid,dev /dev/sda1 /mnt/test # now mount the new partition
1012 debootstrap etch /mnt/test ftp://ftp.tugraz.at/mirror/debian # get main packages from a debian-mirror
1013 chroot /mnt/test /bin/bash # let's chroot into the new system
1014 mount -t proc none /proc # make sure we have a mounted /proc
1015 apt-get install locales console-data # install locales
1016 dpkg-reconfigure locales console-data # adjust locales to your needs
1017 apt-get install vim most zsh screen less initrd-tools file grub \
1018 usbutils pciutils bzip2 sysfsutils dhcp3-client resolvconf \
1019 strace lsof w3m # install useful software
1020 apt-get install linux-headers-2.6-686 linux-image-686 # install current kernel
1022 echo "127.0.0.1 localhost" > /etc/hosts # adjust /etc/hosts and network:
1023 cat >> /etc/network/interfaces << EOF
1024 iface lo inet loopback
1025 iface eth0 inet dhcp
1030 ln -sf /usr/share/zoneinfo/Europe/Vienna /etc/localtime # adjust timezone and /etc/fstab:
1031 cat >> /etc/fstab << EOF
1032 sysfs /sys sysfs auto 0 0
1033 proc /proc proc defaults 0 0
1034 /dev/sda1 / ext3 defaults,errors=remount-ro 0 1
1035 /dev/sda2 none swap sw 0 0
1036 /dev/cdrom /mnt/cdrom0 iso9660 ro,user,noauto 0 0
1038 passwd # set password of user root
1040 mkdir /boot/grub # setup grub
1041 cp /usr/share/doc/grub/examples/menu.lst /boot/grub
1042 cat >> /boot/grub/menu.lst << EOF
1043 title Debian Etch, kernel 2.6.18-3-686 (on /dev/sda1)
1045 kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/sda1 ro
1046 initrd /boot/initrd.img-2.6.18-3-686
1048 vim /boot/grub/menu.lst # adjust grub configuration to your needs
1049 cd /dev && MAKEDEV generic # create default devices
1050 cp -i /usr/lib/grub/i386-pc/* /boot/grub/ # copy stage-files to /boot/grub/
1051 grub install # now install grub, run in grub-cmdline following commands:
1055 umount -a # unmount all filesystems in chroot and finally:
1056 exit # exit the chroot and:
1059 If you want to use lilo instead of grub take a look at
1060 /usr/share/doc/lilo/examples/conf.sample or use the following template:
1062 cat > /etc/lilo.conf << EOF
1063 # This allows booting from any partition on disks with more than 1024 cylinders.
1066 # Specifies the boot device
1069 # Specifies the device that should be mounted as root.
1072 # use Debian on software raid:
1073 # raid-extra-boot=mbr-only
1081 image=/boot/vmlinuz-2.6.18-grml
1085 initrd=/boot/initrd.img-2.6.18-grml
1088 See also: http://www.debian.org/releases/stable/i386/apcs04.html.en
1089 Avoid all of the above steps - use grml-debootstrap(8) instead!
1091 Convert files from Unicode / UTF to ISO:
1093 % iconv -f utf8 -t iso-8859-15 < utffile > isofile
1097 % iconv -f iso-8859-15 -t utf8 < isofile > utffile
1099 Assign static setup for network cards (eth0 and eth1) via udev:
1101 First method - manual:
1102 ~~~~~~~~~~~~~~~~~~~~~~
1103 Get information for SYSFS address:
1104 # udevinfo -a -p /sys/class/net/eth0/ | grep address
1106 Then create udev rules:
1107 # cat /etc/udev/network.rules
1109 KERNEL=="eth*", SYSFS{address}=="00:00:00:00:00:01", NAME="wlan0"
1110 KERNEL=="eth*", SYSFS{address}=="00:00:00:00:00:02", NAME="lan0"
1111 # do not match eth* drivers but also e.g. firewire stuff:
1112 ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:00:00:00:00:03", NAME="1394"
1114 Now activate the rules:
1115 # cd /etc/udev/rules.d/ && ln -s ../network.rules z35_network.rules
1117 Unload the drivers, restart udev and load the drivers again to activate
1120 Second method - automatic:
1121 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1122 Run /lib/udev/write_net_rules shipped with recent udev versions:
1124 # INTERFACE=wlan1 /lib/udev/write_net_rules 00:00:00:00:00:04
1126 This command will create /etc/udev/rules.d/z25_persistent-net.rules containing:
1128 SUBSYSTEM=="net", DRIVER=="?*", SYSFS{address}=="00:00:00:00:00:04", NAME=wlan1
1130 See /usr/share/doc/udev/writing_udev_rules/index.html for more information.
1132 Change the suffix from *.sh to *.pl using zsh:
1135 % zmv -W '*.sh' '*.pl'
1137 Generate SSL certificate:
1139 Create self signed certificate (adjust /etc/ssl/openssl.cnf if necessary):
1140 # openssl req -x509 -newkey rsa:1024 -keyout keyfile -out certfile -days 9999 -nodes
1143 # openssl x509 -in certfile -text
1145 Verify against CA certificate:
1146 # openssl verify -CAfile cacert.crt -verbose -purpose sslserver
1148 Generate 2048bit RSA-key:
1149 # openssl req -new -x509 -keyout pub-sec-key.pem -out pub-sec-key.pem -days 365 -nodes
1151 As before but add request to existing key pub-sec-key.pem:
1152 # openssl req -new -out request.pem -keyin pub-sec-key.pem
1154 Show request request.pem:
1155 # openssl req -text -noout -in request.pem
1157 Verify signature of request request.pem:
1158 # openssl req -verify -noout -in request.pem
1160 Generate SHA1 fingerprint (modulo key) of request.pem:
1161 # openssl req -noout -modulus -in request.pem | openssl sha1 -c
1163 Generate 2048bit RSA-key and put it to pub-sec-key.pem. Save self signed certificate in self-signed-certificate.pem:
1164 # openssl req -x509 -days 365 -newkey rsa:2048 -out self-signed-certificate.pem -keyout pub-sec-key.pem
1166 As before but create self signed certificate based on existing key pub-sec-key.pem:
1167 # openssl req -x509 -days 365 -new -out self-signed-certificate.pem -key pub-sec-key.pem
1169 Generate new request out of existing self signed certificate:
1170 # openssl x509 -x509toreq -in self-signed-certificate.pem -signkey pub-sec-key.pem -out request.pem
1172 Display certificate self-signed-certificate.pem in plaintext:
1173 # openssl x509 -text -noout -md5 -in self-signed-certificate.pem
1175 Check self signed certificate:
1176 # openssl verify -issuer_checks -CAfile self-signed-certificate.pem self-signed-certificate.pem
1178 Estable OpenSSL-connection using self-signed-certificate.pem and display certificate:
1179 # openssl s_client -showcerts -CAfile self-signed-certificate.pem -connect www.example.com:443
1181 Generate ssl-certificate for use with apache2:
1183 export RANDFILE=/dev/random
1184 mkdir /etc/apache2/ssl/
1185 openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
1186 chmod 600 /etc/apache2/ssl/apache.pem
1188 Also take a look at make-ssl-cert (debconf wrapper for openssl):
1190 # /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/apache.pem
1192 and mod-ssl-makecert (utility to create SSL certificates in /etc/apache/ssl.*/).
1194 Change Windows NT password(s):
1196 # mount -o rw /mnt/hda1
1197 # cd /mnt/hda1/WINDOWS/system32/config/
1198 # chntpw SAM SECURITY system
1200 Notice: if mounting the partition read-write did not work (check syslog!)
1201 try using mount.ntfs-3g instead: mount.ntfs-3g /dev/hda1 /mnt/hda1
1203 (Be careful with deactivating syskey!)
1205 glark - replacement for grep written in Ruby:
1207 A replacement for (or supplement to) the grep family, glark offers:
1208 Perl compatible regular expressions, highlighting of matches,
1209 context around matches, complex expressions and automatic exclusion
1214 % glark -y keyword file # display only the region that matched, not the entire line
1215 % glark -o format print *.h # search for either "printf" or "format"
1217 More information: man glark
1219 Find CD burning device(s):
1221 General information on CD-ROM:
1222 % cat /proc/sys/dev/cdrom/info
1224 Scan using ATA Packet specific SCSI transport:
1225 # cdrecord -dev=ATA -scanbus
1226 # cdrecord-prodvd -s -scanbus dev=ATA
1228 Get specific information for /dev/ice:
1229 # cdrecord dev=/dev/ice -scanbus
1231 Create devices in /dev on udev:
1233 For example create md devices (/dev/md0, /dev/md1,...):
1234 # cd /dev ; WRITE_ON_UDEV=1 ./MAKEDEV md
1236 Identify network device (NIC):
1238 # ethtool -i $DEVICE
1240 Show NIC statistics:
1242 # ethtool -S $DEVICE
1244 If your NIC shows some aging signs, you may want to be sure:
1246 # ethtool -t $DEVICE
1248 Disable TCP/UDP checksums:
1250 # ethtool -K $DEVICE tx off
1252 grml2hd seems to hang? Getting Squashfs errors? Problems while booting?
1254 Switch to tty12 and take a look at the syslog. If you see something like:
1256 SQUASHFS error: zlib_fs returned unexpected result 0x........
1257 SQUASHFS error: Unable to read cache block [.....]
1258 SQUASHFS error: Unable to read inode [.....]
1260 your ISO/CD-ROM very probably is not ok. Verify it via booting with grml testcd.
1261 Check your CD low-level via running:
1263 # readcd -c2scan dev=/dev/cdrom
1265 If the medium really is ok and it still fails try to boot with deactivated DMA
1266 via using grml nodma at the bootprompt.
1268 Write a Microsoft compatible boot record (MBR) using ms-sys
1270 Write a Windows 2000/XP/2003 MBR to device:
1272 # ms-sys -m /dev/ice
1274 Use a Vodafone 3G Datacard (UMTS) with Linux:
1276 Plug in your vodafone card and check in syslog whether the appropriate
1277 (probably /dev/ttyUSB0 or /dev/noz0 when using newer vodafone cards) has
1278 been created. If so run:
1281 # wvdial --config /etc/wvdial.conf.umts $PROFILE
1284 # gcom -d /dev/ttyUSB0
1285 # wvdial --config /etc/wvdial.conf.umts a1usb
1288 # wvdial --config /etc/wvdial.conf.umts tmnozomi
1291 # wvdial --config /etc/wvdial.conf.umts dreiusb
1293 Notice: newer vodafone cards require the nozomi driver. Run 'modprobe nozomi' on
1296 hdparm - get/set hard disk parameters
1298 Display the identification info that was obtained from the drive at boot time,
1300 # hpdarm -i /dev/ice
1302 Request identification info directly from the drive:
1303 # hpdarm -I /dev/ice
1305 Perform timings of device + cache reads for benchmark and comparison purposes:
1306 # hdparm -tT /dev/ice
1308 bonnie++ - program to test hard drive performance.
1310 # mkdir /mnt/benchmark
1311 # mount /dev/ice /mnt/benchmark
1312 # chmod go+w /mnt/benchmark
1313 # bonnie -u grml -d /mnt/benchmark -s 2000M
1315 Use gizmo with a bluetooth headset:
1317 % DEVICE="/dev/dsp$(awk '/- BT Headset/ {print $1}' /proc/asound/cards)"
1318 % gizmo --mic $DEVICE --speaker $DEVICE
1320 Scan a v4l device for TV stations:
1322 % scantv -c /dev/video0 -C /dev/vbi0 -o ~/.xawtv
1324 Then running xawtv should work:
1328 Run apt-get with timeout of 3 seconds:
1330 # apt-get -o acquire::http::timeout=3 update
1332 Debian GNU/Linux device driver check page
1334 % $BROWSER http://kmuto.jp/debian/hcl/index.cgi
1336 Use dd with status line:
1338 # dd if=/dev/ice conv=noerror,notrunc,sync | buffer -S 100k | dd of=/tmp/file
1340 Generate a 512k file of random data with status bar:
1342 % dd if=/dev/random bs=1024 count=512 | bar -s 512k -of ./random
1344 Install Grub instead of lilo on grml installation (grml2hd):
1349 adjust grub's configuration file menu.lst:
1350 # $EDITOR /boot/grub/menu.lst
1352 now install grub (usage example for /dev/sda1):
1357 Install Ubuntu using grml:
1359 See https://wiki.ubuntu.com/Installation/FromKnoppix
1361 Resize ext2 / ext3 partition:
1363 # tune2fs -O '^has_journal' /dev/iceX # disable journaling
1364 # fsck.ext2 -v -y -f /dev/iceX # check the filesystem
1365 # resize2fs -p /dev/iceX $SIZE # resize it (adjust $SIZE)
1366 # fdisk /dev/ice # adjust partition in partition table
1367 # fsck.ext2 -v -y -f /dev/iceX # check filesystem again
1368 # resize2fs -p /dev/iceX # resize it to maximum
1369 # tune2fs -j /dev/iceX # re-enable journal
1371 Tune ext2 / ext3 filesystem:
1373 Check partition first:
1375 # tune2fs -l /dev/iceX
1377 If you don't see dir_index in the list, then enable it:
1379 # tune2fs -O dir_index /dev/iceX
1381 Now run e2fsck with the -D option to have the directories optimized:
1383 # e2fsck -D /dev/iceX
1385 Notice: since e2fsprogs (1.39-1) filesystems are created with
1386 directory indexing and on-line resizing enabled by default.
1388 Search for printers via network:
1390 # pconf_detect -m NETWORK -i 192.168.0.1/24
1392 Mount a remote directory via webdav (e.g. Mediacenter of GMX):
1394 # mount -t davfs https://mediacenter.gmx.net/ /mnt/test
1396 System-Profiling using oprofile:
1401 # opcontrol --setup --no-vmlinux --event=CPU_CLK_UNHALTED:500000:0:1:1 --separate=library
1406 Now $DO_SOME_TASKS...
1409 # opcontrol --shutdown
1411 Then take a look at the reports using something like e.g.:
1412 # opreport -t 0.5 --exclude-dependent
1413 # opreport -t 0.5 /path/to/executable_to_check
1414 # opannotate -t 0.5 --source --assembly
1416 Install ATI's fglrx driver for Xorg / X.org:
1418 Usually there already exist drivers for the grml-system:
1419 # apt-get update ; apt-get install fglrx-driver fglrx-kernel-`uname -r`
1421 After installing adjust xorg.conf via running:
1422 # aticonfig --initial --input=/etc/X11/xorg.conf
1424 For more information take a look at http://wiki.grml.org/doku.php?id=ati
1426 Install nvidia driver for Xorg / X.org:
1428 Usually there already exist drivers for the grml-system:
1429 # apt-get update ; apt-get install nvidia-glx nvidia-kernel-`uname -r`
1431 Then switch from module nv to nvidia:
1433 # sed -i 's/Driver.*nv.*/Driver "nvidia"/' /etc/X11/xorg.conf
1435 glxgears - a GLX demo that draws three rotating gears
1437 To print frames per second (fps) use:
1438 % glxgears -printfps
1440 You forgot to boot with 'grml noeject noprompt' to avoid
1441 ejecting and prompting for CD removal when rebooting/halting
1452 If you want to avoid only the prompting part, run:
1460 Mount wikipedia local via fuse:
1462 Adjust configuration:
1463 % cat ~/.wikipediafs/config.xml
1466 <article-cache-time>300</article-cache-time>
1470 <dirname>wikipedia-de</dirname>
1471 <host>de.wikipedia.org</host>
1472 <basename>/w/index.php</basename>
1475 <dirname>wikipedia-en</dirname>
1476 <host>en.wikipedia.org</host>
1477 <basename>/w/index.php</basename>
1482 Mount it (/wiki must exist of course):
1483 % mount.wikipediafs /wiki
1484 % cat /wiki/wikipedia-en/Cat
1487 % fusermount -u /wiki
1489 Remote notification on X via osd (on screen display):
1491 Start osd_server.py at your local host (listens on port 1234 by default):
1494 Then login to a $REMOTEHOST
1495 % ssh -R 1234:localhost:1234 $REMOTEHOST
1497 Now send the text to your local display via running something like:
1498 % echo "text to send" | nc localhost 1234
1500 Very useful when you are waiting for a long running job
1501 but want to do something else in the meanwhile:
1503 % ./configure && make && echo "finished compiling" | netcat localhost 1234
1505 You can use this in external programs as well of course. Examples:
1507 Use osd in centericq:
1509 % cat ~/.centericq/external
1518 if [ -x /usr/bin/socat -a -x /bin/netcat ] ; then
1519 CONTACT_CUSTOM_NICK=$(cat ${CONTACT_INFODIR}/info | head -n 46 | tail -n 1)
1520 osd_msg="*** CenterICQ: new ${EVENT_NETWORK} ${EVENT_TYPE} from ${CONTACT_CUSTOM_NICK} ***"
1521 if echo | socat - TCP4:localhost:1234 &>/dev/null ; then
1522 echo "${osd_msg}" | netcat localhost 1234
1526 Use it in the IRC console client irssi via running:
1530 You can even activate the port forwarding by default globally:
1535 RemoteForward 1234 127.0.0.1:1234
1538 Notice: if you get 'ABORT: Requested font not found' make sure the
1539 requested font is available, running 'LANG=C LC_ALL=C osd_server.py...'
1542 Avoid automatical startup of init scripts via invoke-rc.d:
1544 First of all make sure the package policyrcd-script-zg2 (which
1545 provides the /usr/sbin/policy-rc.d interface) is installed.
1547 In policyrcd-script-zg2's configuration file named
1548 /etc/zg-policy-rc.d.conf the script /usr/sbin/grml-policy-rc.d is
1549 defined as the interface for handling invoke-rc.d's startup policy.
1551 grml-policy-rc.d can be configure via /etc/policy-rc.d.conf. By
1552 default you won't notice any differences to Debian's default
1553 behaviour, except that invoke-rc.d won't be executed if a chroot has
1554 been detected (detection: /proc is missing).
1556 If you want to disable automatical startup of newly installed packages
1557 (done via the invoke-rc.d mechanism) just set EXITSTATUS to '101' in
1558 /etc/policy-rc.d.conf.
1560 To restore the default behaviour set EXITSTATUS back to '0' in
1561 /etc/policy-rc.d.conf.
1563 Install VMware-Tools for grml:
1565 First of all make sure a CD-ROM device in VMware is available.
1567 Mount the CD-ROM device to /mnt/cdrom, then unpack and install
1571 unp /mnt/cdrom/vmware-linux-tools.tar.gz
1572 cd vmware-tools-distrib
1575 /etc/init.d/networking stop
1580 /etc/init.d/networking start
1582 In an X terminal, launch the VMware Tools running:
1586 Some important Postfix stuff
1594 Send all messages in the queue:
1598 Send all messages in the queue for a specific site:
1602 Delete a specific message
1603 # postsuper -d 12345678942
1605 Deletes all messages held in the queue for later delivery
1606 # postsuper -d ALL deferred
1608 Mail queues in postfix:
1610 incoming -> mail who just entered the system
1611 active -> mail to be delivered
1612 deferred -> mail to be delivered later because there were problems
1613 hold -> mail that should not be delivered until released from hold
1615 For configuration of postfix take a look at
1616 /etc/postfix/master.cf - man 5 master
1617 /etc/postfix/main.cf - man 5 postconf
1618 and http://www.postfix.org/documentation.html.
1622 mode 4000 - set user ID (suid):
1624 - for executable files: run as the user who owns the file, instead of the
1625 user who runs the file
1626 - for directories: not used
1628 mode 2000 - set group ID (guid):
1630 - for executable files: run as the group who owns the file, instead of the
1631 group of the user who runs the file
1632 - for directories: when a file is created inside the directory, it belongs
1633 to the group of the directory instead of the default group of the user who
1636 mode 1000 - sticky bit:
1638 - for files: not used
1639 - for directories: only the owner of a file can delete or rename the file
1641 Create MySQL database
1643 # apt-get install mysql-client mysql-server
1645 Run 'mysql' as root - create a database with:
1647 create database grml
1649 Give a user access to the database (without password):
1651 grant all on grml.* to mika;
1653 Give a user access to the database (with password):
1655 grant all on grml.* to enrico identified by "PASSWORD";
1657 Setup an HTTPS website:
1659 Create a certificate:
1661 # mkdir /etc/apache2/ssl
1662 # make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
1664 Create a virtual host on port 443:
1666 <VirtualHost www.foo.invalid:443>
1670 Enable SSL in the VirtualHost:
1673 SSLCertificateFile /etc/apache2/ssl/apache.pem
1675 Enable listening on the HTTPS port (/etc/apache2/ports.conf):
1679 and make sure the SSL module is used:
1683 Useful Apache / Apache2 stuff
1685 Check configuration file via running:
1687 # apache2ctl configtest
1695 # a2enmod modulename
1697 Create tar archive and store it on remote machine:
1699 % tar zcf - /sourcedir | ssh user@targethost "cat >file.tgz"
1701 Pick out and displays images from network traffic:
1705 Install Flash plugin:
1707 # dpkg-reconfigure flashplugin-nonfree
1709 To test a proxy, low level way:
1713 GET http://www.google.com HTTP/1.0 [press enter twice]
1715 Adjust system for use of qemu with kqemu:
1717 Make sure you have all you need:
1718 # apt-get update ; apt-get install qemu grml-kerneladdons-$KERNELVERSION
1723 mknod /dev/kqemu c 250 0
1724 chmod 666 /dev/kqemu
1725 chmod 666 /dev/net/tun
1727 Check kqemu support via starting qemu, press
1728 Ctrl-Alt-2 and entering 'info kqemu'.
1730 (High-Load) Debugging related tools:
1732 mpstat # report processors related statistics
1733 iostat # report CPU statistics and input/output statistics for devices and partitions
1734 vmstat # report virtual memory statistics
1735 slabtop # display kernel slab cache information in real time
1736 atsar # system activity report
1737 dstat # versatile tool for generating system resource statistics
1748 Using WPA for network setup manually:
1750 # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
1752 Adjust the options and configuration file to your needs.
1753 Also take a look at 'grml-network'.
1755 Start X and lock console via exiting:
1757 % startx 2>~/.xsession-errors &| exit
1759 Which process is writing to disk?
1761 # echo 1 > /proc/sys/vm/block_dump
1763 Warning: you must disable syslogd before you do this, or you must
1764 make sure that kernel output is not logged.
1766 When you're done, disable block dump using:
1767 # echo 0 > /proc/sys/vm/block_dump
1770 laptop-mode-tools provides a tool named lm-profiler (laptop mode profiler)
1771 which handles block_dump on its own.
1773 Install initrd via initramfs-tools for currently running kernel:
1775 # update-initramfs -c -t -k $(uname -r)
1777 Install initrd via yaird for currently running kernel:
1779 # yaird -o /boot/initrd.img-$(uname -r)
1781 Install initrd via yaird for specific kernel:
1785 # yaird -o /boot/initrd.img-2.6.15-1-686 2.6.15-1-686
1787 Reinstall package with its original configuration files:
1789 # apt-get install --reinstall -o DPkg::Options::=--force-confmiss -o \
1790 DPkg::Options::=--force-confnew package
1792 grml 0.8 funkenzutzler - rt2x00 drivers:
1794 To avoid conflicts with the other rt2x00-drivers the package rt2x00 (which
1795 includes beta-version drivers) is not installed by default. If you want to
1796 use the kernel modules rt2400pci, rt2500pci, rt2500usb, rt61pci and/or
1797 rt73usb please install the package manually running:
1799 # dpkg -i /usr/src/rt2x00-modules-*.deb
1801 Use Java with jikes and jamvm on grml:
1805 % cp /usr/share/doc/grml-templates/template.java .
1806 % jikes template.java
1809 Notice that grml exports $JIKESPATH (/usr/share/classpath/glibj.zip),
1810 so you do not have to manually run
1811 jikes --bootclasspath /usr/share/classpath/glibj.zip
1813 Online resizing of (Software-)RAID5:
1815 # Initiate a RAID5 setup for testing purposes:
1816 mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/hda1 /dev/hdb1 /dev/hdd1
1818 # Create filesystem, mount md0, create a testfile and save md5sum for
1821 mount /dev/md0 /mnt/test
1822 dd if=/dev/urandom of=/mnt/test/dd bs=512 count=10000
1823 md5sum /mnt/test/dd > md5sum
1825 # Make sure the RAID is synched via checking:
1828 # Now remove one partition:
1829 mdadm /dev/md0 --fail /dev/hdd1 --remove /dev/hdd1
1831 # Delete partition, create a new + bigger one and set partition type to fd
1832 # (Linux raid autodetect):
1835 # And re-add the partition:
1836 mdadm -a /dev/md0 /dev/hdd1
1838 # Make sure the RAID is synched via checking:
1841 # Repeat the steps for all other disks/partitions as well:
1842 mdadm /dev/md0 --fail /dev/hdb1 --remove /dev/hdb1
1844 mdadm -a /dev/md0 /dev/hdb1
1846 mdadm /dev/md0 --fail /dev/hda1 --remove /dev/hda1
1848 mdadm -a /dev/md0 /dev/hda1
1851 # Now resize the RAID5 system online [see 'man mdadm' for details]:
1852 mdadm --detail /dev/md0 | grep -e 'Array Size' -e 'Device Size'
1853 mdadm --grow /dev/md0 -z max
1854 mdadm --detail /dev/md0 | grep -e "Array Size" -e 'Device Size'
1856 # Last step - resize the filesystem (online again):
1859 ext3 online resizing:
1861 Starting with Linux kernel 2.6.10 you can resize ext3 online. With
1862 e2fsprogs >=1.39-1 new filesystems are created with directory indexing and
1863 on-line resizing enabled by default (see /etc/mke2fs.conf).
1867 cfdisk /dev/hda # create a partition with type 8e (lvm)
1868 pvcreate /dev/hda2 # create a physical volume
1869 vgcreate resize_me /dev/hda2 # create volume group
1870 lvcreate -n resize_me -L100 resize_me # create a logical volume
1871 mkfs.ext3 /dev/resize_me/resize_me # now create a new filesystem
1872 mount /dev/resize_me/resize_me /mnt/test # mount the new fs for demonstrating online resizing
1873 df -h # check the size of the partition
1874 lvextend -L+100M /dev/resize_me/resize_me # let's extend the logical volume
1875 resize2fs /dev/resize_me/resize_me # and finally resize the filesystem
1876 df -h # recheck the size of the partition
1878 This also works for Software-RAID. Demo:
1880 mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda2 /dev/hdb1
1882 mount /dev/md0 /mnt/test
1883 mdadm /dev/md0 --fail /dev/hda2 --remove /dev/hda2
1884 cfdisk /dev/hda # adjust partition size for hda2
1885 mdadm /dev/md0 --add /dev/hda2
1886 mdadm /dev/md0 --fail /dev/hdb1 --remove /dev/hdb1
1887 cfdisk /dev/hdb # adjust partition size for hdb1
1888 mdadm /dev/md0 --add /dev/hdb1
1889 mdadm --grow /dev/md0 --size=max
1892 Notice: online resizing works as soon as the kernel can re-read the
1893 partition table. So it works for example with LVM and SW-RAID but not with
1894 a plain device (/dev/[sh]d*). The kernel does not re-read the partition
1895 table if the device is already mounted.
1897 Use vim as an outline editor:
1899 % $PAGER /usr/share/doc/vim-vimoutliner/README.Debian
1903 Monitor directories/files for changes using iwatch
1905 Monitor /tmp for changes:
1908 Monitor files/directories specified in /etc/iwatch.xml
1909 and send mail on changes:
1912 Some often used mdadm commands:
1915 # mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda1 /dev/hdb1
1917 Display details of specific RAID:
1918 # mdadm --detail /dev/md0
1921 Simulating a drive failure by software:
1922 # mdadm --manage --set-faulty /dev/md0 /dev/hda1
1924 Remove disk from RAID:
1925 # mdadm /dev/md0 -r /dev/hda1
1927 Set disk as faulty and remove from RAID:
1928 # mdadm /dev/md0 --fail /dev/hda1 --remove /dev/hda1
1933 Restart a RAID-device:
1936 Add another disk to existing RAID setup (hotadd):
1937 # mdadm /dev/md0 -a /dev/hde1
1938 # mdadm --grow /dev/md0 --raid-devices=4
1940 Assemble and start all arrays:
1941 # mdadm --assemble --scan
1943 Assemble a specific array:
1944 # mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1
1947 # mdadm --assemble --run --force --update=resync /dev/md0 /dev/sda1 /dev/sda2
1950 # mdadm --stop --scan
1952 Scan for and setup arrays automatically:
1953 # mdadm --assemble --scan --auto=yes --verbose
1955 Notice: If the above does not work make sure /etc/mdadm/mdadm.conf contains:
1957 CREATE owner=root group=disk mode=0660 auto=yes
1962 # /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
1965 Monitoring the sw raid
1966 # nohup mdadm --monitor --mail=root@localhost --delay=300 /dev/md0
1968 Producing /etc/mdadm/mdadm.conf:
1969 # mdadm --detail --scan > /etc/mdadm/mdadm.conf
1971 See also: man mdadm | less -p "^EXAMPLES"
1972 http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html
1974 A quick summary of the most commonly used RAID levels:
1977 => 2 disks each 160 GB: 320 GB data
1978 RAID 1: Mirrored Set
1979 => 2 disks each 160 GB: 160 GB data
1980 RAID 5: Striped Set with Parity
1981 => 3 disks each 160 GB: 320 GB data; 160 GB redundancy
1983 Common nested RAID levels:
1984 RAID 01: A mirror of stripes
1985 RAID 10: A stripe of mirrors
1986 RAID 30: A stripe across dedicated parity RAID systems
1987 RAID 100: A stripe of a stripe of mirrors
1989 -- http://en.wikipedia.org/wiki/RAID
1991 Logical Volume Management (LVM) with Linux
1996 | hda1 hdc1 (PV:s on partitions or whole disks)
2002 | usrlv rootlv varlv (LV:s)
2004 | ext3 ext3 xfs (filesystems)
2006 Often used commands:
2007 ~~~~~~~~~~~~~~~~~~~~
2009 Create a physical volume:
2010 # pvcreate /dev/hda2
2012 Create a volume group:
2013 # vgcreate testvg /dev/hda2
2015 Create a logical volume:
2016 # lvcreate -n test_lv -L100 testvg
2018 Resize a logical volume:
2019 # lvextend -L+100M /dev/resize_me/resize_me
2020 # resize2fs /dev/resize_me/resize_me # ext2/3
2021 # xfs_growfs /dev/resize_me/resize_me # xfs
2022 # resize_reiserfs -f /dev/resize_me/resize_me # reiserfs online
2023 # mount -o remount,resize /dev/resize_me/resize_me # jfs
2025 Create a snapshot of a logical volume:
2026 # lvcreate -L 500M --snapshot -n mysnap /dev/testvg/test_lv
2028 Deactivate a volume group:
2029 # vgchange -a n my_volume_group
2031 Actually remove a volume group:
2032 # vgremove my_volume_group
2034 Display information about physical volume:
2035 # pvdisplay /dev/hda1
2037 Remove physical volume:
2038 # vgreduce my_volume_group /dev/hda1
2040 Remove logical volume:
2041 # umount /dev/myvg/homevol
2042 # lvremove /dev/myvg/homevol
2045 http://www.tldp.org/HOWTO/LVM-HOWTO/
2047 How to use APT locally
2049 Sometimes you have lots of packages .deb that you would like to use APT to
2050 install so that the dependencies would be automatically solved. Solution:
2053 dpkg-scanpackages debs /dev/null | gzip > debs/Packages.gz
2054 echo " deb file:/root debs/" >> /etc/apt/sources.list
2055 dpkg-scansources debs | gzip > debs/Sources.gz
2056 echo " deb-src file:/root debs/" >> /etc/apt/sources.list
2058 See also: http://www.debian.org/doc/manuals/apt-howto/ch-basico.en.html
2060 Check filesystem's LABEL:
2063 # vol_id -l /dev/sda1
2065 ext2/3 without vol_id:
2066 # dumpe2fs /dev/sda1 | grep "Filesystem volume name"
2069 # xfs_admin -l /dev/sda1
2071 reiserfs without vol_id:
2072 # debugreiserfs /dev/sda1 | grep UUID
2074 reiser4 without vol_id:
2075 # debugfs.reiser4 /dev/sda1 | grep uuid
2077 Check filesystem's UUID:
2080 # vol_id -u /dev/sda1
2082 ext2/3 without vol_id:
2083 # dumpe2fs /dev/sda1 | grep UUID
2086 # xfs_admin -u /dev/sda1
2088 reiserfs without vol_id:
2089 # debugreiserfs /dev/sda1 | grep LABEL
2091 reiser4 without vol_id:
2092 # debugfs.reiser4 /dev/sda1 | grep label
2094 Disable pdiffs feature of APT:
2097 # echo 'Acquire::PDiffs "false";' >> /etc/apt/apt.conf
2100 # apt-get update -o Acquire::Pdiffs=false
2102 Backup big devices or files and create compressed splitted
2103 image chunks of it using zsplit
2105 Create backup of /dev/sda named archiveofsda_#.spl.zp in directory
2106 /mnt/sda1/backup, split the files up into chunks of 1GB each and set
2107 read/write buffer to 256kB:
2108 # zsplit -b 256 -N archiveofsda -o /mnt/sda1/backup/ -s 1G /dev/sda
2110 Restore the backup using unzsplit:
2111 # unzsplit -D /dev/sda -d archiveofsda
2113 More usage examples: man zsplit + man unzsplit
2115 Measure network performance using ipserf
2121 % iperf -c <server_address> -V
2125 Server with 128k TCP window size:
2128 Client with running for 60 seconds and bidirectional test:
2129 % iperf -c <server_address> -r -w128k -t60
2131 Framebuffer resolutions:
2133 Resolution in pixels
2134 Color depth | 640x480 800x600 1024x768 1280x1024
2135 256 (8bit)| 769 771 773 775
2136 32000 (15bit)| 784 787 790 793
2137 65000 (16bit)| 785 788 791 794
2138 16.7 Mill.(24bit)| 786 789 792 795
2142 Mode 0x0300: 640x400 (+640), 8 bits
2143 Mode 0x0301: 640x480 (+640), 8 bits
2144 Mode 0x0303: 800x600 (+800), 8 bits
2145 Mode 0x0303: 800x600 (+832), 8 bits
2146 Mode 0x0305: 1024x768 (+1024), 8 bits
2147 Mode 0x0307: 1280x1024 (+1280), 8 bits
2148 Mode 0x030e: 320x200 (+640), 16 bits
2149 Mode 0x030f: 320x200 (+1280), 24 bits
2150 Mode 0x0311: 640x480 (+1280), 16 bits
2151 Mode 0x0312: 640x480 (+2560), 24 bits
2152 Mode 0x0314: 800x600 (+1600), 16 bits
2153 Mode 0x0315: 800x600 (+3200), 24 bits
2154 Mode 0x0317: 1024x768 (+2048), 16 bits
2155 Mode 0x0318: 1024x768 (+4096), 24 bits
2156 Mode 0x031a: 1280x1024 (+2560), 16 bits
2157 Mode 0x031b: 1280x1024 (+5120), 24 bits
2158 Mode 0x0330: 320x200 (+320), 8 bits
2159 Mode 0x0331: 320x400 (+320), 8 bits
2160 Mode 0x0332: 320x400 (+640), 16 bits
2161 Mode 0x0333: 320x400 (+1280), 24 bits
2162 Mode 0x0334: 320x240 (+320), 8 bits
2163 Mode 0x0335: 320x240 (+640), 16 bits
2164 Mode 0x0336: 320x240 (+1280), 24 bits
2165 Mode 0x033c: 1400x1050 (+1408), 8 bits
2166 Mode 0x033d: 640x400 (+1280), 16 bits
2167 Mode 0x033e: 640x400 (+2560), 24 bits
2168 Mode 0x0345: 1600x1200 (+1600), 8 bits
2169 Mode 0x0346: 1600x1200 (+3200), 16 bits
2170 Mode 0x034d: 1400x1050 (+2816), 16 bits
2171 Mode 0x035c: 1400x1050 (+5632), 24 bits
2173 Portscan using netcat:
2175 # netcat -v -w2 <host|ip-addr.> 1-1024
2177 Run apt-get but disable apt-listchanges:
2179 APT_LISTCHANGES_FRONTEND=none apt-get ...
2181 Upgrade system but disable apt-listbugs:
2183 APT_LISTBUGS_FRONTEND=none apt-get ...
2185 Set up a Transparent Debian Proxy
2187 Install of apt-cacher, the default config will do:
2188 # apt-get install apt-cacher
2190 Check out the ip address of debian mirror(s).
2191 Then add this to your firewall script:
2193 DEBIAN_MIRRORS="141.76.2.4 213.129.232.18"
2194 for ip in ${DEBIAN_MIRRORS} ; do
2195 ${IPTABLES} -t nat -A PREROUTING -s $subnet -d $ip -p tcp --dport 80 -j REDIRECT --to-port 3142
2198 where ${IPTABLES} is the location of your iptables binary
2199 and $subnet is your internal subnet.
2201 Now everybody in your subnet who does access either
2202 ftp.de.debian.org or ftp.at.debian.org will actually
2203 access your apt-cacher instead.
2205 To use apt-cacher on the router itself, add the following
2206 line to your /etc/apt/apt.conf:
2208 Acquire::http::Proxy "http://localhost:3142/";
2210 Version control using Mercurial
2212 Setting up a Mercurial project:
2215 % hg init # creates .hg
2216 % hg add # add all files
2217 % hg commit # commit all changes, edit changelog entry
2219 Branching and merging:
2221 % hg clone linux linux-work # create a new branch
2226 % hg pull ../linux-work # pull changesets from linux-work
2227 % hg merge # merge the new tip from linux-work into
2228 # (old versions used "hg update -m" instead)
2229 # our working directory
2230 % hg commit # commit the result of the merge
2234 % cat ../p/patchlist | xargs hg import -p1 -b ../p
2242 % hg export 1234 > foo.patch # export changeset 1234
2244 Export your current repo via HTTP with browsable interface:
2246 % hg serve -n "My repo" -p 80
2248 Pushing changes to a remote repo with SSH:
2250 % hg push ssh://user@example.com/~/hg/
2252 Merge changes from a remote machine:
2254 host1% hg pull http://foo/
2255 host2% hg merge # merge changes into your working directory
2257 Set up a CGI server on your webserver:
2258 % cp hgwebdir.cgi ~/public_html/hg/index.cgi
2259 % $EDITOR ~/public_html/hg/index.cgi # adjust the defaults
2261 Mercurial repositories of grml can be found at http://hg.grml.org/
2263 Download binary codecs for mplayer:
2265 # /usr/share/mplayer/scripts/win32codecs.sh
2269 # /usr/share/mplayer/scripts/binary_codecs.sh install
2271 (depending on the mplayer version you have).
2273 To play encrypted DVDs and if you are living in a country where using
2274 libdvdcss code is not illegal can install Debian package libdvdread3
2275 and use the script /usr/share/doc/libdvdread3/install-css.sh.
2277 Read manpages of uninstalled packages with debman:
2279 % debman -p git-core git
2281 Test network performance using netperf:
2287 # netperf -t TCP_STREAM -H 192.168.0.41
2289 Setup Xen within 20 minutes on Debian/grml
2291 Install relevant software und update grub's menu.lst (Xen does not work with
2292 usual lilo so install grub instead if not done already):
2294 apt-get install linux-image-2.6.18-1-xen-686 xen-hypervisor-3.0.3-1-i386 \
2295 xen-utils-3.0.3-1 xen-tools bridge-utils
2298 Example for installation of Debian etch as DomU:
2301 xen-create-image --debootstrap --dir=/mnt/md1/xen --size=2Gb --memory=512Mb --fs=ext3 \
2302 --cache=yes --dist=etch --hostname=xengrml1 --ip 192.168.1.2 --netmask 255.255.255.0 \
2303 --gateway 192.168.1.1 --initrd=/boot/initrd.img-2.6.18-1-xen-686 \
2304 --kernel=/boot/vmlinuz-2.6.18-1-xen-686 --mirror=http://ftp.at.debian.org/debian/
2308 /etc/init.d/xend start
2309 /etc/init.d/xendomains start
2311 Setup a bridge for network, either manually:
2313 brctl addbr xenintbr
2314 brctl stp xenintbr off
2315 brctl sethello xenintbr 0
2316 brctl setfd xenintbr 0
2317 ifconfig xenintbr 192.168.1.1 netmask 255.255.255.0 up
2319 or via /etc/network/interfaces (run ifup xenintbr to bring up the device then
2323 iface xenintbr inet static
2324 pre-up brctl addbr xenintbr
2325 post-down brctl delbr xenintbr
2327 netmask 255.255.255.0
2332 Setup forwarding (adjust $PUBLIC_IP; for permanet setup use /etc/sysctl.conf and
2333 add the iptables commands to a startup script like /etc/init.d/rc.local):
2335 echo 1 > /proc/sys/net/ipv4/ip_forward
2336 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to $PUBLIC_IP
2337 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to $PUBLIC_IP
2339 Adjust network configuration of Xend:
2341 cat >> /etc/xen/xend-config.sxp << EOF
2342 (network-script network-route)
2343 (vif-bridge xenintbr)
2344 (vif-script vif-bridge)
2347 List domains, start up a DomU, shutdown later again:
2349 xm create -c /etc/xen/xengrml1.cfg
2353 This HowTo is also available online at http://grml.org/xen/
2355 Play tetris with zsh:
2359 bindkey "^Xt" tetris
2361 Now press 'ctrl-x t'.
2363 Set up a router with grml
2365 Run grml-router script:
2368 Install dnsmasq if not already present:
2369 # apt-get update ; apt-get install dnsmasq
2371 Adjust /etc/dnsmasq.conf according to your needs:
2372 # cat >> /etc/dnsmasq.conf << EOF
2375 dhcp-range=19.168.0.124,192.168.0.254,1m # dhcp range
2376 dhcp-option=3,192.168.0.1 # dns server
2377 dhcp-option=1,255.255.255.0 # netmask
2380 Start dnsmasq finally:
2383 Find out which process(es) cause the disk to spin up:
2385 # echo 1 > /proc/sys/vm/block_dump
2387 The command sets a sysctl to cause the kernel to log all disk
2388 writes. Please notice that there is a lot of data.
2390 See: $KERNEL-SOURCE/Documentation/laptop-mode.txt
2392 Also take a look at event-viewer(8).
2394 Display stats about memory allocations performed by a program:
2396 Usage example for 'ls':
2398 % LD_PRELOAD=/lib/libmemusage.so ls > /dev/null
2400 Use KVM (Kernel-based Virtual Machine for Linux):
2402 Make sure to install the relevant tools:
2403 # apt-get update ; apt-get install kvm
2406 Test it with a minimal system like ttylinux:
2407 # wget http://www.minimalinux.org/ttylinux/packages/bootcd-i386-5.3.iso.gz
2408 # gzip -d bootcd-i386-5.3.iso.gz
2409 # kvm -cdrom bootcd-i386-5.3.iso
2411 EEPROM data decoding for SDRAM DIMM modules:
2414 # /usr/share/doc/lm-sensors/examples/eeprom/decode-dimms.pl
2418 Make sure your device is supported by Linux and running.
2419 See http://www.linuxtv.org/ for more details.
2421 If the DVB device works on your system (see 'hwinfo --usb'
2422 when using a DVB usb device for example), then make sure you
2423 have the scan util from dvb-utils available:
2425 # aptitude install dvb-utils
2427 Then create a channels.conf configuration file:
2429 % scan /usr/share/doc/dvb-utils/examples/scan/... > ~/.mplayer/channels.conf
2431 You can find some example configuration files on
2432 your grml system in ~/.channels. Usage example:
2434 % ln -s ~/.mplayer/channels.conf-AT-graz ~/.mplayer/channels.conf
2436 Tip: w_scan (see http://free.pages.at/wirbel4vdr/w_scan/index2.html)
2437 might be useful if you do not know the initial configuration
2440 Get the lastest mercurial snapshot:
2442 Make sure you have the python-dev package available:
2443 # apt-get update ; apt-get install python-dev
2445 Get and build the source:
2446 % hg clone http://selenic.com/repo/hg mercurial
2449 % export PYTHONPATH=$(pwd)
2450 % export PATH=$PATH:$(pwd)
2452 now you should have the newest version of mercurial whenever you execute hg.
2454 To update to the lastest development snapshot, additionally use
2455 the following commands:
2456 % hg pull -u http://hg.intevation.org/mercurial/crew
2462 Available bootoptions relevant in live-cd mode:
2463 -----------------------------------------------
2465 * utc: set UTC, if your system clock is set to UTC (GMT)
2466 * gmt: set UTC, if your system clock is set to UTC (GMT) [like bootoption utc]
2467 * tz=$option: set timezone to corresponding $option, usage example:
2470 Configuration options relevant on harddisk installation:
2471 --------------------------------------------------------
2473 * Use the tzconfig utility to set the local timezone:
2477 which adjusts /etc/timezone and /etc/localtime according
2478 to the provided information.
2480 * /etc/default/rcS: set variable UTC according to your needs,
2481 whether your system clock is set to UTC (UTC='yes') or
2484 * /etc/localtime: adjust zoneinfo according to your needs:
2486 # ln -sf /usr/share/zoneinfo/$WHATEVER_YOU_WANT /etc/localtime
2488 The zoneinfo directory contains the time zone files that were
2489 compiled by zic. The files contain information such as rules
2490 about DST. They allow the kernel to convert UTC UNIX time into
2491 appropriate local dates and times. Use the zdump utility to
2492 print current time and date (in the specified time zone).
2494 * /etc/adjtime: This file is used e.g. by the adjtimex function,
2495 which can smoothly adjust system time while the system runs
2497 * If you change the time (using 'date --set ...', ntpdate,...)
2498 it is worth setting also the hardware clock to the correct time:
2500 # hwclock --systohc [--utc]
2502 Remember to add the --utc -option if the hardware clock is set
2508 Check your current settings via:
2511 zdump /etc/localtime
2514 grep hwclock /etc/runlevel.conf
2515 grep '^UTC' /etc/default/rc
2517 Further information:
2518 --------------------
2520 hwclock(8) tzselect(1) tzconfig(8)
2521 http://www.debian.org/doc/manuals/system-administrator/ch-sysadmin-time.html
2522 http://wiki.debian.org/TimeZoneChanges