Cf-Install
Hier wird Beschrieben wie ein Router auf einem Alix-Board mit Ubuntu und Iptables installiert wird.
Das Alix-Board ist ein 2d13. die Anleitung erfolgt in 2 Schritten. Dies ist der Erste, welcher das Vorbereiten der CF-Karte und die Installation des Grundsystems beschreibt.
Der zweite Schritt wird hier beschrieben.
Diese Anleitung ist zweckmäßig oft auf meine Bedürfnisse ausgelegt und beinhaltet nicht immer eine Beschreibung dessen was gerade gemacht wird.
Es werden daher div. Grundkenntnisse mit Linux vorausgesetzt.
CF-Vorbereiten
Eine große Partition auf der CF-Karte erstellen, bootfähig und mit Typ 83.
cfdisk -z /dev/sdb
Partition formatieren; Da ext2 die Journalingfunktion nicht hat werden damit die Schreibzugriffe auf die CF minimiert
mke2fs -L root /dev/sdb1
Mount und Bootstrap
CF einbinden mit
mkdir /mnt/alix mount /dev/sdb1 /mnt/alix
System auf die CF installieren (Hier Lucid Lynx)
Evtl noch debootstrap auf dem Notebook installieren (apt-get install debootstrap)
debootstrap --arch i386 lucid /mnt/alix http://de.archive.ubuntu.com/ubuntu
Chroot
In das System chrooten
mount -o bind /dev /mnt/alix/dev mount -o bind /dev/pts /mnt/dev/pts mount -t sysfs /sys /mnt/alix/sys mount -t proc /proc /mnt/alix/proc chroot /mnt/alix /bin/bash
Hostname
Hostname und Domain vergeben
echo router > /etc/hostname vi /etc/hosts
Inhalt:
127.0.0.1 localhost.localdomain localhost 127.0.1.1 router.<DOMAIN> router # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
Nameserver
Nameserver eintragen
vi /etc/resolv.conf
Inhalt:
nameserver <DNS-SERVER-IP> nameserver <DNS-SERVER-IP>
FSTAB
Fstab erstellen.
Die Option noatime beim Root-Dateisystem verhindert, dass jeder Dateizugriff (also auch lesende Zugriffe) das sogenannte atime Attribut (Zeitstempel des letzten Zugriffes) aktualisiert. Das schont die CF-Karte.
vi /etc/fstab
Inhalt:
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # /dev/sda1 LABEL=root / ext2 noatime,errors=remount-ro 0 1 tmpfs /tmp tmpfs defaults,noatime 0 0 tmpfs /var/tmp tmpfs defaults,noatime 0 0
Zeit für zeitversetzte Schreibzugriffe verlängern
vi /etc/sysctl.conf
Inhalt einfach unten einfügen:
#Zeit für zeitversetzte Schreibzugriffe verlängern vm.dirty_writeback_centisecs = 1500
Gewisse spezielle Laufzeit-Verzeichnisse in einer RAM-Disk verwaltet
vi /etc/default/rcS
Inhalt einfach unten einfügen:
RAMRUN=yes RAMLOCK=yes
Netzwerkkarte
Netzwerkkarte konfigurieren
vi /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or # /usr/share/doc/ifupdown/examples for more information. # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.0.0 broadcast 192.168.255.255 # gateway 192.168.0.1 # emergency fallback addresses # post-up ip addr add 169.254.19.65/16 dev eth0 # pre-down ip addr del 169.254.19.65/16 dev eth0
Apt-Sources
Apt-Sources festlegen
vi /etc/apt/sources.list
Inhalt:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. ## Primary distribution source deb http://de.archive.ubuntu.com/ubuntu/ lucid main universe #deb-src http://de.archive.ubuntu.com/ubuntu/ lucid main universe ## Major bug fix updates produced after the final release of the ## distribution. deb http://de.archive.ubuntu.com/ubuntu/ lucid-updates main universe #deb-src http://de.archive.ubuntu.com/ubuntu/ lucid-updates main universe ## Security updates deb http://security.ubuntu.com/ubuntu lucid-security main universe #deb-src http://security.ubuntu.com/ubuntu lucid-security main universe
Apt nur die notwendigen Abhängigkeiten installieren lassen
vi /etc/apt/apt.conf.d/00onlydepends
Inhalt:
APT::Install-Recommends "0"; APT::Install-Suggests "0";
DSL
Für DSL installieren damit nach erstem Boot eingewählt werden kann
apt-get -y install pppoeconf
sonstige Einstellungen
Regionale Einstellungen
localedef -i de_DE -c -f UTF-8 de_DE.UTF-8 dpkg-reconfigure console-setup
Grub
Bootmanager installieren
apt-get -y install grub-pc
Im Dialog unbedingt die richtige HDD (CF-Karte) auswählen.
Grub Konfiguration erstellen
vi /etc/default/grub
Inhalt:
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT="3" GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="verbose console=ttyS0,38400n8 reboot=bios" GRUB_CMDLINE_LINUX="" # Konfiguration der seriellen Schnittstelle der Alix-Boards: GRUB_SERIAL_COMMAND="serial --unit=0 --speed=38400" GRUB_TERMINAL=serial # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entrys #GRUB_DISABLE_LINUX_RECOVERY="true"
Devices anpassen.
vi /boot/grub/devices.map
Inhalt:
(hd0) /dev/sdb
grub-install /dev/sdb update-grub
Devices so anpassen, damit Grub beim ersten Booten die richtigen Pfade findet.
vi /boot/grub/devices.map
(hd0) /dev/sda
Kernel
Kernel-Installations-Konfigurationsdatei anlegen
vi /etc/kernel-img.conf
Inhalt:
# Kernel image management overrides # See kernel-img.conf(5) for details do_symlinks = yes relative_links = yes do_bootloader = no do_bootfloppy = no do_initrd = yes link_in_boot = no postinst_hook = update-grub postrm_hook = update-grub
Kernel installieren
apt-get -y install linux-image-386
Root Password
Root Passwort erstellen
passwd root
serielle Konsole
Serielle Konsole konfigurieren
rm /etc/init/tty?.conf vi /etc/init/ttyS0.conf
Inhalt:
# ttyS0 - getty # # This service maintains a getty on tty1 from the point the system is # started until it is shut down again. start on stopped rc RUNLEVEL=[2345] stop on runlevel [!2345] respawn exec /sbin/getty -8 38400 -L ttyS0
sonstige Software
Zeitzone festlegen
dpkg-reconfigure tzdata
SSH Server installieren
apt-get -y install openssh-server
Vim installieren
apt-get -y install vim
Kernelmodule
Zusätzlich geladene Module
vi /etc/modules
Inhalt:
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. # Alix Specific: natsemi lm90 scx200_acb base=0x810,0x820 leds-alix ledtrig-default-on ledtrig-heartbeat ledtrig-gpio ledtrig-timer
Beep
BEEP installieren
apt-get -y install beep tcl vi /etc/modules
Inhalt einfach unten einfügen:
pcspkr
vi /etc/modprobe.d/blacklist.conf
Diese Zeile einkommentieren
blacklist pcspkr
mkdir /root/bin vi /root/bin/beep.sh
Inhalt:
#! /usr/bin/env tclsh # nokia2beeps.tcl - Play an RTTL ringtone file as beeps # Usage: ./nokia2beeps.tcl ringtone_file set default_octave 4 set default_duration 4 set default_beat 100 set base_time 200000 array set scale { C0 16.35 C#0 17.32 Db0 17.32 D0 18.35 D#0 19.45 Eb0 19.45 E0 20.60 F0 21.83 F#0 23.12 Gb0 23.12 G0 24.50 G#0 25.96 Ab0 25.96 A0 27.50 A#0 29.14 Bb0 29.14 B0 30.87 C1 32.70 C#1 34.65 Db1 34.65 D1 36.71 D#1 38.89 Eb1 38.89 E1 41.20 F1 43.65 F#1 46.25 Gb1 46.25 G1 49.00 G#1 51.91 Ab1 51.91 A1 55.00 A#1 58.27 Bb1 58.27 B1 61.74 C2 65.41 C#2 69.30 Db2 69.30 D2 73.42 D#2 77.78 Eb2 77.78 E2 82.41 F2 87.31 F#2 92.50 Gb2 92.50 G2 98.00 G#2 103.83 Ab2 103.83 A2 110.00 A#2 116.54 Bb2 116.54 B2 123.47 C3 130.81 C#3 138.59 Db3 138.59 D3 146.83 D#3 155.56 Eb3 155.56 E3 164.81 F3 174.61 F#3 185.00 Gb3 185.00 G3 196.00 G#3 207.65 Ab3 207.65 A3 220.00 A#3 233.08 Bb3 233.08 B3 246.94 C4 261.63 C#4 277.18 Db4 277.18 D4 293.66 D#4 311.13 Eb4 311.13 E4 329.63 F4 349.23 F#4 369.99 Gb4 369.99 G4 392.00 G#4 415.30 Ab4 415.30 A4 440.00 A#4 466.16 Bb4 466.16 B4 493.88 C5 523.25 C#5 554.37 Db5 554.37 D5 587.33 D#5 622.25 Eb5 622.25 E5 659.26 F5 698.46 F#5 739.99 Gb5 739.99 G5 783.99 G#5 830.61 Ab5 830.61 A5 880.00 A#5 932.33 Bb5 932.33 B5 987.77 C6 1046.50 C#6 1108.73 Db6 1108.73 D6 1174.66 D#6 1244.51 Eb6 1244.51 E6 1318.51 F6 1396.91 F#6 1479.98 Gb6 1479.98 G6 1567.98 G#6 1661.22 Ab6 1661.22 A6 1760.00 A#6 1864.66 Bb6 1864.66 B6 1975.53 C7 2093.00 C#7 2217.46 Db7 2217.46 D7 2349.32 D#7 2489.02 Eb7 2489.02 E7 2637.02 F7 2793.83 F#7 2959.96 Gb7 2959.96 G7 3135.96 G#7 3322.44 Ab7 3322.44 A7 3520.00 A#7 3729.31 Bb7 3729.31 B7 3951.07 C8 4186.01 C#8 4434.92 Db8 4434.92 D8 4698.64 D#8 4978.03 Eb8 4978.03 } proc nokia2scale {note} { global default_octave set note [string toupper [regexp -inline {[a-gA-GpP].*} $note]] if {$note != "P" && ![regexp {\d$} $note]} { append note $default_octave } set note [string map {. ""} $note] return $note } proc nokia2length {note} { global default_duration default_beat base_time set duration [regexp -inline {^\d+} $note] if {$duration == ""} { set duration $default_duration } return [expr {$base_time/$default_beat/$duration}] } proc playnote {note} { global scale set note [string trim $note] if {$note == ""} return puts -nonewline "$note " flush stdout set delay [nokia2length $note] set note [nokia2scale $note] if {$note == "P"} { after $delay } else { exec beep -f $scale($note) -l $delay } } proc playRTTL {str} { global default_octave default_beat default_duration foreach x [regexp -inline -all {[dob]=\d+} $str] { regexp {(\w)=(\d+)} $x -> param value switch $param { d {set default_duration $value} o {set default_octave $value} b {set default_beat $value} } } regexp {\:([^\:]+)$} $str -> str puts "beat: $default_beat" foreach x [split $str ,] { playnote $x } puts done. } set f [open [lindex $argv 0]] set data [read $f] close $f playRTTL $data
Script noch ausführbar machen.
chmod a+x /root/bin/beep.sh
Ringtone erstellen
vi /root/bin/itchy
Inhalt:
Itchy:d=4,o=5,b=160:8c6,8a,p,8c6,8a6,p,8c6,8a,8c6,8a,8c6,8a6,p,8p,8c6,8d6,8e6,8p,8e6,8f6,8g6,p,8d6,8c6,d6,8f6,a#6,a6,2c7
Script beim Booten starten lassen durch die rc.local
vi /etc/rc.local
Inhalt unten vor „exit0“ einfügen:
/root/bin/beep.sh /root/bin/itchy
Installation abschliessen
Installation abschliessen und CF-Karte aushängen
exit umount /mnt/alix/proc umount /mnt/alix/sys umount /mnt/alix/dev umount /mnt/alix
Erster Bootvorgang
CF im Router starten und Aktualisierung und Softwareinstallation
apt-get update apt-get upgrade
Screenrc
apt-get -y install ubuntu-standard screen vi /etc/screenrc
Inhalt:
# $Id: screenrc,v 1.15 2003/10/08 11:39:03 zal Exp $ # # /etc/screenrc # # This is the system wide screenrc. # # You can use this file to change the default behavior of screen system wide # or copy it to ~/.screenrc and use it as a starting point for your own # settings. # # Commands in this file are used to set options, bind screen functions to # keys, redefine terminal capabilities, and to automatically establish one or # more windows at the beginning of your screen session. # # This is not a comprehensive list of options, look at the screen manual for # details on everything that you can put in this file. # # ------------------------------------------------------------------------------ # SCREEN SETTINGS # ------------------------------------------------------------------------------ startup_message off #nethack on #defflow on # will force screen to process ^S/^Q deflogin on #autodetach off # turn visual bell on # vbell on # vbell_msg " Wuff ---- Wuff!! " # define a bigger scrollback, default is 100 lines defscrollback 10240 # ------------------------------------------------------------------------------ # SCREEN KEYBINDINGS # ------------------------------------------------------------------------------ # Remove some stupid / dangerous key bindings bind ^k #bind L bind ^ # Make them better bind \\ quit bind K kill bind I login on bind O login off bind } history # An example of a "screen scraper" which will launch urlview on the current # screen window # #bind ^B eval "hardcopy_append off" "hardcopy -h $HOME/.screen-urlview" "screen urlview $HOME/.screen-urlview" # ------------------------------------------------------------------------------ # TERMINAL SETTINGS # ------------------------------------------------------------------------------ # The vt100 description does not mention "dl". *sigh* termcapinfo vt100 dl=5\E[M # turn sending of screen messages to hardstatus off hardstatus off # Set the hardstatus prop on gui terms to set the titlebar/icon title termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=\E]0;:fs=\007:ds=\E]0;\007 # use this for the hard status string hardstatus string "%h%? users: %u%?" # An alternative hardstatus to display a bar at the bottom listing the # windownames and highlighting the current windowname in blue. (This is only # enabled if there is no hardstatus setting for your terminal) # #hardstatus lastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" # set these terminals up to be 'optimal' instead of vt100 termcapinfo xterm*|linux*|rxvt*|Eterm* OP # Change the xterm initialization string from is2=\E[!p\E[?3;4l\E[4l\E> # (This fixes the "Aborted because of window size change" konsole symptoms found # in bug #134198) termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' # To get screen to add lines to xterm's scrollback buffer, uncomment the # following termcapinfo line which tells xterm to use the normal screen buffer # (which has scrollback), not the alternate screen buffer. # #termcapinfo xterm|xterms|xs|rxvt ti@:te@ # Enable non-blocking mode to better cope with flaky ssh connections. defnonblock 5 # ------------------------------------------------------------------------------ # STARTUP SCREENS # ------------------------------------------------------------------------------ # Example of automatically running some programs in windows on screen startup. # # The following will open top in the first window, an ssh session to monkey # in the next window, and then open mutt and tail in windows 8 and 9 # respectively. # # screen top # screen -t monkey ssh monkey # screen -t mail 8 mutt # screen -t daemon 9 tail -f /var/log/daemon.log hardstatus alwayslastline "%{kw} %{b}%H%{K} < %-w%{Wb} %n %t %{-}%+w >" # This lets work all functions keys in midnight commander termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
LEDs
Ansteuerung der LEDs
cd /usr/src apt-get -y install build-essential apt-get -y install leds-alix-source apt-get -y install linux-headers-$(uname -r) tar -xvjf leds-alix.tar.bz2 cd modules/leds-alix//root/bin/ make make install rm -rf /usr/src/modules cd / apt-get --yes --purge remove linux-headers-$(uname -r) apt-get --yes --purge remove leds-alix-source apt-get --yes --purge remove build-essential apt-get --yes --purge autoremove apt-get clean
vi /etc/modules
Inhalt einfach unten einfügen:
leds-alix ledtrig-default-on ledtrig-heartbeat ledtrig-gpio ledtrig-timer
Zum testen der Module eingeben
sudo modprobe leds-alix
sudo modprobe ledtrig-default-on
sudo modprobe ledtrig-heartbeat
sudo modprobe ledtrig-gpio
sudo modprobe ledtrig-timer
Manuelle LED Ansteuerung nachdem die module geladen sind
LED1 einschalten:
sudo echo 1 > /sys/class/leds/alix\:1/brightness
LED1 ausschalten:
sudo echo 0 > /sys/class/leds/alix\:1/brightness
LED1 als Systemauslastungsanzeige - je mehr Systemauslastung, je schneller schlägt das Herz:
sudo echo heartbeat > /sys/class/leds/alix\:1/trigger
LED1 als Platten-Aktivitätsanzeige:
sudo echo ide-disk > /sys/class/leds/alix\:1/trigger
LED1 mit zeitgesteuertes Blinken - 1 Sekunde an, 5 Sekunden aus:
sudo echo timer > /sys/class/leds/alix\:3/trigger sudo echo 1000 > /sys/class/leds/alix\:3/delay_on sudo echo 5000 > /sys/class/leds/alix\:3/delay_off
vi /etc/init/watchdog-led.conf
Inhalt:
# WatchDog LED Configuration for Alix-Boards # # This task configures the watchdog led to resemble the status # of the system description "Configuration of the first alix led (Watchdog led)" author "Leo Moll <leo@yeasoft.com>" start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] export RUNLEVEL export PREVLEVEL task script case $RUNLEVEL in 1|6) echo timer > /sys/class/leds/alix\:1/trigger echo 100 > /sys/class/leds/alix\:1/delay_on echo 100 > /sys/class/leds/alix\:1/delay_off ;; 0) echo 0 > /sys/class/leds/alix\:1/brightness echo none > /sys/class/leds/alix\:1/trigger ;; 2|3|4|5) echo heartbeat > /sys/class/leds/alix\:1/trigger ;; *) echo timer > /sys/class/leds/alix\:1/trigger echo 100 > /sys/class/leds/alix\:1/delay_on echo 300 > /sys/class/leds/alix\:1/delay_off ;; esac end script
Basierend auf dem entsprechenden Run Level verhält sich nun die erste LED folgendermaßen:
- Normaler Betrieb: Herzschlag (Heartbeat)
- Reboot: Schnelles blinken
- System heruntergefahren: LED aus
- Beim Starten: LED an
- System gestartet in Run Level 1: schnelles blinken
- Anderer Runlevel: Kurzes blinken
LEDs nach Bootvorgang aktivieren
vi /etc/rc.local
Inhatl einfach unten vor „exit0“ einfügen:
echo gpio > /sys/class/leds/alix\:3/trigger echo phy0rx > /sys/class/leds/alix\:2/trigger