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
590 % mimms mms://file.wmv
596 % avimerge -i *.avi -o blub.avi
600 % cat *.mpg > blub.mpg
604 % mencoder file1.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -mc 0 -noskip -forceidx -o file1.avi
605 % mencoder file2.wmv -ovc lavc -oac lavc -ofps 25 -srate 48000 -mc 0 -noskip -forceidx -o file2.avi
606 % avimerge -i file1.avi file2.avi -o blub.avi
608 Display MS-Word file:
610 % strings file.doc | fmt | less
616 Convert MS-Word file to postscript:
618 % antiword -p a4 file.doc > file.ps
620 Convert manual to postscript:
622 % zcat /usr/share/man/man1/zsh.1.gz | groff -man > zsh.1.ps
624 % man -t zsh > zsh.ps
628 % dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8
630 Read HTTP via netcat:
632 echo "GET / HTTP/1.0\r\n\r\n" | netcat $DOMAIN 80
634 Get X ressources for specific program:
636 % xrdb -q |grep -i xterm
638 Get windowid of specific X-window:
640 % xwininfo -int | grep "Window id:" | cut -d ' ' -f 4
642 Get titel of specific X-window:
646 check locale - LC_MESSAGES:
648 % locale -ck LC_MESSAGES
650 Create random password:
654 % dd if=/dev/urandom bs=14 count=1 | hexdump | cut -c 9-
656 Get tarballs of various Linux Kernel trees:
659 to get the current stable 2.6 release
662 to get a list of all supported trees
664 Transfer your SSH public key to another host:
666 % ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote-system
668 % cat $HOME/.ssh/id_rsa.pub | ssh user@remote-system 'cat >> .ssh/authorized_keys'
670 Update /etc/fstab entries:
674 See "man grml-rebuildfstab" for more details about
675 generation of /etc/fstab (including stuff like
676 fs LABELs / UUIDs,...).
678 Fetch and potentially change SCSI device parameters:
684 reclaim disk space by linking identical files together:
688 Find and remove duplicate files:
692 Perform layer 2 attacks:
698 Guess PC-type hard disk partitions / partition table:
702 Perform a standard scan:
705 Write back the guessed table:
706 # gpart -W /dev/ice /dev/ice
708 Develop, test and use exploit code with the Metasploit Framework:
711 wget http://framework-mirrors.metasploit.com/msf/downloader/framework-3.0.tar.gz
712 unp framework-3.0.tar.gz
716 Useful documentation:
718 % w3m /usr/share/doc/Debian/reference/reference.en.html
720 % xpdf =(zcat /usr/share/doc/Debian/reference/reference.en.pdf.gz)
722 http://grml.org/docs/ grml Documentation
723 http://wiki.grml.org/ grml Wiki
724 http://www.debian.org/doc/ Debian Documentation
725 http://wiki.debian.org/ Debian Wiki
726 http://www.gentoo.org/doc/en/ Gentoo Documentation
727 http://gentoo-wiki.com/ Gentoo Wiki
728 http://www.tldp.org/ The Linux Documentation Project
732 % fortune debian-hints
736 % fortune debian-hints
737 % dpkg -L funny-manpages
739 Backup master boot record (MBR):
741 # dd if=/dev/ice of=/tmp/backup_of_mbr bs=512 count=1
743 Backup partition table:
745 # sfdisk -d /dev/hda > hda.out
747 Restore partition table:
749 # sfdisk /dev/hda < hda.out
751 Clone disk via network using netcat:
754 # nc -vlp 30000 > hda1.img
756 # dd if=/dev/hda1 | nc -vq 0 192.168.1.2 30000
758 Adjust blocksize (dd's option bs=...) and include 'gzip -c'
761 # dd if=/dev/hda1 bs=32M | gzip -c | nc -vq 0 192.168.1.2 30000
763 Backup specific directories via cpio and ssh:
765 # for f in directory_list; do find $f >> backup.list done
766 # cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
770 This one uses CPU cycles on the remote server to compare the files:
771 # ssh target_address cat remotefile | diff - localfile
772 # cat localfile | ssh target_address diff - remotefile
774 This one uses CPU cycles on the local server to compare the files:
775 # ssh target_address cat <localfile "|" diff - remotefile
777 Useful tools for cloning / backups:
779 * dd: convert and copy a file
780 * dd_rescue: copies data from one file (or block device) to another
781 * pcopy: a replacement for dd
782 * partimage: back up and restore disk partitions
783 * dirvish: Disk based virtual image network backup system
784 * devclone: in-place filesystem conversion -- device cloning
785 * ntfsclone: efficiently clone, image, restore or rescue an NTFS
786 * dump: ext2/3 filesystem backup
787 * udpcast: multicast file transfer tool
788 * cpio: copy files to and from archives
789 * pax: read and write file archives and copy directory hierarchies
790 * netcat / ssh / tar / gzip / bzip2: additional helper tools
792 Use grml as a rescue system:
796 * dd: convert and copy a file
797 * ddrescue: copies data from one file or block device to another
798 * partimage: Linux/UNIX utility to save partitions in a compressed image file
799 * cfdisk: Partition a hard drive
800 * nparted: Newt and GNU Parted based disk partition table manipulator
801 * parted-bf: The GNU Parted disk partition resizing program, small version
802 * testdisk: Partition scanner and disk recovery tool
803 * gpart: Guess PC disk partition table, find lost partitions
807 * e2fsprogs: ext2 file system utilities and libraries
808 * e2tools: utilities for manipulating files in an ext2/ext3 filesystem
809 * e2undel: Undelete utility for the ext2 file system
810 * ext2resize: an ext2 filesystem resizer
811 * recover: Undelete files on ext2 partitions
815 * reiser4progs: administration utilities for the Reiser4 filesystem
816 * reiserfsprogs: User-level tools for ReiserFS filesystems
820 * xfsdump: Administrative utilities for the XFS filesystem
821 * xfsprogs: Utilities for managing the XFS filesystem
825 * jfsutils: utilities for managing the JFS filesystem
829 * ntfsprogs: tools for doing neat things in NTFS partitions from Linux
830 * salvage-ntfs: free NTFS data recovery tools
831 * scrounge-ntfs: data recovery program for NTFS file systems
832 * ntfsresize: resize ntfs partitions
834 Get ASCII value of a character with zsh:
836 % char=N ; print $((#char))
838 Convert a collection of mp3 files to wave or cdr using zsh:
840 % for i (./*.mp3){mpg321 --w - $i > ${i:r}.wav}
842 Convert images (foo.gif to foo.png) using zsh:
844 % for i in **/*.gif; convert $i $i:r.png
846 Remove all "non txt" files using zsh:
850 Remote Shell Using SSH:
853 % ssh -NR 3333:localhost:22 user@yourhost
856 % ssh user@localhost -p 3333
858 Reverse Shell with Netcat:
861 % netcat -v -l -p 3333 -e /bin/sh
864 % netcat 192.168.0.1 3333
866 Reverse Shell via SSH:
868 local host (inside the network):
869 % ssh -NR 1234:localhost:22 remote_host
871 remote host (outside the network):
872 % ssh localhost -p 1234
874 Remove empty directories with zsh:
876 % rmdir ./**/*(/od) 2> /dev/null
878 Find all the empty directories in a tree with zsh:
882 Find all files without a valid owner and change ownership with zsh:
884 % chmod user /**/*(D^u:${(j.:u:.)${(f)"$(</etc/passwd)"}%%:*}:)
886 Display the 5-10 last modified files with zsh:
888 % print -rl -- /path/to/dir/**/*(D.om[5,10])
890 Find and list the ten newest files in directories and subdirs (recursive) with zsh:
892 % print -rl -- **/*(Dom[1,10])
894 Find most recent file in a directory with zsh:
896 % setopt dotglob ; print directory/**/*(om[1])
898 Tunnel all traffic through an external server:
900 % ssh -ND 3333 username@external.machine
902 Then set the SOCKS4/5 proxy to localhost:3333.
903 Check whether it's working by surfing e.g. to checkip.dyndns.org
905 Tunnel everything through SSH via tsocks:
907 set up the SSH proxy on the client side:
909 % ssh -ND 3333 user@remote.host.example.com
911 Adjust /etc/tsocks.conf afterwards (delete all other lines):
916 For programs who natively support proxying connections (e.g. Mozilla
917 Firefox) you can now set the proxy address to localhost port 3333.
919 All other programs which's connections you want to tunnel through your
920 external host are prefixed with tsocks, e.g.:
922 % tsocks netcat example.com 80
923 % tsocks irssi -c irc.quakenet.eu.org -p 6667
925 If you call tsocks without parameters it executes a shell witht the
926 LD_PRELOAD environment variable already set and exported.
928 smartctl - control and monitor utility for harddisks using Self-Monitoring,
929 Analysis and Reporting Technology (SMART):
931 # smartctl --all /dev/ice
933 If you want to use smartctl on S-ATA (sata) disks use:
935 # smartctl -d ata --all /dev/sda
938 # smartctl -t offline /dev/ice
941 # smartctl -t short /dev/ice
943 Display results of test:
944 # smartctl -l selftest /dev/ice
946 Query device information:
947 # smartctl -i /dev/ice
949 Mount a BSD / Solaris partition:
951 # mount -t ufs -o ufstype=ufs2 /dev/hda1 /mnt/hda1
953 Use ufstype 44bsd for FreeBSD, NetBSD, OpenBSD (read-write).
954 Use ufstype ufs2 for >= FreeBSD 5.x (read-only).
955 Use ufstype sun for SunOS (Solaris) (read-write).
956 Use ufstype sunx86 for SunOS for Intel (Solarisx86) (read-write).
958 See /usr/share/doc/linux-doc-$(uname -r)/Documentation/filesystems/ufs.txt.gz
961 Read BIOS (and or BIOS) password:
963 # dd if=/dev/mem bs=512 skip=2 count=1 | hexdump -C | head
965 Clone one of the kernel trees via git:
967 git clone rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
968 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
969 This path defines the tree. See http://kernel.org/git/ for an overview.
971 Mount filesystems over ssh protocol:
973 % sshfs user@host:/remote_dir /mnt/test
977 % fusermount -u /mnt/test
979 (Notice: requires fuse kernel module)
981 Install Gentoo using grml:
983 See http://www.gentoo.org/doc/en/altinstall.xml
985 Install (plain) Debian (sarge release) via grml:
987 Assuming you want to install Debian to sda1:
989 mkfs.ext3 /dev/sda1 # make an ext3 filesystem on /dev/sda1
990 mount -o rw,suid,dev /dev/sda1 /mnt/test # now mount the new partition
991 debootstrap sarge /mnt/test ftp://ftp.tugraz.at/mirror/debian # get main packages from a debian-mirror
992 chroot /mnt/test /bin/bash # let's chroot into the new system
993 mount -t devpts none /dev/pts # ...otherwise running base-config might fail ("Terminated" or "openpty failed")
994 mount -t proc none /proc # make sure we also have a mounted /proc
995 base-config # now configure some main settings
996 vi /etc/mkinitrd/mkinitrd.conf # adjust $ROOT (to /dev/sda1) for your new partition, autodetection will fail in chroot
997 cd /dev ; ./MAKEDEV generic # make sure we have all necessary devices for lilo
998 apt-get install lilo linux-image-2.6.12-1-386 # install lilo and a kernel which fits your needs
999 cp /usr/share/doc/lilo/examples/conf.sample /etc/lilo.conf # let's use a template
1000 vi /etc/lilo.conf && lilo # adjust the file for your needs and run lilo afterwards
1001 umount /proc ; umount /dev/pts # we do not need them any more
1002 exit # now leave chroot
1003 cp /etc/hosts /etc/fstab /mnt/test/etc/ # you might want to take the existing files...
1004 cp /etc/network/interfaces /mnt/test/etc/network/ # ...from the running grml system for your new system
1005 umount /mnt/test && reboot # unmount partition and reboot...
1007 See also: http://www.debian.org/releases/stable/i386/apcs04.html.en
1008 Avoid all of the above steps - use grml-debootstrap(8) instead!
1010 Install (plain) Debian (etch release) via grml
1012 Assuming you want to install Debian to sda1:
1014 mkfs.ext3 /dev/sda1 # make an ext3 filesystem on /dev/sda1
1015 mount -o rw,suid,dev /dev/sda1 /mnt/test # now mount the new partition
1016 debootstrap etch /mnt/test ftp://ftp.tugraz.at/mirror/debian # get main packages from a debian-mirror
1017 chroot /mnt/test /bin/bash # let's chroot into the new system
1018 mount -t proc none /proc # make sure we have a mounted /proc
1019 apt-get install locales console-data # install locales
1020 dpkg-reconfigure locales console-data # adjust locales to your needs
1021 apt-get install vim most zsh screen less initrd-tools file grub \
1022 usbutils pciutils bzip2 sysfsutils dhcp3-client resolvconf \
1023 strace lsof w3m # install useful software
1024 apt-get install linux-headers-2.6-686 linux-image-686 # install current kernel
1026 echo "127.0.0.1 localhost" > /etc/hosts # adjust /etc/hosts and network:
1027 cat >> /etc/network/interfaces << EOF
1028 iface lo inet loopback
1029 iface eth0 inet dhcp
1034 ln -sf /usr/share/zoneinfo/Europe/Vienna /etc/localtime # adjust timezone and /etc/fstab:
1035 cat >> /etc/fstab << EOF
1036 sysfs /sys sysfs auto 0 0
1037 proc /proc proc defaults 0 0
1038 /dev/sda1 / ext3 defaults,errors=remount-ro 0 1
1039 /dev/sda2 none swap sw 0 0
1040 /dev/cdrom /mnt/cdrom0 iso9660 ro,user,noauto 0 0
1042 passwd # set password of user root
1044 mkdir /boot/grub # setup grub
1045 cp /usr/share/doc/grub/examples/menu.lst /boot/grub
1046 cat >> /boot/grub/menu.lst << EOF
1047 title Debian Etch, kernel 2.6.18-3-686 (on /dev/sda1)
1049 kernel /boot/vmlinuz-2.6.18-3-686 root=/dev/sda1 ro
1050 initrd /boot/initrd.img-2.6.18-3-686
1052 vim /boot/grub/menu.lst # adjust grub configuration to your needs
1053 cd /dev && MAKEDEV generic # create default devices
1054 cp -i /usr/lib/grub/i386-pc/* /boot/grub/ # copy stage-files to /boot/grub/
1055 grub install # now install grub, run in grub-cmdline following commands:
1059 umount -a # unmount all filesystems in chroot and finally:
1060 exit # exit the chroot and:
1063 If you want to use lilo instead of grub take a look at
1064 /usr/share/doc/lilo/examples/conf.sample or use the following template:
1066 cat > /etc/lilo.conf << EOF
1067 # This allows booting from any partition on disks with more than 1024 cylinders.
1070 # Specifies the boot device
1073 # Specifies the device that should be mounted as root.
1076 # use Debian on software raid:
1077 # raid-extra-boot=mbr-only
1085 image=/boot/vmlinuz-2.6.18-grml
1089 initrd=/boot/initrd.img-2.6.18-grml
1092 See also: http://www.debian.org/releases/stable/i386/apcs04.html.en
1093 Avoid all of the above steps - use grml-debootstrap(8) instead!
1095 Convert files from Unicode / UTF-8 to ISO:
1097 % iconv -f utf8 -t iso-8859-15 < utffile > isofile
1101 % iconv -f iso-8859-15 -t utf8 < isofile > utffile
1103 Assign static setup for network cards (eth0 and eth1) via udev:
1105 First method - manual:
1106 ~~~~~~~~~~~~~~~~~~~~~~
1107 Get information for SYSFS address:
1108 # udevinfo -a -p /sys/class/net/eth0/ | grep address
1110 Then create udev rules:
1111 # cat /etc/udev/network.rules
1113 KERNEL=="eth*", SYSFS{address}=="00:00:00:00:00:01", NAME="wlan0"
1114 KERNEL=="eth*", SYSFS{address}=="00:00:00:00:00:02", NAME="lan0"
1115 # do not match eth* drivers but also e.g. firewire stuff:
1116 ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:00:00:00:00:03", NAME="1394"
1118 Now activate the rules:
1119 # cd /etc/udev/rules.d/ && ln -s ../network.rules z35_network.rules
1121 Unload the drivers, restart udev and load the drivers again to activate
1124 Second method - automatic:
1125 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1126 Run /lib/udev/write_net_rules shipped with recent udev versions:
1128 # INTERFACE=wlan1 /lib/udev/write_net_rules 00:00:00:00:00:04
1130 This command will create /etc/udev/rules.d/z25_persistent-net.rules containing:
1132 SUBSYSTEM=="net", DRIVER=="?*", SYSFS{address}=="00:00:00:00:00:04", NAME=wlan1
1134 See /usr/share/doc/udev/writing_udev_rules/index.html for more information.
1136 Change the suffix from *.sh to *.pl using zsh:
1139 % zmv -W '*.sh' '*.pl'
1141 Generate SSL certificate:
1143 Create self signed certificate (adjust /etc/ssl/openssl.cnf if necessary):
1144 # openssl req -x509 -newkey rsa:1024 -keyout keyfile -out certfile -days 9999 -nodes
1147 # openssl x509 -in certfile -text
1149 Verify against CA certificate:
1150 # openssl verify -CAfile cacert.crt -verbose -purpose sslserver
1152 Generate 2048bit RSA-key:
1153 # openssl req -new -x509 -keyout pub-sec-key.pem -out pub-sec-key.pem -days 365 -nodes
1155 As before but add request to existing key pub-sec-key.pem:
1156 # openssl req -new -out request.pem -keyin pub-sec-key.pem
1158 Show request request.pem:
1159 # openssl req -text -noout -in request.pem
1161 Verify signature of request request.pem:
1162 # openssl req -verify -noout -in request.pem
1164 Generate SHA1 fingerprint (modulo key) of request.pem:
1165 # openssl req -noout -modulus -in request.pem | openssl sha1 -c
1167 Generate 2048bit RSA-key and put it to pub-sec-key.pem. Save self signed certificate in self-signed-certificate.pem:
1168 # openssl req -x509 -days 365 -newkey rsa:2048 -out self-signed-certificate.pem -keyout pub-sec-key.pem
1170 As before but create self signed certificate based on existing key pub-sec-key.pem:
1171 # openssl req -x509 -days 365 -new -out self-signed-certificate.pem -key pub-sec-key.pem
1173 Generate new request out of existing self signed certificate:
1174 # openssl x509 -x509toreq -in self-signed-certificate.pem -signkey pub-sec-key.pem -out request.pem
1176 Display certificate self-signed-certificate.pem in plaintext:
1177 # openssl x509 -text -noout -md5 -in self-signed-certificate.pem
1179 Check self signed certificate:
1180 # openssl verify -issuer_checks -CAfile self-signed-certificate.pem self-signed-certificate.pem
1182 Estable OpenSSL-connection using self-signed-certificate.pem and display certificate:
1183 # openssl s_client -showcerts -CAfile self-signed-certificate.pem -connect www.example.com:443
1185 Generate ssl-certificate for use with apache2:
1187 export RANDFILE=/dev/random
1188 mkdir /etc/apache2/ssl/
1189 openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
1190 chmod 600 /etc/apache2/ssl/apache.pem
1192 Also take a look at make-ssl-cert (debconf wrapper for openssl):
1194 # /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/apache.pem
1196 and mod-ssl-makecert (utility to create SSL certificates in /etc/apache/ssl.*/).
1198 Change Windows NT password(s):
1200 # mount -o rw /mnt/hda1
1201 # cd /mnt/hda1/WINDOWS/system32/config/
1202 # chntpw SAM SECURITY system
1204 Notice: if mounting the partition read-write did not work (check syslog!)
1205 try using mount.ntfs-3g instead: mount.ntfs-3g /dev/hda1 /mnt/hda1
1207 (Be careful with deactivating syskey!)
1209 glark - replacement for grep written in Ruby:
1211 A replacement for (or supplement to) the grep family, glark offers:
1212 Perl compatible regular expressions, highlighting of matches,
1213 context around matches, complex expressions and automatic exclusion
1218 % glark -y keyword file # display only the region that matched, not the entire line
1219 % glark -o format print *.h # search for either "printf" or "format"
1221 More information: man glark
1223 Find CD burning device(s):
1225 General information on CD-ROM:
1226 % cat /proc/sys/dev/cdrom/info
1228 Scan using ATA Packet specific SCSI transport:
1229 # cdrecord -dev=ATA -scanbus
1230 # cdrecord-prodvd -s -scanbus dev=ATA
1232 Get specific information for /dev/ice:
1233 # cdrecord dev=/dev/ice -scanbus
1235 Create devices in /dev on udev:
1237 For example create md devices (/dev/md0, /dev/md1,...):
1238 # cd /dev ; WRITE_ON_UDEV=1 ./MAKEDEV md
1240 Identify network device (NIC):
1242 # ethtool -i $DEVICE
1244 Show NIC statistics:
1246 # ethtool -S $DEVICE
1248 If your NIC shows some aging signs, you may want to be sure:
1250 # ethtool -t $DEVICE
1252 Disable TCP/UDP checksums:
1254 # ethtool -K $DEVICE tx off
1256 grml2hd seems to hang? Getting Squashfs errors? Problems while booting?
1258 Switch to tty12 and take a look at the syslog. If you see something like:
1260 SQUASHFS error: zlib_fs returned unexpected result 0x........
1261 SQUASHFS error: Unable to read cache block [.....]
1262 SQUASHFS error: Unable to read inode [.....]
1264 your ISO/CD-ROM very probably is not ok. Verify it via booting with grml testcd.
1265 Check your CD low-level via running:
1267 # readcd -c2scan dev=/dev/cdrom
1269 If the medium really is ok and it still fails try to boot with deactivated DMA
1270 via using grml nodma at the bootprompt.
1272 Write a Microsoft compatible boot record (MBR) using ms-sys
1274 Write a Windows 2000/XP/2003 MBR to device:
1276 # ms-sys -m /dev/ice
1278 Use a Vodafone 3G Datacard (UMTS) with Linux:
1280 Plug in your vodafone card and check in syslog whether the appropriate
1281 (probably /dev/ttyUSB0 or /dev/noz0 when using newer vodafone cards) has
1282 been created. If so run:
1285 # wvdial --config /etc/wvdial.conf.umts $PROFILE
1288 # gcom -d /dev/ttyUSB0
1289 # wvdial --config /etc/wvdial.conf.umts a1usb
1292 # wvdial --config /etc/wvdial.conf.umts tmnozomi
1295 # wvdial --config /etc/wvdial.conf.umts dreiusb
1297 Notice: newer vodafone cards require the nozomi driver. Run 'modprobe nozomi' on
1300 hdparm - get/set hard disk parameters
1302 Display the identification info that was obtained from the drive at boot time,
1304 # hpdarm -i /dev/ice
1306 Request identification info directly from the drive:
1307 # hpdarm -I /dev/ice
1309 Perform timings of device + cache reads for benchmark and comparison purposes:
1310 # hdparm -tT /dev/ice
1312 bonnie++ - program to test hard drive performance.
1314 # mkdir /mnt/benchmark
1315 # mount /dev/ice /mnt/benchmark
1316 # chmod go+w /mnt/benchmark
1317 # bonnie -u grml -d /mnt/benchmark -s 2000M
1319 Use gizmo with a bluetooth headset:
1321 % DEVICE="/dev/dsp$(awk '/- BT Headset/ {print $1}' /proc/asound/cards)"
1322 % gizmo --mic $DEVICE --speaker $DEVICE
1324 Scan a v4l device for TV stations:
1326 % scantv -c /dev/video0 -C /dev/vbi0 -o ~/.xawtv
1328 Then running xawtv should work:
1332 Run apt-get with timeout of 3 seconds:
1334 # apt-get -o acquire::http::timeout=3 update
1336 Debian GNU/Linux device driver check page
1338 % $BROWSER http://kmuto.jp/debian/hcl/index.cgi
1340 Use dd with status line:
1342 # dd if=/dev/ice conv=noerror,notrunc,sync | buffer -S 100k | dd of=/tmp/file
1344 Generate a 512k file of random data with status bar:
1346 % dd if=/dev/random bs=1024 count=512 | bar -s 512k -of ./random
1348 Install Grub instead of lilo on grml installation (grml2hd):
1353 adjust grub's configuration file menu.lst:
1354 # $EDITOR /boot/grub/menu.lst
1356 now install grub (usage example for /dev/sda1):
1361 Install Ubuntu using grml:
1363 See https://wiki.ubuntu.com/Installation/FromKnoppix
1365 Resize ext2 / ext3 partition:
1367 # tune2fs -O '^has_journal' /dev/iceX # disable journaling
1368 # fsck.ext2 -v -y -f /dev/iceX # check the filesystem
1369 # resize2fs -p /dev/iceX $SIZE # resize it (adjust $SIZE)
1370 # fdisk /dev/ice # adjust partition in partition table
1371 # fsck.ext2 -v -y -f /dev/iceX # check filesystem again
1372 # resize2fs -p /dev/iceX # resize it to maximum
1373 # tune2fs -j /dev/iceX # re-enable journal
1375 Tune ext2 / ext3 filesystem:
1377 Check partition first:
1379 # tune2fs -l /dev/iceX
1381 If you don't see dir_index in the list, then enable it:
1383 # tune2fs -O dir_index /dev/iceX
1385 Now run e2fsck with the -D option to have the directories optimized:
1387 # e2fsck -D /dev/iceX
1389 Notice: since e2fsprogs (1.39-1) filesystems are created with
1390 directory indexing and on-line resizing enabled by default.
1392 Search for printers via network:
1394 # pconf_detect -m NETWORK -i 192.168.0.1/24
1396 Mount a remote directory via webdav (e.g. Mediacenter of GMX):
1398 # mount -t davfs https://mediacenter.gmx.net/ /mnt/test
1400 System-Profiling using oprofile:
1405 # opcontrol --setup --no-vmlinux --event=CPU_CLK_UNHALTED:500000:0:1:1 --separate=library
1410 Now $DO_SOME_TASKS...
1413 # opcontrol --shutdown
1415 Then take a look at the reports using something like e.g.:
1416 # opreport -t 0.5 --exclude-dependent
1417 # opreport -t 0.5 /path/to/executable_to_check
1418 # opannotate -t 0.5 --source --assembly
1420 Install ATI's fglrx driver for Xorg / X.org:
1422 Usually there already exist drivers for the grml-system:
1423 # apt-get update ; apt-get install fglrx-driver fglrx-kernel-`uname -r`
1425 After installing adjust xorg.conf via running:
1426 # aticonfig --initial --input=/etc/X11/xorg.conf
1428 For more information take a look at http://wiki.grml.org/doku.php?id=ati
1430 Install nvidia driver for Xorg / X.org:
1432 Usually there already exist drivers for the grml-system:
1433 # apt-get update ; apt-get install nvidia-glx nvidia-kernel-`uname -r`
1435 Then switch from module nv to nvidia:
1437 # sed -i 's/Driver.*nv.*/Driver "nvidia"/' /etc/X11/xorg.conf
1439 glxgears - a GLX demo that draws three rotating gears
1441 To print frames per second (fps) use:
1442 % glxgears -printfps
1444 You forgot to boot with 'grml noeject noprompt' to avoid
1445 ejecting and prompting for CD removal when rebooting/halting
1456 If you want to avoid only the prompting part, run:
1464 Mount wikipedia local via fuse:
1466 Adjust configuration:
1467 % cat ~/.wikipediafs/config.xml
1470 <article-cache-time>300</article-cache-time>
1474 <dirname>wikipedia-de</dirname>
1475 <host>de.wikipedia.org</host>
1476 <basename>/w/index.php</basename>
1479 <dirname>wikipedia-en</dirname>
1480 <host>en.wikipedia.org</host>
1481 <basename>/w/index.php</basename>
1486 Mount it (/wiki must exist of course):
1487 % mount.wikipediafs /wiki
1488 % cat /wiki/wikipedia-en/Cat
1491 % fusermount -u /wiki
1493 Remote notification on X via osd (on screen display):
1495 Start osd_server.py at your local host (listens on port 1234 by default):
1498 Then login to a $REMOTEHOST
1499 % ssh -R 1234:localhost:1234 $REMOTEHOST
1501 Now send the text to your local display via running something like:
1502 % echo "text to send" | nc localhost 1234
1504 Very useful when you are waiting for a long running job
1505 but want to do something else in the meanwhile:
1507 % ./configure && make && echo "finished compiling" | netcat localhost 1234
1509 You can use this in external programs as well of course. Examples:
1511 Use osd in centericq:
1513 % cat ~/.centericq/external
1522 if [ -x /usr/bin/socat -a -x /bin/netcat ] ; then
1523 CONTACT_CUSTOM_NICK=$(cat ${CONTACT_INFODIR}/info | head -n 46 | tail -n 1)
1524 osd_msg="*** CenterICQ: new ${EVENT_NETWORK} ${EVENT_TYPE} from ${CONTACT_CUSTOM_NICK} ***"
1525 if echo | socat - TCP4:localhost:1234 &>/dev/null ; then
1526 echo "${osd_msg}" | netcat localhost 1234
1530 Use it in the IRC console client irssi via running:
1534 You can even activate the port forwarding by default globally:
1539 RemoteForward 1234 127.0.0.1:1234
1542 Notice: if you get 'ABORT: Requested font not found' make sure the
1543 requested font is available, running 'LANG=C LC_ALL=C osd_server.py...'
1546 Avoid automatical startup of init scripts via invoke-rc.d:
1548 First of all make sure the package policyrcd-script-zg2 (which
1549 provides the /usr/sbin/policy-rc.d interface) is installed.
1551 In policyrcd-script-zg2's configuration file named
1552 /etc/zg-policy-rc.d.conf the script /usr/sbin/grml-policy-rc.d is
1553 defined as the interface for handling invoke-rc.d's startup policy.
1555 grml-policy-rc.d can be configure via /etc/policy-rc.d.conf. By
1556 default you won't notice any differences to Debian's default
1557 behaviour, except that invoke-rc.d won't be executed if a chroot has
1558 been detected (detection: /proc is missing).
1560 If you want to disable automatical startup of newly installed packages
1561 (done via the invoke-rc.d mechanism) just set EXITSTATUS to '101' in
1562 /etc/policy-rc.d.conf.
1564 To restore the default behaviour set EXITSTATUS back to '0' in
1565 /etc/policy-rc.d.conf.
1567 Install VMware-Tools for grml:
1569 First of all make sure a CD-ROM device in VMware is available.
1571 Mount the CD-ROM device to /mnt/cdrom, then unpack and install
1575 unp /mnt/cdrom/vmware-linux-tools.tar.gz
1576 cd vmware-tools-distrib
1579 /etc/init.d/networking stop
1584 /etc/init.d/networking start
1586 In an X terminal, launch the VMware Tools running:
1590 Some important Postfix stuff
1598 Send all messages in the queue:
1602 Send all messages in the queue for a specific site:
1606 Delete a specific message
1607 # postsuper -d 12345678942
1609 Deletes all messages held in the queue for later delivery
1610 # postsuper -d ALL deferred
1612 Mail queues in postfix:
1614 incoming -> mail who just entered the system
1615 active -> mail to be delivered
1616 deferred -> mail to be delivered later because there were problems
1617 hold -> mail that should not be delivered until released from hold
1619 For configuration of postfix take a look at
1620 /etc/postfix/master.cf - man 5 master
1621 /etc/postfix/main.cf - man 5 postconf
1622 and http://www.postfix.org/documentation.html.
1626 mode 4000 - set user ID (suid):
1628 - for executable files: run as the user who owns the file, instead of the
1629 user who runs the file
1630 - for directories: not used
1632 mode 2000 - set group ID (guid):
1634 - for executable files: run as the group who owns the file, instead of the
1635 group of the user who runs the file
1636 - for directories: when a file is created inside the directory, it belongs
1637 to the group of the directory instead of the default group of the user who
1640 mode 1000 - sticky bit:
1642 - for files: not used
1643 - for directories: only the owner of a file can delete or rename the file
1645 Create MySQL database
1647 # apt-get install mysql-client mysql-server
1649 Run 'mysql' as root - create a database with:
1651 create database grml
1653 Give a user access to the database (without password):
1655 grant all on grml.* to mika;
1657 Give a user access to the database (with password):
1659 grant all on grml.* to enrico identified by "PASSWORD";
1661 Setup an HTTPS website:
1663 Create a certificate:
1665 # mkdir /etc/apache2/ssl
1666 # make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
1668 Create a virtual host on port 443:
1670 <VirtualHost www.foo.invalid:443>
1674 Enable SSL in the VirtualHost:
1677 SSLCertificateFile /etc/apache2/ssl/apache.pem
1679 Enable listening on the HTTPS port (/etc/apache2/ports.conf):
1683 and make sure the SSL module is used:
1687 Useful Apache / Apache2 stuff
1689 Check configuration file via running:
1691 # apache2ctl configtest
1699 # a2enmod modulename
1701 Create tar archive and store it on remote machine:
1703 % tar zcf - /sourcedir | ssh user@targethost "cat >file.tgz"
1705 Pick out and displays images from network traffic:
1709 Install Flash plugin:
1711 # dpkg-reconfigure flashplugin-nonfree
1713 To test a proxy, low level way:
1717 GET http://www.google.com HTTP/1.0 [press enter twice]
1719 Adjust system for use of qemu with kqemu:
1721 Make sure you have all you need:
1722 # aptitude update ; aptitude install qemu kqemu-modules-$(uname -r)
1727 mknod /dev/kqemu c 250 0
1728 chmod 666 /dev/kqemu
1729 chmod 666 /dev/net/tun
1731 Check kqemu support via starting qemu, press
1732 Ctrl-Alt-2 and entering 'info kqemu'.
1734 (High-Load) Debugging related tools:
1736 mpstat # report processors related statistics
1737 iostat # report CPU statistics and input/output statistics for devices and partitions
1738 vmstat # report virtual memory statistics
1739 slabtop # display kernel slab cache information in real time
1740 atsar # system activity report
1741 dstat # versatile tool for generating system resource statistics
1752 Using WPA for network setup manually:
1754 # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
1756 Adjust the options and configuration file to your needs.
1757 Also take a look at 'grml-network'.
1759 Start X and lock console via exiting:
1761 % startx 2>~/.xsession-errors &| exit
1763 Which process is writing to disk and/or causes the disk to spin up?
1765 First of all use lsof to check what's going on. Does not help? ->
1767 # echo 1 > /proc/sys/vm/block_dump
1769 The command sets a sysctl to cause the kernel to log all disk
1770 writes. Please notice that there is a lot of data. So please
1771 disable syslogd/syslog-ng before you do this, or you must make
1772 sure that kernel output is not logged.
1774 When you're done, disable block dump using:
1775 # echo 0 > /proc/sys/vm/block_dump
1778 laptop-mode-tools provides a tool named lm-profiler (laptop mode profiler)
1779 which handles block_dump on its own.
1781 See: $KERNEL-SOURCE/Documentation/laptop-mode.txt
1783 Also take a look at event-viewer(8) which is part of grml-debugtools.
1785 Install initrd via initramfs-tools for currently running kernel:
1787 # update-initramfs -c -t -k $(uname -r)
1789 Install initrd via yaird for currently running kernel:
1791 # yaird -o /boot/initrd.img-$(uname -r)
1793 Install initrd via yaird for specific kernel:
1797 # yaird -o /boot/initrd.img-2.6.15-1-686 2.6.15-1-686
1799 Reinstall package with its original configuration files:
1801 # apt-get install --reinstall -o DPkg::Options::=--force-confmiss -o \
1802 DPkg::Options::=--force-confnew package
1804 grml 0.8 funkenzutzler - rt2x00 drivers:
1806 To avoid conflicts with the other rt2x00-drivers the package rt2x00 (which
1807 includes beta-version drivers) is not installed by default. If you want to
1808 use the kernel modules rt2400pci, rt2500pci, rt2500usb, rt61pci and/or
1809 rt73usb please install the package manually running:
1811 # dpkg -i /usr/src/rt2x00-modules-*.deb
1813 Use Java with jikes and jamvm on grml:
1817 % cp /usr/share/doc/grml-templates/template.java .
1818 % jikes template.java
1821 Notice that grml exports $JIKESPATH (/usr/share/classpath/glibj.zip),
1822 so you do not have to manually run
1823 jikes --bootclasspath /usr/share/classpath/glibj.zip
1825 Online resizing of (Software-)RAID5:
1827 # Initiate a RAID5 setup for testing purposes:
1828 mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/hda1 /dev/hdb1 /dev/hdd1
1830 # Create filesystem, mount md0, create a testfile and save md5sum for
1833 mount /dev/md0 /mnt/test
1834 dd if=/dev/urandom of=/mnt/test/dd bs=512 count=10000
1835 md5sum /mnt/test/dd > md5sum
1837 # Make sure the RAID is synched via checking:
1840 # Now remove one partition:
1841 mdadm /dev/md0 --fail /dev/hdd1 --remove /dev/hdd1
1843 # Delete partition, create a new + bigger one and set partition type to fd
1844 # (Linux raid autodetect):
1847 # And re-add the partition:
1848 mdadm -a /dev/md0 /dev/hdd1
1850 # Make sure the RAID is synched via checking:
1853 # Repeat the steps for all other disks/partitions as well:
1854 mdadm /dev/md0 --fail /dev/hdb1 --remove /dev/hdb1
1856 mdadm -a /dev/md0 /dev/hdb1
1858 mdadm /dev/md0 --fail /dev/hda1 --remove /dev/hda1
1860 mdadm -a /dev/md0 /dev/hda1
1863 # Now resize the RAID5 system online [see 'man mdadm' for details]:
1864 mdadm --detail /dev/md0 | grep -e 'Array Size' -e 'Device Size'
1865 mdadm --grow /dev/md0 -z max
1866 mdadm --detail /dev/md0 | grep -e "Array Size" -e 'Device Size'
1868 # Last step - resize the filesystem (online again):
1871 ext3 online resizing:
1873 Starting with Linux kernel 2.6.10 you can resize ext3 online. With
1874 e2fsprogs >=1.39-1 new filesystems are created with directory indexing and
1875 on-line resizing enabled by default (see /etc/mke2fs.conf).
1879 cfdisk /dev/hda # create a partition with type 8e (lvm)
1880 pvcreate /dev/hda2 # create a physical volume
1881 vgcreate resize_me /dev/hda2 # create volume group
1882 lvcreate -n resize_me -L100 resize_me # create a logical volume
1883 mkfs.ext3 /dev/resize_me/resize_me # now create a new filesystem
1884 mount /dev/resize_me/resize_me /mnt/test # mount the new fs for demonstrating online resizing
1885 df -h # check the size of the partition
1886 lvextend -L+100M /dev/resize_me/resize_me # let's extend the logical volume
1887 resize2fs /dev/resize_me/resize_me # and finally resize the filesystem
1888 df -h # recheck the size of the partition
1890 This also works for Software-RAID. Demo:
1892 mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda2 /dev/hdb1
1894 mount /dev/md0 /mnt/test
1895 mdadm /dev/md0 --fail /dev/hda2 --remove /dev/hda2
1896 cfdisk /dev/hda # adjust partition size for hda2
1897 mdadm /dev/md0 --add /dev/hda2
1898 mdadm /dev/md0 --fail /dev/hdb1 --remove /dev/hdb1
1899 cfdisk /dev/hdb # adjust partition size for hdb1
1900 mdadm /dev/md0 --add /dev/hdb1
1901 mdadm --grow /dev/md0 --size=max
1904 Notice: online resizing works as soon as the kernel can re-read the
1905 partition table. So it works for example with LVM and SW-RAID but not with
1906 a plain device (/dev/[sh]d*). The kernel does not re-read the partition
1907 table if the device is already mounted.
1909 Use vim as an outline editor:
1911 % $PAGER /usr/share/doc/vim-vimoutliner/README.Debian
1915 Monitor directories/files for changes using iwatch
1917 Monitor /tmp for changes:
1920 Monitor files/directories specified in /etc/iwatch.xml
1921 and send mail on changes:
1924 Some often used mdadm commands:
1927 # mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/hda1 /dev/hdb1
1929 Display details of specific RAID:
1930 # mdadm --detail /dev/md0
1933 Simulating a drive failure by software:
1934 # mdadm --manage --set-faulty /dev/md0 /dev/hda1
1936 Remove disk from RAID:
1937 # mdadm /dev/md0 -r /dev/hda1
1939 Set disk as faulty and remove from RAID:
1940 # mdadm /dev/md0 --fail /dev/hda1 --remove /dev/hda1
1945 Restart a RAID-device:
1948 Add another disk to existing RAID setup (hotadd):
1949 # mdadm /dev/md0 -a /dev/hde1
1950 # mdadm --grow /dev/md0 --raid-devices=4
1952 Assemble and start all arrays:
1953 # mdadm --assemble --scan
1955 Assemble a specific array:
1956 # mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1
1959 # mdadm --assemble --run --force --update=resync /dev/md0 /dev/sda1 /dev/sda2
1962 # mdadm --stop --scan
1964 Scan for and setup arrays automatically:
1965 # mdadm --assemble --scan --auto=yes --verbose
1967 Notice: If the above does not work make sure /etc/mdadm/mdadm.conf contains:
1969 CREATE owner=root group=disk mode=0660 auto=yes
1974 # /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
1977 Monitoring the sw raid
1978 # nohup mdadm --monitor --mail=root@localhost --delay=300 /dev/md0
1980 Producing /etc/mdadm/mdadm.conf:
1981 # mdadm --detail --scan > /etc/mdadm/mdadm.conf
1983 See also: man mdadm | less -p "^EXAMPLES"
1984 http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html
1986 A quick summary of the most commonly used RAID levels:
1989 => 2 disks each 160 GB: 320 GB data
1990 RAID 1: Mirrored Set
1991 => 2 disks each 160 GB: 160 GB data
1992 RAID 5: Striped Set with Parity
1993 => 3 disks each 160 GB: 320 GB data; 160 GB redundancy
1995 Common nested RAID levels:
1996 RAID 01: A mirror of stripes
1997 RAID 10: A stripe of mirrors
1998 RAID 30: A stripe across dedicated parity RAID systems
1999 RAID 100: A stripe of a stripe of mirrors
2001 -- http://en.wikipedia.org/wiki/RAID
2003 Logical Volume Management (LVM) with Linux
2008 | hda1 hdc1 (PV:s on partitions or whole disks)
2014 | usrlv rootlv varlv (LV:s)
2016 | ext3 ext3 xfs (filesystems)
2018 Often used commands:
2019 ~~~~~~~~~~~~~~~~~~~~
2021 Create a physical volume:
2022 # pvcreate /dev/hda2
2024 Create a volume group:
2025 # vgcreate testvg /dev/hda2
2027 Create a logical volume:
2028 # lvcreate -n test_lv -L100 testvg
2030 Resize a logical volume:
2031 # lvextend -L+100M /dev/resize_me/resize_me
2032 # resize2fs /dev/resize_me/resize_me # ext2/3
2033 # xfs_growfs /dev/resize_me/resize_me # xfs
2034 # resize_reiserfs -f /dev/resize_me/resize_me # reiserfs online
2035 # mount -o remount,resize /dev/resize_me/resize_me # jfs
2037 Create a snapshot of a logical volume:
2038 # lvcreate -L 500M --snapshot -n mysnap /dev/testvg/test_lv
2040 Deactivate a volume group:
2041 # vgchange -a n my_volume_group
2043 Actually remove a volume group:
2044 # vgremove my_volume_group
2046 Display information about physical volume:
2047 # pvdisplay /dev/hda1
2049 Remove physical volume:
2050 # vgreduce my_volume_group /dev/hda1
2052 Remove logical volume:
2053 # umount /dev/myvg/homevol
2054 # lvremove /dev/myvg/homevol
2057 http://www.tldp.org/HOWTO/LVM-HOWTO/
2059 How to use APT locally
2061 Sometimes you have lots of packages .deb that you would like to use APT to
2062 install so that the dependencies would be automatically solved. Solution:
2065 dpkg-scanpackages debs /dev/null | gzip > debs/Packages.gz
2066 echo " deb file:/root debs/" >> /etc/apt/sources.list
2067 dpkg-scansources debs | gzip > debs/Sources.gz
2068 echo " deb-src file:/root debs/" >> /etc/apt/sources.list
2070 See also: http://www.debian.org/doc/manuals/apt-howto/ch-basico.en.html
2072 Check filesystem's LABEL:
2075 # vol_id -l /dev/sda1
2077 ext2/3 without vol_id:
2078 # dumpe2fs /dev/sda1 | grep "Filesystem volume name"
2081 # xfs_admin -l /dev/sda1
2083 reiserfs without vol_id:
2084 # debugreiserfs /dev/sda1 | grep -i label
2087 # jfs_tune -l /dev/sda1 | grep -i label
2089 reiser4 without vol_id:
2090 # debugfs.reiser4 /dev/sda1 | grep -i label
2092 Check filesystem's UUID:
2095 # vol_id -u /dev/sda1
2097 ext2/3 without vol_id:
2098 # dumpe2fs /dev/sda1 | grep -i UUID
2101 # xfs_admin -u /dev/sda1
2103 reiserfs without vol_id:
2104 # debugreiserfs /dev/sda1 | grep -i UUID
2106 reiser4 without vol_id:
2107 # debugfs.reiser4 /dev/sda1 | grep -i UUID
2109 Change a filesystem's LABEL:
2112 # mkswap -L $LABEL /dev/sda1
2115 # e2label /dev/sda1 $LABEL
2116 # tune2fs -L $LABEL /dev/sda1
2119 # reiserfstune -l $LABEL /dev/sda1
2122 # jfs_tune -L $LABEL /dev/sda1
2125 # xfs_admin -L $LABEL /dev/sda1
2128 # echo 'drive i: file="/dev/sda1"' >> ~/.mtoolsrc
2129 # mlabel -s i:$LABEL
2132 # ntfslabel $LABEL /dev/sda1
2134 Disable pdiffs feature of APT:
2137 # echo 'Acquire::PDiffs "false";' >> /etc/apt/apt.conf
2140 # apt-get update -o Acquire::Pdiffs=false
2142 Backup big devices or files and create compressed splitted
2143 image chunks of it using zsplit
2145 Create backup of /dev/sda named archiveofsda_#.spl.zp in directory
2146 /mnt/sda1/backup, split the files up into chunks of 1GB each and set
2147 read/write buffer to 256kB:
2148 # zsplit -b 256 -N archiveofsda -o /mnt/sda1/backup/ -s 1G /dev/sda
2150 Restore the backup using unzsplit:
2151 # unzsplit -D /dev/sda -d archiveofsda
2153 More usage examples: man zsplit + man unzsplit
2155 Measure network performance using iperf:
2161 % iperf -c <server_address> -V
2165 Server with 128k TCP window size:
2168 Client with running for 60 seconds and bidirectional test:
2169 % iperf -c <server_address> -r -w128k -t60
2171 Framebuffer resolutions:
2173 Resolution in pixels
2174 Color depth | 640x480 800x600 1024x768 1280x1024
2175 256 (8bit)| 769 771 773 775
2176 32000 (15bit)| 784 787 790 793
2177 65000 (16bit)| 785 788 791 794
2178 16.7 Mill.(24bit)| 786 789 792 795
2182 Mode 0x0300: 640x400 (+640), 8 bits
2183 Mode 0x0301: 640x480 (+640), 8 bits
2184 Mode 0x0303: 800x600 (+800), 8 bits
2185 Mode 0x0303: 800x600 (+832), 8 bits
2186 Mode 0x0305: 1024x768 (+1024), 8 bits
2187 Mode 0x0307: 1280x1024 (+1280), 8 bits
2188 Mode 0x030e: 320x200 (+640), 16 bits
2189 Mode 0x030f: 320x200 (+1280), 24 bits
2190 Mode 0x0311: 640x480 (+1280), 16 bits
2191 Mode 0x0312: 640x480 (+2560), 24 bits
2192 Mode 0x0314: 800x600 (+1600), 16 bits
2193 Mode 0x0315: 800x600 (+3200), 24 bits
2194 Mode 0x0317: 1024x768 (+2048), 16 bits
2195 Mode 0x0318: 1024x768 (+4096), 24 bits
2196 Mode 0x031a: 1280x1024 (+2560), 16 bits
2197 Mode 0x031b: 1280x1024 (+5120), 24 bits
2198 Mode 0x0330: 320x200 (+320), 8 bits
2199 Mode 0x0331: 320x400 (+320), 8 bits
2200 Mode 0x0332: 320x400 (+640), 16 bits
2201 Mode 0x0333: 320x400 (+1280), 24 bits
2202 Mode 0x0334: 320x240 (+320), 8 bits
2203 Mode 0x0335: 320x240 (+640), 16 bits
2204 Mode 0x0336: 320x240 (+1280), 24 bits
2205 Mode 0x033c: 1400x1050 (+1408), 8 bits
2206 Mode 0x033d: 640x400 (+1280), 16 bits
2207 Mode 0x033e: 640x400 (+2560), 24 bits
2208 Mode 0x0345: 1600x1200 (+1600), 8 bits
2209 Mode 0x0346: 1600x1200 (+3200), 16 bits
2210 Mode 0x034d: 1400x1050 (+2816), 16 bits
2211 Mode 0x035c: 1400x1050 (+5632), 24 bits
2213 Portscan using netcat:
2215 # netcat -v -w2 <host|ip-addr.> 1-1024
2217 Run apt-get but disable apt-listchanges:
2219 APT_LISTCHANGES_FRONTEND=none apt-get ...
2221 Upgrade system but disable apt-listbugs:
2223 APT_LISTBUGS_FRONTEND=none apt-get ...
2225 Set up a Transparent Debian Proxy
2227 Install of apt-cacher, the default config will do:
2228 # apt-get install apt-cacher
2230 Check out the ip address of debian mirror(s).
2231 Then add this to your firewall script:
2233 DEBIAN_MIRRORS="141.76.2.4 213.129.232.18"
2234 for ip in ${DEBIAN_MIRRORS} ; do
2235 ${IPTABLES} -t nat -A PREROUTING -s $subnet -d $ip -p tcp --dport 80 -j REDIRECT --to-port 3142
2238 where ${IPTABLES} is the location of your iptables binary
2239 and $subnet is your internal subnet.
2241 Now everybody in your subnet who does access either
2242 ftp.de.debian.org or ftp.at.debian.org will actually
2243 access your apt-cacher instead.
2245 To use apt-cacher on the router itself, add the following
2246 line to your /etc/apt/apt.conf:
2248 Acquire::http::Proxy "http://localhost:3142/";
2250 Version control using Mercurial
2252 Setting up a Mercurial project:
2255 % hg init # creates .hg
2256 % hg add # add all files
2257 % hg commit # commit all changes, edit changelog entry
2259 Branching and merging:
2261 % hg clone linux linux-work # create a new branch
2266 % hg pull ../linux-work # pull changesets from linux-work
2267 % hg merge # merge the new tip from linux-work into
2268 # (old versions used "hg update -m" instead)
2269 # our working directory
2270 % hg commit # commit the result of the merge
2274 % cat ../p/patchlist | xargs hg import -p1 -b ../p
2282 % hg export 1234 > foo.patch # export changeset 1234
2284 Export your current repo via HTTP with browsable interface:
2286 % hg serve -n "My repo" -p 80
2288 Pushing changes to a remote repo with SSH:
2290 % hg push ssh://user@example.com/~/hg/
2292 Merge changes from a remote machine:
2294 host1% hg pull http://foo/
2295 host2% hg merge # merge changes into your working directory
2297 Set up a CGI server on your webserver:
2298 % cp hgwebdir.cgi ~/public_html/hg/index.cgi
2299 % $EDITOR ~/public_html/hg/index.cgi # adjust the defaults
2301 Mercurial repositories of grml can be found at http://hg.grml.org/
2303 Download binary codecs for mplayer:
2305 # /usr/share/mplayer/scripts/win32codecs.sh
2309 # /usr/share/mplayer/scripts/binary_codecs.sh install
2311 (depending on the mplayer version you have).
2313 To play encrypted DVDs and if you are living in a country where using
2314 libdvdcss code is not illegal can install Debian package libdvdread3
2315 and use the script /usr/share/doc/libdvdread3/install-css.sh.
2317 Read manpages of uninstalled packages with debman:
2319 % debman -p git-core git
2321 Test network performance using netperf:
2327 # netperf -t TCP_STREAM -H 192.168.0.41
2329 Setup Xen within 20 minutes on Debian/grml
2331 Install relevant software und update grub's menu.lst (Xen does not work with
2332 usual lilo so install grub instead if not done already):
2334 apt-get install linux-image-2.6.18-1-xen-686 xen-hypervisor-3.0.3-1-i386 \
2335 xen-utils-3.0.3-1 xen-tools bridge-utils
2338 Example for installation of Debian etch as DomU:
2341 xen-create-image --debootstrap --dir=/mnt/md1/xen --size=2Gb --memory=512Mb --fs=ext3 \
2342 --cache=yes --dist=etch --hostname=xengrml1 --ip 192.168.1.2 --netmask 255.255.255.0 \
2343 --gateway 192.168.1.1 --initrd=/boot/initrd.img-2.6.18-1-xen-686 \
2344 --kernel=/boot/vmlinuz-2.6.18-1-xen-686 --mirror=http://ftp.at.debian.org/debian/
2348 /etc/init.d/xend start
2349 /etc/init.d/xendomains start
2351 Setup a bridge for network, either manually:
2353 brctl addbr xenintbr
2354 brctl stp xenintbr off
2355 brctl sethello xenintbr 0
2356 brctl setfd xenintbr 0
2357 ifconfig xenintbr 192.168.1.1 netmask 255.255.255.0 up
2359 or via /etc/network/interfaces (run ifup xenintbr to bring up the device then
2363 iface xenintbr inet static
2364 pre-up brctl addbr xenintbr
2365 post-down brctl delbr xenintbr
2367 netmask 255.255.255.0
2372 Setup forwarding (adjust $PUBLIC_IP; for permanet setup use /etc/sysctl.conf and
2373 add the iptables commands to a startup script like /etc/init.d/rc.local):
2375 echo 1 > /proc/sys/net/ipv4/ip_forward
2376 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to $PUBLIC_IP
2377 iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to $PUBLIC_IP
2379 Adjust network configuration of Xend:
2381 cat >> /etc/xen/xend-config.sxp << EOF
2382 (network-script network-route)
2383 (vif-bridge xenintbr)
2384 (vif-script vif-bridge)
2387 List domains, start up a DomU, shutdown later again:
2389 xm create -c /etc/xen/xengrml1.cfg
2393 This HowTo is also available online at http://grml.org/xen/
2395 Play tetris with zsh:
2399 bindkey "^Xt" tetris
2401 Now press 'ctrl-x t'.
2403 Set up a router with grml
2405 Run grml-router script:
2408 Install dnsmasq if not already present:
2409 # apt-get update ; apt-get install dnsmasq
2411 Adjust /etc/dnsmasq.conf according to your needs:
2412 # cat >> /etc/dnsmasq.conf << EOF
2415 dhcp-range=19.168.0.124,192.168.0.254,1m # dhcp range
2416 dhcp-option=3,192.168.0.1 # dns server
2417 dhcp-option=1,255.255.255.0 # netmask
2420 Start dnsmasq finally:
2423 Display stats about memory allocations performed by a program:
2425 Usage example for 'ls':
2427 % LD_PRELOAD=/lib/libmemusage.so ls > /dev/null
2429 Use KVM (Kernel-based Virtual Machine for Linux):
2431 Make sure to install the relevant tools:
2432 # apt-get update ; apt-get install kvm
2435 Test it with a minimal system like ttylinux:
2436 # wget http://www.minimalinux.org/ttylinux/packages/bootcd-i386-5.3.iso.gz
2437 # gzip -d bootcd-i386-5.3.iso.gz
2438 # kvm -cdrom bootcd-i386-5.3.iso
2440 EEPROM data decoding for SDRAM DIMM modules:
2443 # /usr/share/doc/lm-sensors/examples/eeprom/decode-dimms.pl
2447 Make sure your device is supported by Linux and running.
2448 See http://www.linuxtv.org/ for more details.
2450 If the DVB device works on your system (see 'hwinfo --usb'
2451 when using a DVB usb device for example), then make sure you
2452 have the scan util from dvb-utils available:
2454 # aptitude install dvb-utils
2456 Then create a channels.conf configuration file:
2458 % scan /usr/share/doc/dvb-utils/examples/scan/... > ~/.mplayer/channels.conf
2460 You can find some example configuration files on
2461 your grml system in ~/.channels. Usage example:
2463 % ln -s ~/.mplayer/channels.conf-AT-graz ~/.mplayer/channels.conf
2465 Tip: w_scan (see http://free.pages.at/wirbel4vdr/w_scan/index2.html)
2466 might be useful if you do not know the initial configuration
2469 Get the lastest mercurial snapshot:
2471 Make sure you have the python-dev package available:
2472 # apt-get update ; apt-get install python-dev
2474 Get and build the source:
2475 % hg clone http://selenic.com/repo/hg mercurial
2478 % export PYTHONPATH=$(pwd)
2479 % export PATH=$PATH:$(pwd)
2481 now you should have the newest version of mercurial whenever you execute hg.
2483 To update to the lastest development snapshot, additionally use
2484 the following commands:
2485 % hg pull -u http://hg.intevation.org/mercurial/crew
2491 Available bootoptions relevant in live-cd mode:
2492 -----------------------------------------------
2494 * utc: set UTC, if your system clock is set to UTC (GMT)
2495 * gmt: set UTC, if your system clock is set to UTC (GMT) [like bootoption utc]
2496 * tz=$option: set timezone to corresponding $option, usage example:
2499 Configuration options relevant on harddisk installation:
2500 --------------------------------------------------------
2502 * Use the tzconfig utility to set the local timezone:
2506 which adjusts /etc/timezone and /etc/localtime according
2507 to the provided information. Running:
2509 # dpkg-reconfigure tzdata
2511 might be useful as well.
2513 * /etc/default/rcS: set variable UTC according to your needs,
2514 whether your system clock is set to UTC (UTC='yes') or
2517 * /etc/localtime: adjust zoneinfo according to your needs:
2519 # ln -sf /usr/share/zoneinfo/$WHATEVER_YOU_WANT /etc/localtime
2521 The zoneinfo directory contains the time zone files that were
2522 compiled by zic. The files contain information such as rules
2523 about DST. They allow the kernel to convert UTC UNIX time into
2524 appropriate local dates and times. Use the zdump utility to
2525 print current time and date (in the specified time zone).
2527 * /etc/adjtime: This file is used e.g. by the adjtimex function,
2528 which can smoothly adjust system time while the system runs
2530 * If you change the time (using 'date --set ...', ntpdate,...)
2531 it is worth setting also the hardware clock to the correct time:
2533 # hwclock --systohc [--utc]
2535 Remember to add the --utc -option if the hardware clock is set
2541 Check your current settings via:
2544 zdump /etc/localtime
2547 grep hwclock /etc/runlevel.conf
2548 grep '^UTC' /etc/default/rc
2550 Further information:
2551 --------------------
2553 hwclock(8) tzselect(1) tzconfig(8)
2554 http://www.debian.org/doc/manuals/system-administrator/ch-sysadmin-time.html
2555 http://wiki.debian.org/TimeZoneChanges
2557 Recorder shellscript session using script:
2559 % script -t 2>~/upgrade.time -a ~/upgrade.script
2560 % scriptreplay ~/upgrade.time ~/upgrade.script
2562 Test UTF-8 capabilities of terminal:
2564 wget http://melkor.dnp.fmph.uniba.sk/~garabik/debian-utf8/download/UTF-8-demo.txt.gz
2565 zcat UTF-8-demo.txt.gz
2569 wget http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
2572 UTF-8 at grml / some general information regarding Unicde/UTF-8:
2574 http://wiki.grml.org/doku.php?id=utf8
2577 This allows one ssh connection attepmt per minute per source ip, with a initial
2578 burst of 10. The available burst is like a counter which is initialised with
2579 10. Every connection attempt decrements the counter, and every minute where the
2580 connection limit of one per minute is not overstepped the counter is
2581 incremented by one. If the burst counter is exhausted the real rate limit
2582 comes into play. This gives you 11 connectionattepmts in the first minute
2583 before blocked for 10minutes. After 10 minutes block the game restarts.
2585 Hint: you could set the burst value to 5 and the block time to only 5 minutes
2586 to achive the same average connection rate but with halve the block time.
2588 iptables -A inet_in -p tcp --syn --dport 22 -m hashlimit --hashlimit-name ssh \
2589 --hashlimit 1/minute \ --hashlimit-burst 10 --hashlimit-mode srcip \
2590 --hashlimit-htable-expire 600000 -j ACCEPT
2591 iptables -A inet_in -p tcp --dport 22 -m state --state NEW -j REJECT
2593 Tunnel a specific connection via socat:
2596 % socat TCP4-LISTEN:8003 TCP4:gateway:500
2599 # socat TCP4-LISTEN:500,fork TCP4:target:$PORT
2601 Using localhost:8003 on the client uses the tunnel now.
2605 # date --set=060916102007
2607 where the bits are month(2)/day(2)/hour(2)/minute(2)/year(4)
2609 Set date using a relative date:
2615 # date -s '+tomorrow'
2617 Display a specific relative date:
2619 # date -d '+5 days -2 hours'
2621 Don't forget to set hardware clock via:
2625 Booting grml via network / PXE:
2627 Start grml-terminalserver on a system with network access
2628 and where grml is running:
2630 # grml-terminalserver
2632 Then booting your client(s) via PXE should work without
2635 Debugging SSL communications:
2637 % openssl s_client -connect server.adress:993
2641 # ssldump -a -A -H -i eth0
2643 See http://prefetch.net/articles/debuggingssl.html for more details.
2645 Remove bootmanager from MBR:
2647 # lilo -M /dev/hda -s /dev/null
2649 Rewrite grub to MBR:
2652 # grub-install --recheck --no-floppy --root-directory=/mnt/sda1 /dev/sda
2654 Rewrite lilo to MBR:
2659 Create screenshot of plain/real console - tty1:
2661 # fbgrab -c 1 screeni.png
2663 Create screenshot when running X:
2667 Tip: use the gkrellshoot plugin when using gkrellm
2669 Redirect all connections to hostA:portA to hostB:portB, where hostA and hostB are
2672 Run the following commands on hostA:
2674 echo 1 > /proc/sys/net/ipv4/ip_forward
2675 iptables -t nat -A PREROUTING -p tcp --dport portA -j DNAT --to hostB:portB
2676 iptables -A FORWARD -i eth0 -o eth0 -d hostB -p tcp --dport portB -j ACCEPT
2677 iptables -A FORWARD -i eth0 -o eth0 -s hostB -p tcp --sport portB -j ACCEPT
2678 iptables -t nat -A POSTROUTING -p tcp -d hostB --dport portB -j SNAT --to-source hostA
2680 Flash BIOS without DOS/Windows:
2682 Dump flash info and set the flash chip to writable:
2685 Backup the original BIOS:
2686 # flashrom -r backup.bin
2688 Notice: the following step will overwrite your current BIOS!
2689 So make sure you really know what you are doing.
2691 Flash the BIOS image:
2692 # flashrom -wv newbios.bin
2694 Also check out LinuxBIOS: http://linuxbios.org/
2696 Enable shadow passwords:
2700 Set up an IPv6 tunneln on grml:
2704 Set up console newsreader slrn for use with Usenet:
2708 Calculate with IPv6 addresses:
2712 For usage examples refer to manpage ipv6calc(8).
2714 Common network debugging tools for use with IPv6:
2723 Set up NFS (Network File System):
2727 Make sure the relevant services are running on the server side:
2729 # /etc/init.d/portmap start
2730 # /etc/init.d/nfs-common start
2731 # /etc/init.d/nfs-kernel-server start
2733 Export shares via /etc/exports:
2735 /backups 192.168.1.100/24(rw,wdelay,no_root_squash,async,subtree_check)
2737 ... or manually export a directory running:
2739 # exportfs -o rw,wdelay,no_root_squash,async,subtree_check 192.168.1.100:/backups
2741 and unexport a share running:
2743 # exportfs -u 192.168.1.100:/backups
2745 and every time when you modify /etc/exports file run
2749 Display what NFS components are running:
2753 Display list of exported shares:
2761 Make sure the relevant services are running on the client side:
2763 # /etc/init.d/portmap start
2764 # /etc/init.d/nfs-common start
2766 Verify that the server allows you to access its RPC/NFS services:
2768 # rpcinfo -p server_name
2770 Check what directories the server exports:
2772 # showmount -e server_name
2774 On the client side you can use something like the following in /etc/fstab:
2776 192.168.1.101:/backups /mnt/nfs nfs defaults,users,wsize=8192,rsize=8192 0 0
2780 # aptitude install cloop-src
2783 # modprobe cloop file=/path/to/cloop/file
2784 # mount -r -t iso9660 /dev/cloop /mnt/test
2786 Create a PS/PDF of a plaintext file:
2788 % a2ps --medium A4dj -E -o output.ps input_file
2791 Print two pages on one in a PDF file:
2793 % pdfnup --nup 2x1 input.pdf
2795 Concatenate, extract pages/parts, encrypt/decrypt,
2796 compress PDFs using 'pdftk'.
2798 Read a PS/PDF file on console:
2802 or on plain framebuffer console in graphical mode:
2804 % pdf2ps file.pdf ; ps2png file.ps file.png ; fbi file.png
2810 Bypass the password of a PDF file:
2812 % gs -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf -c quit
2818 This will record a AIFF audio file.