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 glark grep extract-matches
424 Output text as sound:
427 % xsay # when running X and text selected via mouse
429 Adjust a grml harddisk (grml2hd) installation:
433 Get information on movie files:
435 % tcprobe -i file.avi
437 Get an overview of your image files:
439 % convert 'vid:*.jpg' thumbnails.jpg
441 List all standard defines:
443 % gcc -dM -E - < /dev/null
445 Send a mail as reminder:
447 echo "mail -s 'check TODO-list' $MAILADDRESS < /dev/null" | at 23:42
449 ncurses-based presentation tool:
453 See: man tpp and /usr/share/doc/tpp/examples/
455 Use ICQ / Jabber / Yahoo! / AIM / MSN /... on command line:
459 Use IRC on command line:
465 % vimdiff file1 file2
471 Moving between diffs:
481 Hardware monitoring without kernel dependencies:
485 Install grml-iso to usb-stick:
487 % grml2usb grml.iso /mount/point
489 Use mplayer on framebuffer console:
491 % mplayer -vo fbdev ...
493 Use links2 on framebuffer console:
495 % links2 -driver fb ...
497 Switch language / keyboard:
499 * use the bootparam lang to set language environment ($LANG, $LC_ALL, $LANGUAGE)
500 * use the bootparams keyboard / xkeyboard to activate specific keyboard layout
501 Usage example: 'grml lang=us keyboard=de xkeyboard=de'
503 Or run one of the following commands:
507 # loadkeys i386/qwertz/de-latin1-nodeadkeys.kmap.gz # console
510 Switch setting of caps-control key (switch between ctrl + shift) on keyboard:
514 Mount usb device / usb stick:
516 % mount /mnt/external1 # corresponds to /dev/sda1
518 % mount /mnt/external # corresponds to /dev/sda
520 Install Sun Java packages:
522 Download j2re.bin-file from http://java.sun.com/downloads/index.html and run
524 # apt-get install java-package
525 # fakeroot make-jpkg j2re-*.bin
526 # dpkg -i sun-j2re*.deb
527 # update-alternatives --config java
531 ddrescue is an improved version of dd which tries to read and
532 if it fails it will go on with the next sectors, where tools
539 How to make an audio file (e.g. Musepack format) out of a DVD track:
541 % mkfifo /tmp/fifo.wav
542 % mppenc /tmp/fifo.wav track06.mpc &
543 % mplayer -vo null -vc null -ao pcm:fast:file=/tmp/fifo.wav -dvd-device /dev/dvd dvd://1 -chapter 6-6
545 Adjust the mppenc line with the encoder you would like to use,
546 for example 'oggenc -o track06.ogg /tmp/fifo.wav' for ogg files.
550 % mplayer -vo null -dumpaudio -dumpfile track06.raw -aid N -dvd-device /dev/dvd dvd://1 -chapter 6-6
551 to extract audio without processing, where 'N' is the corresponding audio channel (see 'man mplayer')
553 Usage example for getting a PCM/wave file from audio channel 128:
554 % mplayer -vo null -vc null -ao pcm:fast:file=track06.wav -aid 128 -dvd-device /dev/dvd dvd://6
556 Create simple chroot:
558 # make_chroot_jail $USERNAME
560 Convert DOS formated file to unix format:
562 sed 's/.$//' dosfile > unixfile # assumes that all lines end with CR/LF
563 sed 's/^M$//' dosfile > unixfile # in bash/tcsh, press Ctrl-V then Ctrl-M
564 sed 's/\x0D$//' dosfile > unixfile # gsed 3.02.80, but top script is easier
565 awk '{sub(/\r$/,"");print}' # assumes EACH line ends with Ctrl-M
566 gawk -v BINMODE="w" '1' infile >outfile # in DOS environment; cannot be done with
567 # DOS versions of awk, other than gawk
568 tr -d \r < dosfile > unixfile # GNU tr version 1.22 or higher
569 tr -d '\015' < dosfile > unixfile # use octal value for "\r" (see man ascii)
570 tr -d '[\015\032]' < dosfile > unixfile # sometimes ^Z is appended to DOS-files
571 vim -c ":set ff=unix" -c ":wq" file # convert using vim
572 vim -c "se ff=dos|x" file # ... and even shorter ;)
573 recode ibmpc..lat1 file # convert using recode
574 echo -e "s/\r//g" > dos2unix.sed; sed -f dos2unix.sed < dosfile > unixfile
576 Save live audio stream to file:
578 % mplayer -ao pcm:file=$FILE
582 % mencoder mms://file.wmv -o $FILE -ovc copy -oac copy
588 % avimerge -i *.avi -o blub.avi
592 % cat *.mpg > blub.mpg
596 % mencoder file1.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -mc 0 -noskip -forceidx -o file1.avi
597 % mencoder file2.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -mc 0 -noskip -forceidx -o file2.avi
598 % avimerge -i file1.avi file2.avi -o blub.avi
600 Display MS-Word file:
602 % strings file.doc | fmt | less
608 Convert MS-Word file to postscript:
610 % antiword -p a4 file.doc > file.ps
612 Convert manual to postscript:
614 % zcat /usr/share/man/man1/zsh.1.gz | groff -man > zsh.1.ps
616 % man -t zsh > zsh.ps
620 % dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
622 Read HTTP via netcat:
624 echo "GET / HTTP/1.0\r\n\r\n" | netcat $DOMAIN 80
626 Get X ressources for specific program:
628 % xrdb -q |grep -i xterm
630 Get windowid of specific X-window:
632 % xwininfo -int | grep "Window id:" | cut -d ' ' -f 4
634 Get titel of specific X-window:
638 check locale - LC_MESSAGES:
640 % locale -ck LC_MESSAGES
642 Create random password:
646 % dd if=/dev/urandom bs=14 count=1 | hexdump | cut -c 9-
648 Get tarballs of various Linux Kernel trees:
651 to get the current stable 2.6 release
654 to get a list of all supported trees
656 Transfer your SSH public key to another host:
658 % ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote-system
660 % cat $HOME/.ssh/id_rsa.pub | ssh user@remote-system 'cat >> .ssh/authorized_keys'
662 Update /etc/fstab entries:
666 See "man grml-rebuildfstab" for more details about
667 generation of /etc/fstab (including stuff like
668 fs LABELs / UUIDs,...).
670 Fetch and potentially change SCSI device parameters:
676 reclaim disk space by linking identical files together:
680 Find and remove duplicate files:
684 Perform layer 2 attacks:
690 Guess PC-type hard disk partitions / partition table:
694 Perform a standard scan:
697 Write back the guessed table:
698 # gpart -W /dev/ice /dev/ice
700 Develop, test and use exploit code with the Metasploit Framework:
703 wget http://www.metasploit.com/tools/framework-2.7-snapshot.tar.gz
704 unp framework-2.7-snapshot.tar.gz
708 Useful documentation:
710 % w3m /usr/share/doc/Debian/reference/reference.en.html
712 % xpdf =(zcat /usr/share/doc/Debian/reference/reference.en.pdf.gz)
714 http://grml.org/docs/ grml Documentation
715 http://wiki.grml.org/ grml Wiki
716 http://www.debian.org/doc/ Debian Documentation
717 http://wiki.debian.org/ Debian Wiki
718 http://www.gentoo.org/doc/en/ Gentoo Documentation
719 http://gentoo-wiki.com/ Gentoo Wiki
720 http://www.tldp.org/ The Linux Documentation Project
724 % fortune debian-hints
728 % fortune debian-hints
729 % dpkg -L funny-manpages
731 Backup master boot record (MBR):
733 # dd if=/dev/ice of=/tmp/backup_of_mbr bs=512 count=1
735 Backup partition table:
737 # sfdisk -d /dev/hda > hda.out
739 Restore partition table:
741 # sfdisk /dev/hda < hda.out
743 Clone disk via network using netcat:
746 # nc -vlp 30000 > hda1.img
748 # dd if=/dev/hda1 | nc -vq 0 192.168.1.2 30000
750 Adjust blocksize (dd's option bs=...) and include 'gzip -c'
753 # dd if=/dev/hda1 bs=32M | gzip -c | nc -vq 0 192.168.1.2 30000
755 Backup specific directories via cpio and ssh:
757 # for f in directory_list; do find $f >> backup.list done
758 # cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
762 This one uses CPU cycles on the remote server to compare the files:
763 # ssh target_address cat remotefile | diff - localfile
764 # cat localfile | ssh target_address diff - remotefile
766 This one uses CPU cycles on the local server to compare the files:
767 # ssh target_address cat <localfile "|" diff - remotefile
769 Useful tools for cloning / backups:
771 * dd: convert and copy a file
772 * dd_rescue: copies data from one file (or block device) to another
773 * pcopy: a replacement for dd
774 * partimage: back up and restore disk partitions
775 * dirvish: Disk based virtual image network backup system
776 * devclone: in-place filesystem conversion -- device cloning
777 * ntfsclone: efficiently clone, image, restore or rescue an NTFS
778 * dump: ext2/3 filesystem backup
779 * udpcast: multicast file transfer tool
780 * cpio: copy files to and from archives
781 * pax: read and write file archives and copy directory hierarchies
782 * netcat / ssh / tar / gzip / bzip2: additional helper tools
784 Use grml as a rescue system:
788 * dd: convert and copy a file
789 * ddrescue: copies data from one file or block device to another
790 * partimage: Linux/UNIX utility to save partitions in a compressed image file
791 * cfdisk: Partition a hard drive
792 * nparted: Newt and GNU Parted based disk partition table manipulator
793 * parted-bf: The GNU Parted disk partition resizing program, small version
794 * testdisk: Partition scanner and disk recovery tool
795 * gpart: Guess PC disk partition table, find lost partitions
799 * e2fsprogs: ext2 file system utilities and libraries
800 * e2tools: utilities for manipulating files in an ext2/ext3 filesystem
801 * e2undel: Undelete utility for the ext2 file system
802 * ext2resize: an ext2 filesystem resizer
803 * recover: Undelete files on ext2 partitions
807 * reiser4progs: administration utilities for the Reiser4 filesystem
808 * reiserfsprogs: User-level tools for ReiserFS filesystems
812 * xfsdump: Administrative utilities for the XFS filesystem
813 * xfsprogs: Utilities for managing the XFS filesystem
817 * jfsutils: utilities for managing the JFS filesystem
821 * ntfsprogs: tools for doing neat things in NTFS partitions from Linux
822 * salvage-ntfs: free NTFS data recovery tools
823 * scrounge-ntfs: data recovery program for NTFS file systems
824 * ntfsresize: resize ntfs partitions
826 Get ASCII value of a character with zsh:
828 % char=N ; print $((#char))
830 Convert a collection of mp3 files to wave or cdr using zsh:
832 % for i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}
834 Convert images (foo.gif to foo.png) using zsh:
836 % for i in **/*.gif; convert $i $i:r.png
838 Remove all "non txt" files using zsh:
842 Remote Shell Using SSH:
845 % ssh -NR 3333:localhost:22 user@yourhost
848 % ssh user@localhost -p 3333
850 Reverse Shell with Netcat:
853 % netcat -v -l -p 3333 -e /bin/sh
856 % netcat 192.168.0.1 3333
858 Remove empty directories with zsh:
860 % rmdir ./**/*(/od) 2> /dev/null
862 Find all the empty directories in a tree with zsh:
866 Find all files without a valid owner and change ownership with zsh:
868 % chmod user /**/*(D^u:${(j.:u:.)${(f)"$(</etc/passwd)"}%%:*}:)
870 Display the 5-10 last modified files with zsh:
872 % print -rl -- /path/to/dir/**/*(D.om[5,10])
874 Find and list the ten newest files in directories and subdirs (recursive) with zsh:
876 % print -rl -- **/*(Dom[1,10])
878 Find most recent file in a directory with zsh:
880 % setopt dotglob ; print directory/**/*(om[1])
882 Tunnel all traffic through an external server:
884 % ssh -ND 3333 username@external.machine
886 Then set the SOCKS4/5 proxy to localhost:3333.
887 Check whether it's working by surfing e.g. to checkip.dyndns.org
889 Tunnel everything through SSH via tsocks:
891 set up the SSH proxy on the client side:
893 % ssh -ND 3333 user@remote.host.example.com
895 Adjust /etc/tsocks.conf afterwards (delete all other lines):
900 For programs who natively support proxying connections (e.g. Mozilla
901 Firefox) you can now set the proxy address to localhost port 3333.
903 All other programs which's connections you want to tunnel through your
904 external host are prefixed with tsocks, e.g.:
906 % tsocks netcat example.com 80
907 % tsocks irssi -c irc.quakenet.eu.org -p 6667
909 If you call tsocks without parameters it executes a shell witht the
910 LD_PRELOAD environment variable already set and exported.
912 smartctl - control and monitor utility for harddisks using Self-Monitoring,
913 Analysis and Reporting Technology (SMART):
915 # smartctl --all /dev/ice
917 If you want to use smartctl on S-ATA (sata) disks use:
919 # smartctl -d ata --all /dev/sda
922 # smartctl -t offline /dev/ice
925 # smartctl -t short /dev/ice
927 Display results of test:
928 # smartctl -l selftest /dev/ice
930 Query device information:
931 # smartctl -i /dev/ice
933 Mount a BSD / Solaris partition:
935 # mount -t ufs -o ufstype=ufs2 /dev/hda1 /mnt/hda1
937 Use ufstype 44bsd for FreeBSD, NetBSD, OpenBSD (read-write).
938 Use ufstype ufs2 for >= FreeBSD 5.x (read-only).
939 Use ufstype sun for SunOS (Solaris) (read-write).
940 Use ufstype sunx86 for SunOS for Intel (Solarisx86) (read-write).
942 See /usr/share/doc/linux-doc-$(uname -r)/Documentation/filesystems/ufs.txt.gz
945 Read BIOS (and or BIOS) password:
947 # dd if=/dev/mem bs=512 skip=2 count=1 | hexdump -C | head
949 Clone one of the kernel trees via git:
951 git clone rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
952 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
953 This path defines the tree. See http://kernel.org/git/ for an overview.
955 Mount filesystems over ssh protocol:
957 % sshfs user@host:/remote_dir /mnt/test
961 % fusermount -u /mnt/test
963 (Notice: requires fuse kernel module)
965 Install Gentoo using grml:
967 See http://www.gentoo.org/doc/en/altinstall.xml
969 Install (plain) Debian (sarge release) via grml:
971 Assuming you want to install Debian to sda1:
973 mkfs.ext3 /dev/sda1 # make an ext3 filesystem on /dev/sda1
974 mount -o rw,suid,dev /dev/sda1 /mnt/test # now mount the new partition
975 debootstrap sarge /mnt/test ftp://ftp.tugraz.at/mirror/debian # get main packages from a debian-mirror
976 chroot /mnt/test /bin/bash # let's chroot into the new system
977 mount -t devpts none /dev/pts # ...otherwise running base-config might fail ("Terminated" or "openpty failed")
978 mount -t proc none /proc # make sure we also have a mounted /proc
979 base-config # now configure some main settings
980 vi /etc/mkinitrd/mkinitrd.conf # adjust $ROOT (to /dev/sda1) for your new partition, autodetection will fail in chroot
981 cd /dev ; ./MAKEDEV generic # make sure we have all necessary devices for lilo
982 apt-get install lilo linux-image-2.6.12-1-386 # install lilo and a kernel which fits your needs
983 cp /usr/share/doc/lilo/examples/conf.sample /etc/lilo.conf # let's use a template
984 vi /etc/lilo.conf && lilo # adjust the file for your needs and run lilo afterwards
985 umount /proc ; umount /dev/pts # we do not need them any more
986 exit # now leave chroot
987 cp /etc/hosts /etc/fstab /mnt/test/etc/ # you might want to take the existing files...
988 cp /etc/network/interfaces /mnt/test/etc/network/ # ...from the running grml system for your new system
989 umount /mnt/test && reboot # unmount partition and reboot...
991 See also: http://www.debian.org/releases/stable/i386/apcs04.html.en
992 Avoid all of the above steps - use grml-debootstrap(8) instead!
994 Install (plain) Debian (etch release) via grml
996 Assuming you want to install Debian to sda1:
998 mkfs.ext3 /dev/sda1 # make an ext3 filesystem on /dev/sda1
999 mount -o rw,suid,dev /dev/sda1 /mnt/test # now mount the new partition
1000 debootstrap etch /mnt/test ftp://ftp.tugraz.at/mirror/debian # get main packages from a debian-mirror
1001 chroot /mnt/test /bin/bash # let's chroot into the new system
1002 mount -t proc none /proc # make sure we have a mounted /proc
1003 apt-get install locales console-data # install locales
1004 dpkg-reconfigure locales console-data # adjust locales to your needs
1005 apt-get install vim most zsh screen less initrd-tools file grub \
1006 usbutils pciutils bzip2 sysfsutils dhcp3-client resolvconf \
1007 strace lsof w3m # install useful software
1008 apt-get install linux-headers-2.6-686 linux-image-686 # install current kernel
1010 echo "127.0.0.1 localhost" > /etc/hosts # adjust /etc/hosts and network:
1011 cat >> /etc/network/interfaces << EOF
1012 iface lo inet loopback
1013 iface eth0 inet dhcp
1018 ln -sf /usr/share/zoneinfo/Europe/Vienna /etc/localtime # adjust timezone and /etc/fstab:
1019 cat >> /etc/fstab << EOF
1020 sysfs /sys sysfs auto 0 0
1021 proc /proc proc defaults 0 0
1022 /dev/sda1 / ext3 defaults,errors=remount-ro 0 1
1023 /dev/sda2 none swap sw 0 0
1024 /dev/cdrom /mnt/cdrom0 iso9660 ro,user,noauto 0 0
1026 passwd # set password of user root
1028 mkdir /boot/grub # setup grub
1029 cp /usr/share/doc/grub/examples/menu.lst /boot/grub
1030 cat >> /boot/grub/menu.lst << EOF
1031 title Debian Etch, kernel 2.6.18-3-686 (on /dev/sda1)
1033 kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/sda1 ro
1034 initrd /boot/initrd.img-2.6.18-3-686
1036 vim /boot/grub/menu.lst # adjust grub configuration to your needs
1037 cd /dev && MAKEDEV generic # create default devices
1038 cp -i /usr/lib/grub/i386-pc/* /boot/grub/ # copy stage-files to /boot/grub/
1039 grub install # now install grub, run in grub-cmdline following commands:
1043 umount -a # unmount all filesystems in chroot and finally:
1044 exit # exit the chroot and:
1047 If you want to use lilo instead of grub take a look at
1048 /usr/share/doc/lilo/examples/conf.sample or use the following template:
1050 cat > /etc/lilo.conf << EOF
1051 # This allows booting from any partition on disks with more than 1024 cylinders.
1054 # Specifies the boot device
1057 # Specifies the device that should be mounted as root.
1060 # use Debian on software raid:
1061 # raid-extra-boot=mbr-only
1069 image=/boot/vmlinuz-2.6.18-grml
1073 initrd=/boot/initrd.img-2.6.18-grml
1076 See also: http://www.debian.org/releases/stable/i386/apcs04.html.en
1077 Avoid all of the above steps - use grml-debootstrap(8) instead!
1079 Convert files from Unicode / UTF to ISO:
1081 % iconv -f utf8 -t iso-8859-15 < utffile > isofile
1085 % iconv -f iso-8859-15 -t utf8 < isofile > utffile
1087 Assign static setup for network cards (eth0 and eth1) via udev:
1089 First method - manual:
1090 ~~~~~~~~~~~~~~~~~~~~~~
1091 Get information for SYSFS address:
1092 # udevinfo -a -p /sys/class/net/eth0/ | grep address
1094 Then create udev rules:
1095 # cat /etc/udev/network.rules
1097 KERNEL=="eth*", SYSFS{address}=="00:00:00:00:00:01", NAME="wlan0"
1098 KERNEL=="eth*", SYSFS{address}=="00:00:00:00:00:02", NAME="lan0"
1099 # do not match eth* drivers but also e.g. firewire stuff:
1100 ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:00:00:00:00:03", NAME="1394"
1102 Now activate the rules:
1103 # cd /etc/udev/rules.d/ && ln -s ../network.rules z35_network.rules
1105 Unload the drivers, restart udev and load the drivers again to activate
1108 Second method - automatic:
1109 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1110 Run /lib/udev/write_net_rules shipped with recent udev versions:
1112 # INTERFACE=wlan1 /lib/udev/write_net_rules 00:00:00:00:00:04
1114 This command will create /etc/udev/rules.d/z25_persistent-net.rules containing:
1116 SUBSYSTEM=="net", DRIVER=="?*", SYSFS{address}=="00:00:00:00:00:04", NAME=wlan1
1118 See /usr/share/doc/udev/writing_udev_rules/index.html for more information.
1120 Change the suffix from *.sh to *.pl using zsh:
1123 % zmv -W '*.sh' '*.pl'
1125 Generate SSL certificate:
1127 Create self signed certificate (adjust /etc/ssl/openssl.cnf if necessary):
1128 # openssl req -x509 -newkey rsa:1024 -keyout keyfile -out certfile -days 9999 -nodes
1131 # openssl x509 -in certfile -text
1133 Verify against CA certificate:
1134 # openssl verify -CAfile cacert.crt -verbose -purpose sslserver
1136 Generate 2048bit RSA-key:
1137 # openssl req -new -x509 -keyout pub-sec-key.pem -out pub-sec-key.pem -days 365 -nodes
1139 As before but add request to existing key pub-sec-key.pem:
1140 # openssl req -new -out request.pem -keyin pub-sec-key.pem
1142 Show request request.pem:
1143 # openssl req -text -noout -in request.pem
1145 Verify signature of request request.pem:
1146 # openssl req -verify -noout -in request.pem
1148 Generate SHA1 fingerprint (modulo key) of request.pem:
1149 # openssl req -noout -modulus -in request.pem | openssl sha1 -c
1151 Generate 2048bit RSA-key and put it to pub-sec-key.pem. Save self signed certificate in self-signed-certificate.pem:
1152 # openssl req -x509 -days 365 -newkey rsa:2048 -out self-signed-certificate.pem -keyout pub-sec-key.pem
1154 As before but create self signed certificate based on existing key pub-sec-key.pem:
1155 # openssl req -x509 -days 365 -new -out self-signed-certificate.pem -key pub-sec-key.pem
1157 Generate new request out of existing self signed certificate:
1158 # openssl x509 -x509toreq -in self-signed-certificate.pem -signkey pub-sec-key.pem -out request.pem
1160 Display certificate self-signed-certificate.pem in plaintext:
1161 # openssl x509 -text -noout -md5 -in self-signed-certificate.pem
1163 Check self signed certificate:
1164 # openssl verify -issuer_checks -CAfile self-signed-certificate.pem self-signed-certificate.pem
1166 Estable OpenSSL-connection using self-signed-certificate.pem and display certificate:
1167 # openssl s_client -showcerts -CAfile self-signed-certificate.pem -connect www.example.com:443
1169 Generate ssl-certificate for use with apache2:
1171 export RANDFILE=/dev/random
1172 mkdir /etc/apache2/ssl/
1173 openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
1174 chmod 600 /etc/apache2/ssl/apache.pem
1176 Also take a look at make-ssl-cert (debconf wrapper for openssl):
1178 # /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/apache.pem
1180 and mod-ssl-makecert (utility to create SSL certificates in /etc/apache/ssl.*/).
1182 Change Windows NT password(s):
1184 # mount -o rw /mnt/hda1
1185 # cd /mnt/hda1/WINDOWS/system32/config/
1186 # chntpw SAM SECURITY system
1188 Notice: if mounting the partition read-write did not work (check syslog!)
1189 try using mount.ntfs-3g instead: mount.ntfs-3g /dev/hda1 /mnt/hda1
1191 (Be careful with deactivating syskey!)
1193 glark - replacement for grep written in Ruby:
1195 A replacement for (or supplement to) the grep family, glark offers:
1196 Perl compatible regular expressions, highlighting of matches,
1197 context around matches, complex expressions and automatic exclusion
1202 % glark -y keyword file # display only the region that matched, not the entire line
1203 % glark -o format print *.h # search for either "printf" or "format"
1205 More information: man glark
1207 Find CD burning device(s):
1209 General information on CD-ROM:
1210 % cat /proc/sys/dev/cdrom/info
1212 Scan using ATA Packet specific SCSI transport:
1213 # cdrecord -dev=ATA -scanbus
1214 # cdrecord-prodvd -s -scanbus dev=ATA
1216 Get specific information for /dev/ice:
1217 # cdrecord dev=/dev/ice -scanbus
1219 Create devices in /dev on udev:
1221 For example create md devices (/dev/md0, /dev/md1,...):
1222 # cd /dev ; WRITE_ON_UDEV=1 ./MAKEDEV md
1224 Identify network device (NIC):
1226 # ethtool -i $DEVICE
1228 Show NIC statistics:
1230 # ethtool -S $DEVICE
1232 If your NIC shows some aging signs, you may want to be sure:
1234 # ethtool -t $DEVICE
1236 Disable TCP/UDP checksums:
1238 # ethtool -K $DEVICE tx off
1240 grml2hd seems to hang? Getting Squashfs errors? Problems while booting?
1242 Switch to tty12 and take a look at the syslog. If you see something like:
1244 SQUASHFS error: zlib_fs returned unexpected result 0x........
1245 SQUASHFS error: Unable to read cache block [.....]
1246 SQUASHFS error: Unable to read inode [.....]
1248 your ISO/CD-ROM very probably is not ok. Verify it via booting with grml testcd.
1249 Check your CD low-level via running:
1251 # readcd -c2scan dev=/dev/cdrom
1253 If the medium really is ok and it still fails try to boot with deactivated DMA
1254 via using grml nodma at the bootprompt.
1256 Write a Microsoft compatible boot record (MBR) using ms-sys
1258 Write a Windows 2000/XP/2003 MBR to device:
1260 # ms-sys -m /dev/ice
1262 Use a Vodafone 3G Datacard (UMTS) with Linux:
1264 Plug in your vodafone card and check in syslog whether the appropriate
1265 (probably /dev/ttyUSB0 or /dev/noz0 when using newer vodafone cards) has
1266 been created. If so run:
1269 # wvdial --config /etc/wvdial.conf.umts $PROFILE
1272 # gcom -d /dev/ttyUSB0
1273 # wvdial --config /etc/wvdial.conf.umts a1usb
1276 # wvdial --config /etc/wvdial.conf.umts tmnozomi
1279 # wvdial --config /etc/wvdial.conf.umts dreiusb
1281 Notice: newer vodafone cards require the nozomi driver. Run 'modprobe nozomi' on
1284 hdparm - get/set hard disk parameters
1286 Display the identification info that was obtained from the drive at boot time,
1288 # hpdarm -i /dev/ice
1290 Request identification info directly from the drive:
1291 # hpdarm -I /dev/ice
1293 Perform timings of device + cache reads for benchmark and comparison purposes:
1294 # hdparm -tT /dev/ice
1296 bonnie++ - program to test hard drive performance.
1298 # mkdir /mnt/benchmark
1299 # mount /dev/ice /mnt/benchmark
1300 # chmod go+w /mnt/benchmark
1301 # bonnie -u grml -d /mnt/benchmark -s 2000M
1303 Use gizmo with a bluetooth headset:
1305 % DEVICE="/dev/dsp$(awk '/- BT Headset/ {print $1}' /proc/asound/cards)"
1306 % gizmo --mic $DEVICE --speaker $DEVICE
1308 Scan a v4l device for TV stations:
1310 % scantv -c /dev/video0 -C /dev/vbi0 -o ~/.xawtv
1312 Then running xawtv should work:
1316 Run apt-get with timeout of 3 seconds:
1318 # apt-get -o acquire::http::timeout=3 update
1320 Debian GNU/Linux device driver check page
1322 % $BROWSER http://kmuto.jp/debian/hcl/index.cgi
1324 Use dd with status line:
1326 # dd if=/dev/ice conv=noerror,notrunc,sync | buffer -S 100k | dd of=/tmp/file
1328 Generate a 512k file of random data with status bar:
1330 % dd if=/dev/random bs=1024 count=512 | bar -s 512k -of ./random
1332 Install Grub instead of lilo on grml installation (grml2hd):
1337 adjust grub's configuration file menu.lst:
1338 # $EDITOR /boot/grub/menu.lst
1340 now install grub (usage example for /dev/sda1):
1345 Install Ubuntu using grml:
1347 See https://wiki.ubuntu.com/Installation/FromKnoppix
1349 Resize ext2 / ext3 partition:
1351 # tune2fs -O '^has_journal' /dev/iceX # disable journaling
1352 # fsck.ext2 -v -y -f /dev/iceX # check the filesystem
1353 # resize2fs -p /dev/iceX $SIZE # resize it (adjust $SIZE)
1354 # fdisk /dev/ice # adjust partition in partition table
1355 # fsck.ext2 -v -y -f /dev/iceX # check filesystem again
1356 # resize2fs -p /dev/iceX # resize it to maximum
1357 # tune2fs -j /dev/iceX # re-enable journal
1359 Tune ext2 / ext3 filesystem:
1361 Check partition first:
1363 # tune2fs -l /dev/iceX
1365 If you don't see dir_index in the list, then enable it:
1367 # tune2fs -O dir_index /dev/iceX
1369 Now run e2fsck with the -D option to have the directories optimized:
1371 # e2fsck -D /dev/iceX
1373 Notice: since e2fsprogs (1.39-1) filesystems are created with
1374 directory indexing and on-line resizing enabled by default.
1376 Search for printers via network:
1378 # pconf_detect -m NETWORK -i 192.168.0.1/24
1380 Mount a remote directory via webdav (e.g. Mediacenter of GMX):
1382 # mount -t davfs https://mediacenter.gmx.net/ /mnt/test
1384 System-Profiling using oprofile:
1389 # opcontrol --setup --no-vmlinux --event=CPU_CLK_UNHALTED:500000:0:1:1 --separate=library
1394 Now $DO_SOME_TASKS...
1397 # opcontrol --shutdown
1399 Then take a look at the reports using something like e.g.:
1400 # opreport -t 0.5 --exclude-dependent
1401 # opreport -t 0.5 /path/to/executable_to_check
1402 # opannotate -t 0.5 --source --assembly
1404 Install ATI's fglrx driver for Xorg / X.org:
1406 Usually there already exist drivers for the grml-system:
1407 # apt-get update ; apt-get install fglrx-driver fglrx-kernel-`uname -r`
1409 After installing adjust xorg.conf via running:
1410 # aticonfig --initial --input=/etc/X11/xorg.conf
1412 For more information take a look at http://wiki.grml.org/doku.php?id=ati
1414 Install nvidia driver for Xorg / X.org:
1416 Usually there already exist drivers for the grml-system:
1417 # apt-get update ; apt-get install nvidia-glx nvidia-kernel-`uname -r`
1419 Then switch from module nv to nvidia:
1421 # sed -i 's/Driver.*nv.*/Driver "nvidia"/' /etc/X11/xorg.conf
1423 glxgears - a GLX demo that draws three rotating gears
1425 To print frames per second (fps) use:
1426 % glxgears -printfps
1428 You forgot to boot with 'grml noeject noprompt' to avoid
1429 ejecting and prompting for CD removal when rebooting/halting
1440 If you want to avoid only the prompting part, run:
1448 Mount wikipedia local via fuse:
1450 Adjust configuration:
1451 % cat ~/.wikipediafs/config.xml
1454 <article-cache-time>300</article-cache-time>
1458 <dirname>wikipedia-de</dirname>
1459 <host>de.wikipedia.org</host>
1460 <basename>/w/index.php</basename>
1463 <dirname>wikipedia-en</dirname>
1464 <host>en.wikipedia.org</host>
1465 <basename>/w/index.php</basename>
1470 Mount it (/wiki must exist of course):
1471 % mount.wikipediafs /wiki
1472 % cat /wiki/wikipedia-en/Cat
1475 % fusermount -u /wiki
1477 Remote notification on X via osd (on screen display):
1479 Start osd_server.py at your local host (listens on port 1234 by default):
1482 Then login to a $REMOTEHOST
1483 % ssh -R 1234:localhost:1234 $REMOTEHOST
1485 Now send the text to your local display via running something like:
1486 % echo "text to send" | nc localhost 1234
1488 Very useful when you are waiting for a long running job
1489 but want to do something else in the meanwhile:
1491 % ./configure && make && echo "finished compiling" | netcat localhost 1234
1493 You can use this in external programs as well of course. Examples:
1495 Use osd in centericq:
1497 % cat ~/.centericq/external
1506 if [ -x /usr/bin/socat -a -x /bin/netcat ] ; then
1507 CONTACT_CUSTOM_NICK=$(cat ${CONTACT_INFODIR}/info | head -n 46 | tail -n 1)
1508 osd_msg="*** CenterICQ: new ${EVENT_NETWORK} ${EVENT_TYPE} from ${CONTACT_CUSTOM_NICK} ***"
1509 if echo | socat - TCP4:localhost:1234 &>/dev/null ; then
1510 echo "${osd_msg}" | netcat localhost 1234
1514 Use it in the IRC console client irssi via running:
1518 You can even activate the port forwarding by default globally:
1523 RemoteForward 1234 127.0.0.1:1234
1526 Notice: if you get 'ABORT: Requested font not found' make sure the
1527 requested font is available, running 'LANG=C LC_ALL=C osd_server.py...'
1530 Avoid automatical startup of init scripts via invoke-rc.d:
1532 First of all make sure the package policyrcd-script-zg2 (which
1533 provides the /usr/sbin/policy-rc.d interface) is installed.
1535 In policyrcd-script-zg2's configuration file named
1536 /etc/zg-policy-rc.d.conf the script /usr/sbin/grml-policy-rc.d is
1537 defined as the interface for handling invoke-rc.d's startup policy.
1539 grml-policy-rc.d can be configure via /etc/policy-rc.d.conf. By
1540 default you won't notice any differences to Debian's default
1541 behaviour, except that invoke-rc.d won't be executed if a chroot has
1542 been detected (detection: /proc is missing).
1544 If you want to disable automatical startup of newly installed packages
1545 (done via the invoke-rc.d mechanism) just set EXITSTATUS to '101' in
1546 /etc/policy-rc.d.conf.
1548 To restore the default behaviour set EXITSTATUS back to '0' in
1549 /etc/policy-rc.d.conf.
1551 Install VMware-Tools for grml:
1553 First of all make sure a CD-ROM device in VMware is available.
1555 Mount the CD-ROM device to /mnt/cdrom, then unpack and install
1559 unp /mnt/cdrom/vmware-linux-tools.tar.gz
1560 cd vmware-tools-distrib
1563 /etc/init.d/networking stop
1568 /etc/init.d/networking start
1570 In an X terminal, launch the VMware Tools running:
1574 Some important Postfix stuff
1582 Send all messages in the queue:
1586 Send all messages in the queue for a specific site:
1590 Delete a specific message
1591 # postsuper -d 12345678942
1593 Deletes all messages held in the queue for later delivery
1594 # postsuper -d ALL deferred
1596 Mail queues in postfix:
1598 incoming -> mail who just entered the system
1599 active -> mail to be delivered
1600 deferred -> mail to be delivered later because there were problems
1601 hold -> mail that should not be delivered until released from hold
1603 For configuration of postfix take a look at
1604 /etc/postfix/master.cf - man 5 master
1605 /etc/postfix/main.cf - man 5 postconf
1606 and http://www.postfix.org/documentation.html.
1610 mode 4000 - set user ID (suid):
1612 - for executable files: run as the user who owns the file, instead of the
1613 user who runs the file
1614 - for directories: not used
1616 mode 2000 - set group ID (guid):
1618 - for executable files: run as the group who owns the file, instead of the
1619 group of the user who runs the file
1620 - for directories: when a file is created inside the directory, it belongs
1621 to the group of the directory instead of the default group of the user who
1624 mode 1000 - sticky bit:
1626 - for files: not used
1627 - for directories: only the owner of a file can delete or rename the file
1629 Create MySQL database
1631 # apt-get install mysql-client mysql-server
1633 Run 'mysql' as root - create a database with:
1635 create database grml
1637 Give a user access to the database (without password):
1639 grant all on grml.* to mika;
1641 Give a user access to the database (with password):
1643 grant all on grml.* to enrico identified by "PASSWORD";
1645 Setup an HTTPS website:
1647 Create a certificate:
1649 # mkdir /etc/apache2/ssl
1650 # make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
1652 Create a virtual host on port 443:
1654 <VirtualHost www.foo.invalid:443>
1658 Enable SSL in the VirtualHost:
1661 SSLCertificateFile /etc/apache2/ssl/apache.pem
1663 Enable listening on the HTTPS port (/etc/apache2/ports.conf):
1667 and make sure the SSL module is used:
1671 Useful Apache / Apache2 stuff
1673 Check configuration file via running:
1675 # apache2ctl configtest
1683 # a2enmod modulename
1685 Create tar archive and store it on remote machine:
1687 % tar zcf - /sourcedir | ssh user@targethost "cat >file.tgz"
1689 Pick out and displays images from network traffic:
1693 Install Flash plugin:
1695 # dpkg-reconfigure flashplugin-nonfree
1697 To test a proxy, low level way:
1701 GET http://www.google.com HTTP/1.0 [press enter twice]
1703 Adjust system for use of qemu with kqemu:
1705 Make sure you have all you need:
1706 # apt-get update ; apt-get install qemu grml-kerneladdons-$KERNELVERSION
1711 mknod /dev/kqemu c 250 0
1712 chmod 666 /dev/kqemu
1713 chmod 666 /dev/net/tun
1715 Check kqemu support via starting qemu, press
1716 Ctrl-Alt-2 and entering 'info kqemu'.
1718 (High-Load) Debugging related tools:
1720 mpstat # report processors related statistics
1721 iostat # report CPU statistics and input/output statistics for devices and partitions
1722 vmstat # report virtual memory statistics
1723 slabtop # display kernel slab cache information in real time
1724 atsar # system activity report
1725 dstat # versatile tool for generating system resource statistics
1736 Using WPA for network setup manually:
1738 # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
1740 Adjust the options and configuration file to your needs.
1741 Also take a look at 'grml-network'.
1743 Start X and lock console via exiting:
1745 % startx 2>~/.xsession-errors &| exit
1747 Which process is writing to disk?
1749 # echo 1 > /proc/sys/vm/block_dump
1751 Warning: you must disable syslogd before you do this, or you must
1752 make sure that kernel output is not logged.
1754 When you're done, disable block dump using:
1755 # echo 0 > /proc/sys/vm/block_dump
1758 laptop-mode-tools provides a tool named lm-profiler (laptop mode profiler)
1759 which handles block_dump on its own.
1761 Install initrd via initramfs-tools for currently running kernel:
1763 # update-initramfs -c -t -k $(uname -r)
1765 Install initrd via yaird for currently running kernel:
1767 # yaird -o /boot/initrd.img-$(uname -r)
1769 Install initrd via yaird for specific kernel:
1773 # yaird -o /boot/initrd.img-2.6.15-1-686 2.6.15-1-686
1775 Reinstall package with its original configuration files:
1777 # apt-get install --reinstall -o DPkg::Options::=--force-confmiss -o \
1778 DPkg::Options::=--force-confnew package
1780 grml 0.8 funkenzutzler - rt2x00 drivers:
1782 To avoid conflicts with the other rt2x00-drivers the package rt2x00 (which
1783 includes beta-version drivers) is not installed by default. If you want to
1784 use the kernel modules rt2400pci, rt2500pci, rt2500usb, rt61pci and/or
1785 rt73usb please install the package manually running:
1787 # dpkg -i /usr/src/rt2x00-modules-*.deb
1789 Use Java with jikes and jamvm on grml:
1793 % cp /usr/share/doc/grml-templates/template.java .
1794 % jikes template.java
1797 Notice that grml exports $JIKESPATH (/usr/share/classpath/glibj.zip),
1798 so you do not have to manually run
1799 jikes --bootclasspath /usr/share/classpath/glibj.zip
1801 Online resizing of (Software-)RAID5:
1803 # Initiate a RAID5 setup for testing purposes:
1804 mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/hda1 /dev/hdb1 /dev/hdd1
1806 # Create filesystem, mount md0, create a testfile and save md5sum for
1809 mount /dev/md0 /mnt/test
1810 dd if=/dev/urandom of=/mnt/test/dd bs=512 count=10000
1811 md5sum /mnt/test/dd > md5sum
1813 # Make sure the RAID is synched via checking:
1816 # Now remove one partition:
1817 mdadm /dev/md0 --fail /dev/hdd1 --remove /dev/hdd1
1819 # Delete partition, create a new + bigger one and set partition type to fd
1820 # (Linux raid autodetect):
1823 # And re-add the partition:
1824 mdadm -a /dev/md0 /dev/hdd1
1826 # Make sure the RAID is synched via checking:
1829 # Repeat the steps for all other disks/partitions as well:
1830 mdadm /dev/md0 --fail /dev/hdb1 --remove /dev/hdb1
1832 mdadm -a /dev/md0 /dev/hdb1
1834 mdadm /dev/md0 --fail /dev/hda1 --remove /dev/hda1
1836 mdadm -a /dev/md0 /dev/hda1
1839 # Now resize the RAID5 system online [see 'man mdadm' for details]:
1840 mdadm --detail /dev/md0 | grep -e 'Array Size' -e 'Device Size'
1841 mdadm --grow /dev/md0 -z max
1842 mdadm --detail /dev/md0 | grep -e "Array Size" -e 'Device Size'
1844 # Last step - resize the filesystem (online again):
1847 ext3 online resizing:
1849 Starting with Linux kernel 2.6.10 you can resize ext3 online. With
1850 e2fsprogs >=1.39-1 new filesystems are created with directory indexing and
1851 on-line resizing enabled by default (see /etc/mke2fs.conf).
1855 cfdisk /dev/hda # create a partition with type 8e (lvm)
1856 pvcreate /dev/hda2 # create a physical volume
1857 vgcreate resize_me /dev/hda2 # create volume group
1858 lvcreate -n resize_me -L100 resize_me # create a logical volume
1859 mkfs.ext3 /dev/resize_me/resize_me # now create a new filesystem
1860 mount /dev/resize_me/resize_me /mnt/test # mount the new fs for demonstrating online resizing
1861 df -h # check the size of the partition
1862 lvextend -L+100M /dev/resize_me/resize_me # let's extend the logical volume
1863 resize2fs /dev/resize_me/resize_me # and finally resize the filesystem
1864 df -h # recheck the size of the partition
1866 This also works for Software-RAID. Demo:
1868 mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda2 /dev/hdb1
1870 mount /dev/md0 /mnt/test
1871 mdadm /dev/md0 --fail /dev/hda2 --remove /dev/hda2
1872 cfdisk /dev/hda # adjust partition size for hda2
1873 mdadm /dev/md0 --add /dev/hda2
1874 mdadm /dev/md0 --fail /dev/hdb1 --remove /dev/hdb1
1875 cfdisk /dev/hdb # adjust partition size for hdb1
1876 mdadm /dev/md0 --add /dev/hdb1
1877 mdadm --grow /dev/md0 --size=max
1880 Notice: online resizing works as soon as the kernel can re-read the
1881 partition table. So it works for example with LVM and SW-RAID but not with
1882 a plain device (/dev/[sh]d*). The kernel does not re-read the partition
1883 table if the device is already mounted.
1885 Use vim as an outline editor:
1887 % $PAGER /usr/share/doc/vim-vimoutliner/README.Debian
1891 Monitor directories/files for changes using iwatch
1893 Monitor /tmp for changes:
1896 Monitor files/directories specified in /etc/iwatch.xml
1897 and send mail on changes:
1900 Some often used mdadm commands:
1903 # mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda1 /dev/hdb1
1905 Display details of specific RAID:
1906 # mdadm --detail /dev/md0
1909 Simulating a drive failure by software:
1910 # mdadm --manage --set-faulty /dev/md0 /dev/hda1
1912 Remove disk from RAID:
1913 # mdadm /dev/md0 -r /dev/hda1
1915 Set disk as faulty and remove from RAID:
1916 # mdadm /dev/md0 --fail /dev/hda1 --remove /dev/hda1
1921 Restart a RAID-device:
1924 Add another disk to existing RAID setup (hotadd):
1925 # mdadm /dev/md0 -a /dev/hde1
1926 # mdadm --grow /dev/md0 --raid-devices=4
1928 Assemble and start all arrays:
1929 # mdadm --assemble --scan
1931 Assemble a specific array:
1932 # mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1
1935 # mdadm --assemble --run --force --update=resync /dev/md0 /dev/sda1 /dev/sda2
1938 # mdadm --stop --scan
1940 Scan for and setup arrays automatically:
1941 # mdadm --assemble --scan --auto=yes --verbose
1943 Notice: If the above does not work make sure /etc/mdadm/mdadm.conf contains:
1945 CREATE owner=root group=disk mode=0660 auto=yes
1950 # /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
1953 Monitoring the sw raid
1954 # nohup mdadm --monitor --mail=root@localhost --delay=300 /dev/md0
1956 Producing /etc/mdadm/mdadm.conf:
1957 # mdadm --detail --scan > /etc/mdadm/mdadm.conf
1959 See also: man mdadm | less -p "^EXAMPLES"
1960 http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html
1962 A quick summary of the most commonly used RAID levels:
1965 => 2 disks each 160 GB: 320 GB data
1966 RAID 1: Mirrored Set
1967 => 2 disks each 160 GB: 160 GB data
1968 RAID 5: Striped Set with Parity
1969 => 3 disks each 160 GB: 320 GB data; 160 GB redundancy
1971 Common nested RAID levels:
1972 RAID 01: A mirror of stripes
1973 RAID 10: A stripe of mirrors
1974 RAID 30: A stripe across dedicated parity RAID systems
1975 RAID 100: A stripe of a stripe of mirrors
1977 -- http://en.wikipedia.org/wiki/RAID
1979 Logical Volume Management (LVM) with Linux
1984 | hda1 hdc1 (PV:s on partitions or whole disks)
1990 | usrlv rootlv varlv (LV:s)
1992 | ext3 ext3 xfs (filesystems)
1994 Often used commands:
1995 ~~~~~~~~~~~~~~~~~~~~
1997 Create a physical volume:
1998 # pvcreate /dev/hda2
2000 Create a volume group:
2001 # vgcreate testvg /dev/hda2
2003 Create a logical volume:
2004 # lvcreate -n test_lv -L100 testvg
2006 Resize a logical volume:
2007 # lvextend -L+100M /dev/resize_me/resize_me
2008 # resize2fs /dev/resize_me/resize_me # ext2/3
2009 # xfs_growfs /dev/resize_me/resize_me # xfs
2010 # resize_reiserfs -f /dev/resize_me/resize_me # reiserfs online
2011 # mount -o remount,resize /dev/resize_me/resize_me # jfs
2013 Create a snapshot of a logical volume:
2014 # lvcreate -L 500M --snapshot -n mysnap /dev/testvg/test_lv
2016 Deactivate a volume group:
2017 # vgchange -a n my_volume_group
2019 Actually remove a volume group:
2020 # vgremove my_volume_group
2022 Display information about physical volume:
2023 # pvdisplay /dev/hda1
2025 Remove physical volume:
2026 # vgreduce my_volume_group /dev/hda1
2028 Remove logical volume:
2029 # umount /dev/myvg/homevol
2030 # lvremove /dev/myvg/homevol
2033 http://www.tldp.org/HOWTO/LVM-HOWTO/
2035 How to use APT locally
2037 Sometimes you have lots of packages .deb that you would like to use APT to
2038 install so that the dependencies would be automatically solved. Solution:
2041 dpkg-scanpackages debs /dev/null | gzip > debs/Packages.gz
2042 echo " deb file:/root debs/" >> /etc/apt/sources.list
2043 dpkg-scansources debs | gzip > debs/Sources.gz
2044 echo " deb-src file:/root debs/" >> /etc/apt/sources.list
2046 See also: http://www.debian.org/doc/manuals/apt-howto/ch-basico.en.html
2048 Check filesystem's LABEL:
2051 # vol_id -l /dev/sda1
2053 ext2/3 without vol_id:
2054 # dumpe2fs /dev/sda1 | grep "Filesystem volume name"
2057 # xfs_admin -l /dev/sda1
2059 reiserfs without vol_id:
2060 # debugreiserfs /dev/sda1 | grep UUID
2062 reiser4 without vol_id:
2063 # debugfs.reiser4 /dev/sda1 | grep uuid
2065 Check filesystem's UUID:
2068 # vol_id -u /dev/sda1
2070 ext2/3 without vol_id:
2071 # dumpe2fs /dev/sda1 | grep UUID
2074 # xfs_admin -u /dev/sda1
2076 reiserfs without vol_id:
2077 # debugreiserfs /dev/sda1 | grep LABEL
2079 reiser4 without vol_id:
2080 # debugfs.reiser4 /dev/sda1 | grep label
2082 Disable pdiffs feature of APT:
2085 # echo 'Acquire::PDiffs "false";' >> /etc/apt/apt.conf
2088 # apt-get update -o Acquire::Pdiffs=false
2090 Backup big devices or files and create compressed splitted
2091 image chunks of it using zsplit
2093 Create backup of /dev/sda named archiveofsda_#.spl.zp in directory
2094 /mnt/sda1/backup, split the files up into chunks of 1GB each and set
2095 read/write buffer to 256kB:
2096 # zsplit -b 256 -N archiveofsda -o /mnt/sda1/backup/ -s 1G /dev/sda
2098 Restore the backup using unzsplit:
2099 # unzsplit -D /dev/sda -d archiveofsda
2101 More usage examples: man zsplit + man unzsplit
2103 Measure network performance using ipserf
2109 % iperf -c <server_address> -V
2113 Server with 128k TCP window size:
2116 Client with running for 60 seconds and bidirectional test:
2117 % iperf -c <server_address> -r -w128k -t60
2119 Framebuffer resolutions:
2121 Resolution in pixels
2122 Color depth | 640x480 800x600 1024x768 1280x1024
2123 256 (8bit)| 769 771 773 775
2124 32000 (15bit)| 784 787 790 793
2125 65000 (16bit)| 785 788 791 794
2126 16.7 Mill.(24bit)| 786 789 792 795
2130 Mode 0x0300: 640x400 (+640), 8 bits
2131 Mode 0x0301: 640x480 (+640), 8 bits
2132 Mode 0x0303: 800x600 (+800), 8 bits
2133 Mode 0x0303: 800x600 (+832), 8 bits
2134 Mode 0x0305: 1024x768 (+1024), 8 bits
2135 Mode 0x0307: 1280x1024 (+1280), 8 bits
2136 Mode 0x030e: 320x200 (+640), 16 bits
2137 Mode 0x030f: 320x200 (+1280), 24 bits
2138 Mode 0x0311: 640x480 (+1280), 16 bits
2139 Mode 0x0312: 640x480 (+2560), 24 bits
2140 Mode 0x0314: 800x600 (+1600), 16 bits
2141 Mode 0x0315: 800x600 (+3200), 24 bits
2142 Mode 0x0317: 1024x768 (+2048), 16 bits
2143 Mode 0x0318: 1024x768 (+4096), 24 bits
2144 Mode 0x031a: 1280x1024 (+2560), 16 bits
2145 Mode 0x031b: 1280x1024 (+5120), 24 bits
2146 Mode 0x0330: 320x200 (+320), 8 bits
2147 Mode 0x0331: 320x400 (+320), 8 bits
2148 Mode 0x0332: 320x400 (+640), 16 bits
2149 Mode 0x0333: 320x400 (+1280), 24 bits
2150 Mode 0x0334: 320x240 (+320), 8 bits
2151 Mode 0x0335: 320x240 (+640), 16 bits
2152 Mode 0x0336: 320x240 (+1280), 24 bits
2153 Mode 0x033c: 1400x1050 (+1408), 8 bits
2154 Mode 0x033d: 640x400 (+1280), 16 bits
2155 Mode 0x033e: 640x400 (+2560), 24 bits
2156 Mode 0x0345: 1600x1200 (+1600), 8 bits
2157 Mode 0x0346: 1600x1200 (+3200), 16 bits
2158 Mode 0x034d: 1400x1050 (+2816), 16 bits
2159 Mode 0x035c: 1400x1050 (+5632), 24 bits
2161 Portscan using netcat:
2163 # netcat -v -w2 <host|ip-addr.> 1-1024
2165 Run apt-get but disable apt-listchanges:
2167 APT_LISTCHANGES_FRONTEND=none apt-get ...
2169 Upgrade system but disable apt-listbugs:
2171 APT_LISTBUGS_FRONTEND=none apt-get ...
2173 Set up a Transparent Debian Proxy
2175 Install of apt-cacher, the default config will do:
2176 # apt-get install apt-cacher
2178 Check out the ip address of debian mirror(s).
2179 Then add this to your firewall script:
2181 DEBIAN_MIRRORS="141.76.2.4 213.129.232.18"
2182 for ip in ${DEBIAN_MIRRORS} ; do
2183 ${IPTABLES} -t nat -A PREROUTING -s $subnet -d $ip -p tcp --dport 80 -j REDIRECT --to-port 3142
2186 where ${IPTABLES} is the location of your iptables binary
2187 and $subnet is your internal subnet.
2189 Now everybody in your subnet who does access either
2190 ftp.de.debian.org or ftp.at.debian.org will actually
2191 access your apt-cacher instead.
2193 To use apt-cacher on the router itself, add the following
2194 line to your /etc/apt/apt.conf:
2196 Acquire::http::Proxy "http://localhost:3142/";
2198 Version control using Mercurial
2200 Setting up a Mercurial project:
2203 % hg init # creates .hg
2204 % hg add # add all files
2205 % hg commit # commit all changes, edit changelog entry
2207 Branching and merging:
2209 % hg clone linux linux-work # create a new branch
2214 % hg pull ../linux-work # pull changesets from linux-work
2215 % hg merge # merge the new tip from linux-work into
2216 # (old versions used "hg update -m" instead)
2217 # our working directory
2218 % hg commit # commit the result of the merge
2222 % cat ../p/patchlist | xargs hg import -p1 -b ../p
2230 % hg export 1234 > foo.patch # export changeset 1234
2232 Export your current repo via HTTP with browsable interface:
2234 % hg serve -n "My repo" -p 80
2236 Pushing changes to a remote repo with SSH:
2238 % hg push ssh://user@example.com/~/hg/
2240 Merge changes from a remote machine:
2242 host1% hg pull http://foo/
2243 host2% hg merge # merge changes into your working directory
2245 Set up a CGI server on your webserver:
2246 % cp hgwebdir.cgi ~/public_html/hg/index.cgi
2247 % $EDITOR ~/public_html/hg/index.cgi # adjust the defaults
2249 Mercurial repositories of grml can be found at http://hg.grml.org/
2251 Download binary codecs for mplayer:
2253 # /usr/share/mplayer/scripts/win32codecs.sh
2255 To play encrypted DVDs and if you are living in a country where using
2256 libdvdcss code is not illegal can install Debian package libdvdread3
2257 and use the script /usr/share/doc/libdvdread3/install-css.sh.
2259 Read manpages of uninstalled packages with debman:
2261 % debman -p git-core git
2263 Test network performance using netperf:
2269 # netperf -t TCP_STREAM -H 192.168.0.41
2271 Setup Xen within 20 minutes on Debian/grml
2273 Install relevant software und update grub's menu.lst (Xen does not work with
2274 usual lilo so install grub instead if not done already):
2276 apt-get install linux-image-2.6.18-1-xen-686 xen-hypervisor-3.0.3-1-i386 \
2277 xen-utils-3.0.3-1 xen-tools bridge-utils
2280 Example for installation of Debian etch as DomU:
2283 xen-create-image --debootstrap --dir=/mnt/md1/xen --size=2Gb --memory=512Mb --fs=ext3 \
2284 --cache=yes --dist=etch --hostname=xengrml1 --ip 192.168.1.2 --netmask 255.255.255.0 \
2285 --gateway 192.168.1.1 --initrd=/boot/initrd.img-2.6.18-1-xen-686 \
2286 --kernel=/boot/vmlinuz-2.6.18-1-xen-686 --mirror=http://ftp.at.debian.org/debian/
2290 /etc/init.d/xend start
2291 /etc/init.d/xendomains start
2293 Setup a bridge for network, either manually:
2295 brctl addbr xenintbr
2296 brctl stp xenintbr off
2297 brctl sethello xenintbr 0
2298 brctl setfd xenintbr 0
2299 ifconfig xenintbr 192.168.1.1 netmask 255.255.255.0 up
2301 or via /etc/network/interfaces (run ifup xenintbr to bring up the device then
2305 iface xenintbr inet static
2306 pre-up brctl addbr xenintbr
2307 post-down brctl delbr xenintbr
2309 netmask 255.255.255.0
2314 Setup forwarding (adjust $PUBLIC_IP; for permanet setup use /etc/sysctl.conf and
2315 add the iptables commands to a startup script like /etc/init.d/rc.local):
2317 echo 1 > /proc/sys/net/ipv4/ip_forward
2318 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to $PUBLIC_IP
2319 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to $PUBLIC_IP
2321 Adjust network configuration of Xend:
2323 cat >> /etc/xen/xend-config.sxp << EOF
2324 (network-script network-route)
2325 (vif-bridge xenintbr)
2326 (vif-script vif-bridge)
2329 List domains, start up a DomU, shutdown later again:
2331 xm create -c /etc/xen/xengrml1.cfg
2335 This HowTo is also available online at http://grml.org/xen/
2337 Play tetris with zsh:
2341 bindkey "^Xt" tetris
2343 Now press 'ctrl-x t'.
2345 Set up a router with grml
2347 Run grml-router script:
2350 Install dnsmasq if not already present:
2351 # apt-get update ; apt-get install dnsmasq
2353 Adjust /etc/dnsmasq.conf according to your needs:
2354 # cat >> /etc/dnsmasq.conf << EOF
2357 dhcp-range=19.168.0.124,192.168.0.254,1m # dhcp range
2358 dhcp-option=3,192.168.0.1 # dns server
2359 dhcp-option=1,255.255.255.0 # netmask
2362 Start dnsmasq finally:
2365 Find out which process(es) cause the disk to spin up:
2367 # echo 1 > /proc/sys/vm/block_dump
2369 The command sets a sysctl to cause the kernel to log all disk
2370 writes. Please notice that there is a lot of data.
2372 See: $KERNEL-SOURCE/Documentation/laptop-mode.txt
2374 Also take a look at event-viewer(8).
2376 Display stats about memory allocations performed by a program:
2378 Usage example for 'ls':
2380 % LD_PRELOAD=/lib/libmemusage.so ls > /dev/null