Inhaltsverzeichnis

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:

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