08/02/2010

Firefox, vimperator et netbook

[ firefox vimperator netbook ]

La résolution des écrans de netbook étant ce quelle est (1024x600 pour ma part), un firefox avec moultes barres pouetpouet réduit très vite la surface d'affichage des pages web. Pour aller à l'essentiel, vimperator est notre ami. Mais ce n'est pas assez à mon goût.

Un petit tour dans about:config

browser.tabs.closeButtons => 2

Direction $HOME/.mozilla/firefox/répertoire-qui-va-bien/chrome/userChrome.css

/* Le vilain + pour ajouter un onglet */
.tabs-newtab-button { display: none; }

/* La vilaine zone de liste a droite de la barre d'onglet */
.tabs.alltabs-button { display: none; }

/* Les vilaines favicon */
.tab-icon { display: none; }
/* si .tab-icon pamarche */
/* .tab-icon-image { display:none !important; } */

/* On peut enfin diminuer la taille des onglets */
tab { font:size: 6px; }

Vimperator: hauteur limitée

$ echo "colorscheme tiny" >> $HOME/.vimperatorrc
$ cat $HOME/.vimperator/colors/tiny.vimp
hi CmdLine font-size: 10px;
hi StatusLine font-size: 10px;

Pour la route: désactiver toutes les mises à jour automatiques c'est vraiment pas mal quand il faut redémarrer firefox plusieurs fois de suite.

31/01/2010

Dnsmasq et le blocage de site

[ openwrt dnsmasq blocage ]

Pour faire suite à l'article sur le blocage de site paru dans le GLMF n° 124, je vous propose sa déclinaison OpenWRT.

/etc/config/dhcp:

config dnsmasq
    [ snip config ]
    list address '/ads.google.com/127.0.0.1'
    list address '/google-analytics.com/127.0.0.1'
    list address '/smartadserver.com/127.0.0.1'
    list address '/adsense.com/127.0.0.1'
    list address '/adsense.fr/127.0.0.1'
    list address '/doubleclick.net/127.0.0.1'

L'option address n'étant pas encore reconnue par le script d'init de dnsmasq (/etc/init.d/dnsmasq), on va lui rajouter une fonction et une ligne de commande supplémentaire.

OpenWRT 8.09 (et antérieur)

dhcp_address_add() {
    local cfg="$1"

    config_get address "$cfg" address
    for o in $address; do
            append args "--address=$o"
    done

}

start() {
    [ snip config_foreach ... ]
    config_foreach dhcp_address_add dnsmasq # appel de notre fonction

    /usr/sbin/dnsmasq $args && { 

OpenWRT 8.09.1 (et ultérieur)

append_address() {
    append args "--address=$1"
}

dnsmasq() {
    [ snip append ... ]
    config_list_foreach "$cfg" "server" append_server
    config_list_foreach "$cfg" "interface" append_interface
    config_list_foreach "$cfg" "address" append_address # appel de notre fonction
    append_parm "$cfg" "leasefile" "-l"
    ...

Et un restart plus tard:

dsx@linutop>host www.adsense.com
www.adsense.com has address 127.0.0.1

15/01/2010

FreeBSD, git et depot public

[ git ]

Une jail vite fait sur le gaz:

ks34581# ./bin/mk_jail.sh repo 10240 repo.bsdsx.fr 172.16.0.15
ks34581# grep git /etc./pf.conf
git="9418"
rdr pass on $ext_if proto tcp from ! <spammers> to port $git -> 172.16.0.15

Installation de git en 2 coups les gros:

repo# pkg_add -r git

La configuration du dépôt sera la suivante:

/etc/rc.conf:

git_daemon_enable="YES"
git_daemon_directory=""
git_daemon_flags="--syslog --export-all --enable=receive-pack --listen=172.16.0.15 --verbose --base-path=/home/git/repo"

Il faut retoucher /usr/local/etc/rc.d/git-daemon pour ne pas utiliser la variable git_daemon_directory:

command_args="${git_daemon_flags} &"

Un /usr/local/etc/rc.d/git-daemon start plus tard, on peut récupérer un dépôt:

git@repo> cd && cd repo && git clone --bare http://git.etoilebsd.net/cgit/cblog

Dans la jail de dev:

dsx@devel> cd && cd src/git && git clone git://repo.bsdsx.fr/cblog
dsx@devel> cd cblog
dsx@devel> vim *.c
dsx@devel> git commit -m 'style' -a
dsx@devel> git push

Voilà mon dépôt à jour. Mais comment puis-je récupérer les mises à jour de http://git.etoilebsd.net/cgit/cblog ? Il me suffit de rajouter un remote:

dsx@devel> git remote add etoilebsd http://git.etoilebsd.net/cgit/cblog
dsx@devel> git pull etoilebsd master

Je pense avoir zappé la phase "accès à repo.bsdsx.fr depuis devel.bsdsx.fr" (ma clef ssh est dans /usr/share/skel/dot.ssh/authorized_keys) mais google est notre ami à tous.

08/10/2009

Netbsd 5.0.1 et Xen

[ netbsd xen install ]

Le contexte:

A la différence de nombreux tutos où on ne voit que les commandes qui marchent, je vais essayer de partager mes erreurs et mes réflexions.

Installation

Je ne vais pas recopier http://www.netbsd.org/docs/guide/en/chap-exinst.html mais une lecture attentive ne fera pas de mal.

Mes adaptations:

J'ai choisi 'b: Use the entire disk'

Concernant les partition, un / et un swap suffiront pour l'instant.

Par contre, / sera formaté en ffsv2 et mounté avec l'option log (Figure 3.15. Disklabel partition editing)

Full, on sait jamais. Pour être honnête, vu le nombre de réinstallation que j'ai fait, j'ai parfois (souvent :) sélectionné Custom avec les sets pré-sélectionnés.

NetBSD est toujours aussi simple/rapide à installer.

Configuration

Un reboot plus tard et voila le dmesg.

/etc/rc.conf:
hostname=netbsd.domain.tld
ifconfig_bge0="inet 10.50.0.40 netmask 255.255.255.0"
defaultroute="10.50.0.100"
sshd=YES

/etc/ssh/sshd_config:
PermitRootLogin yes

netbsd# /etc/rc.d/network restart
netbsd# /etc/rc.d/sshd restart

Packages

Tant que je suis en mode découverte, pourquoi ne pas essayer pkgin ?

netbsd# export ftp_proxy=http://proxy.domain.tld:3128/
netbsd# export http_proxy=http://proxy.domain.tld:3128/
netbsd# pkg_info
netbsd# pkg_add -v ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/pkgin-0.2.5.tgz
pkg_add: Can't process ftp://ftp.fr.netbsd.org:21/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/sqlite3*: Protocol error
pkg_add: no pkg found for 'sqlite3>=3.2.7nb1', sorry.
pkg_add: Can't install dependency sqlite3>=3.2.7nb1
pkg_add: 1 package addition failed

On va lui donner un coup de main:

netbsd# pkg_add -v ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/sqlite3-3.6.14.2.tgz
bin/sqlite3
include/sqlite3.h
include/sqlite3ext.h
lib/libsqlite3.la
lib/libsqlite3.a
lib/libsqlite3.so
lib/libsqlite3.so.0
lib/libsqlite3.so.0.8.6
lib/pkgconfig/sqlite3.pc
man/man1/sqlite3.1
Package sqlite3-3.6.14.2 registered in /var/db/pkg/sqlite3-3.6.14.2
netbsd# pkg_add -v ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/pkgin-0.2.5.tgz
Running install with PRE-INSTALL for pkgin-0.2.5.
bin/pkgin
man/man1/pkgin.1
share/examples/pkgin/repositories.conf.example
Executing '/bin/mkdir -p '/usr/pkg'/etc/pkgin'
Running install with PRE-INSTALL for pkgin-0.2.5.
pkgin-0.2.5: copying /usr/pkg/share/examples/pkgin/repositories.conf.example to /usr/pkg/etc/pkgin/repositories.conf
Package pkgin-0.2.5 registered in /var/db/pkg/pkgin-0.2.5
#========================================================================
$NetBSD: MESSAGE,v 1.1.1.1 2009/06/08 13:58:26 imil Exp $

First steps before using pkgin.

. Modify /usr/pkg/etc/pkgin/repositories.conf to suit your platform
. Initialize the database :

        # pkgin update

#========================================================================
netbsd# vi /usr/pkg/etc/pkgin/repositories.conf
netbsd# pkgin update
processing local summary...
updating database: 100%
downloading pkg_summary.bz2: 100%
processing remote summary (ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0.1_2009Q2/All/)...
updating database: 100%

Installation de Xen

On garde sous les yeux:

Et on y va:

netbsd# pkgin install xentools33
calculating dependencies for xentools33...
nothing to upgrade.
8 packages to be installed: ncurses-5.7nb1 readline-6.0 libffi-3.0.8nb2 python25-2.5.4nb1 py25-xml-0.8.4nb2 py25-readline-0nb4 py25-curses-0nb4 xentools33-3.3.1nb6 (14M to download, 59M to install)
proceed ? [y/N] y
...
netbsd# cp /usr/pkg/share/examples/rc.d/* /etc/rc.d/
netbsd# chmod 755 /etc/rc.d/xen*
netbsd# cd /dev && sh MAKEDEV xen

netbsd# pkgin install xenkernel33
calculating dependencies for xenkernel33...
nothing to upgrade.
1 packages to be installed: xenkernel33-3.3.1nb1 (828K to download, 828K to install)
proceed ? [y/N] y
...

netbsd# cp /usr/pkg/xen3-kernel/xen.gz /

On récupère depuis ftp://ftp.fr.netbsd.org/pub/NetBSD/NetBSD-5.0.1/i386/binary/kernel/

Tout le monde est là:

netbsd# ls /
.cshrc       cdrom       libexec                     proc        usr
.profile     dev         mnt                         rescue      var
altroot      etc         netbsd                      root        xen.gz
bin          kern        netbsd-INSTALL_XEN3_DOMU.gz sbin
boot         lib         netbsd-XEN3_DOM0.gz         stand
boot.cfg     libdata     netbsd-XEN3_DOMU.gz         tmp

netbsd# cat /boot.cfg
menu=Boot normally:boot netbsd
menu=Boot single user:boot netbsd -s
menu=Disable ACPI:boot netbsd -2
menu=Disable ACPI and SMP:boot netbsd -12
menu=Boot Xen dom0:load /netbsd-XEN3_DOM0.gz console=pc;multiboot /xen.gz dom0_mem=256M -s
menu=Drop to boot prompt:prompt
default=1
timeout=5

netbsd# reboot

On choisit manuellement la cinquième entrée et chocapik:

Mismatch between XEN and DOM0 kernel

On va lire http://archive.netbsd.se/?ml=port-xen&a=2008-08&t=8360302, puis http://www.netbsd.org/ports/xen/ et on se dit qu'on va attendre: "A new kernel XEN3PAE_DOM0 should show up in the next HEAD autobuild."

et c'est (re)parti:

netbsd# pkgin remove xenkernel33
netbsd# pkgin remove xentools33
netbsd# pkgin install xenkernel3
netbsd# pkgin install xentools3
netbsd# cp /usr/pkg/xen3-kernel/xen.gz /
netbsd# reboot

On choisit la cinquième entrée du menu de boot et hop un dmesg

netbsd# cp /usr/pkg/share/examples/rc.d/* /etc/rc.d/
netbsd# chmod 755 /etc/rc.d/xen*
netbsd# echo "xend=YES" >> /etc/rc.conf
netbsd# echo "xenbackendd=YES" >> /etc/rc.conf
netbsd# echo "xendomains=YES" >> /etc/rc.conf
netbsd# xend start
netbsd# xenbackendd

netbsd# cat /etc/ifconfig.bridge0
create
!brconfig $int add bge0 up

On modifie le script /usr/pkg/etc/xen/scripts/vif-bridge

netbsd# grep xbridge= /usr/pkg/etc/xen/scripts/vif-bridge
        #xbridge=$(xenstore-read "$xpath/bridge")
        xbridge=bridge0

Configuration des domU

netbsd# mkdir -p /home/xen
netbsd# dd if=/dev/zero of=/home/xen/netbsd-001.img bs=1m count=2k
netbsd# grep -v "^#" /usr/pkg/etc/xen/netbsd-001
kernel = "/netbsd-INSTALL_XEN3_DOMU.gz"
memory = 128
name = "netbsd-001"
vif = [ 'bridge=bridge0' ]
disk = [ 'file:/home/xen/netbsd-001.img,xbd0a,w', 'file:/home/xen/i386cd-5.0.1.iso,xbd1d,r' ]
root = "/dev/xbd0a"

Roulement de tambour:

netbsd# xm create -c /usr/pkg/etc/xen/netbsd-001
Error: Device 0 (vif) could not be connected. Hotplug scripts not working

On active le bridge0 sinon les domU ne se lance pas:

netbsd# /etc/rc.d/network restart 

On installe tranquillou, minimal, depuis le cd qui est en xbd1d et pas cd0a, et on finit par un

netbsd-001# halt -p

ctrl+] pour quitter la console du domU. On bascule sur le kernel normal:

netbsd# grep ^kernel /usr/pkg/etc/xen/netbsd-001
kernel = "netbsd-XEN3_DOMU.gz"

On boote le domU et voilà-t-y pas qu'il demande sur quoi booter :( On modifie /usr/pkg/etc/xen/netbsd-001

netbsd# grep ^root /usr/pkg/etc/xen/netbsd-001
root = "xbd0a"

Si au prochain reboot du dom0 pas de xen, on n'oublie pas de modifier l'entrée par défaut de /boot.cfg:

netbsd# grep ^default /boot.cfg
default=5

Poufinage domU

On a donc une image d'un domU non configurée. Pourquoi ne pas en profiter ?

netbsd# dd if=/home/xen/netbsd-001.img of=/home/xen/_netbsd.img

On pourra rapidement (re)faire un domU:

netbsd# dd if=/home/xen/_netbsd.img of=/home/xen/netbsd-002.img
netbsd# sed -e 's/001/002/' /usr/pkg/etc/xen/netbsd-001 > /usr/pkg/etc/xen/netbsd-002

Reste à commenter les lignes screen de /etc/wscons.conf et garder uniquement la console on dans /etc/ttys. Un peu de configuration:

netbsd-001# tail /etc/rc.conf
ifconfig_bge0="inet 10.50.0.41 netmask 255.255.255.0"
defaultroute="10.50.0.100"
hostname="netbsd-001.domain.tld"
sshd=YES
powerd=YES

netbsd-001# cat /etc/resolv.conf
domain domain.tld
search domain.tld
nameserver 192.168.0.2
nameserver 192.168.0.1
nameserver 192.168.0.3

Pour démarrer automatiquement notre domU:

netbsd# echo 'xendomains="netbsd-001"' >> /etc/rc.conf

A venir

Un seul disque n'est pas suffisant pour une mise en production. Je vais donc rajouter un disque et refaire une installation sur du raid 1 (mirroir).

Les fichiers utilisés comme device pour les domU je n'aime pas car on superpose les couches:

disque -> partition -> file system -> partition -> file system
           dom0         dom0           domU         domU

On ne dispose pas encore de LVM ni de ZFS (mais c'est en cours). Vu la quantité de RAM et le nombre d'IP disponibles, je vais pouvoir affecter une (des) partitions à mes 4 domU:

disque -> partition -> file system
           dom0         dom0

       -> partition -> file system
           domU         domU
       -> partition -> file system
           domU         domU
       -> partition -> file system
           domU         domU
       -> partition -> file system
           domU         domU

Le dom0 doit être un peu mieux configuré: sshd, pf, ntp, cache dns, centralisation des logs, un petit smartmontool, du symon (ou munin) et deux trois trucs qui facilitent la vie. En attendant un controleur SATA et deux disques de plus grosse capacité, amusez-vous bien avec NetBSD et Xen !

29/07/2009

Openwrt et haute dispo

[ openwrt cluster dhcp dns ntp makefile ]

Le nombre d'openwrt dans mon bureau ne cesse d'augmenter (et les promos sur http://shop.fon.com n'arrange rien :) je me suis demandé comment mettre en oeuvre un peu de haute-dispo (histoire de faire hype).

Principaux services concernés:

J'ai pour ce faire un Netgear DG834, une Fonera et une Fonera+, tous sous Kamikaze (8.09 et 8.09.1).

Ayant désactivé le dhcp de ma box, c'est donc une de mes fonera qui a pris le relai. A force de google et de wiki openwrt, je suis arrivé à la configuration suivante:

[ extrait /etc/config/dhcp ]
config dhcp lan
    option interface        lan
    option start    100
    option limit    150
    option leasetime        60h
    list dhcp_option '3,192.168.0.254'   # gateway
    list dhcp_option '6,192.168.0.251,192.168.0.230,192.168.0.250' # dns
    list dhcp_option '42,ntp.localdomain.tld'  # ntp-server
    option force 1 # pas de test si un autre serveur dhcp est sur le reseau

J'ai recopié cette config sur les deux autres openwrt. J'ai donc 3 serveurs dhcp et au niveau client, c'est le serveur qui répond le plus vite qui gagne.

Un round-robin dns fait l'affaire. Chaque openwrt a un alias "ntp".

Le sujet de ce billet. Afin que mes 3 dnsmasq me répondent tous la même chose, il me faut synchroniser 2 fichiers: /etc/config/luci_ethers et /etc/config/luci_hosts. /etc/config/luci_ethers pour faire du dhcp à baux permanents (une adresse mac aura toujours la même adresse ip) et /etc/config/luci_host qui s'occupe de la conversion ip <-> host.

dnsmasq n'a pas de notion maitre/esclave et je ne vais pas installer rsync pour 2 fichiers. De plus, l'ordre d'arrêt/démarrage des 3 services (luci_ethers, luci_host, dnsmasq) a son importance. Un petit script perl, un Makefile et le tour est joué:

dsx&#64;linutop>vim dns.pl (ajout d'une adresse {mac, ipv4, ipv6} ou un alias)
dsx&#64;linutop>make
./dns.pl luci_hosts > luci_hosts
./dns.pl luci_ethers > luci_ethers
dsx&#64;linutop>make update
scp -q luci_hosts luci_ethers openwrt1:/etc/config/
scp -q luci_hosts luci_ethers openwrt2:/etc/config/
scp -q luci_hosts luci_ethers openwrt3:/etc/config/
dsx&#64;linutop>make restart
ssh openwrt1 ' /etc/init.d/dnsmasq stop; /etc/init.d/luci_hosts stop; /etc/init.d/luci_ethers stop; /etc/init.d/luci_ethers start; /etc/init.d/luci_hosts start; /etc/init.d/dnsmasq start; '
Terminated
ssh openwrt2 ' /etc/init.d/dnsmasq stop; /etc/init.d/luci_hosts stop; /etc/init.d/luci_ethers stop; /etc/init.d/luci_ethers start; /etc/init.d/luci_hosts start; /etc/init.d/dnsmasq start; '
Terminated
ssh openwrt3 ' /etc/init.d/dnsmasq stop; /etc/init.d/luci_hosts stop; /etc/init.d/luci_ethers stop; /etc/init.d/luci_ethers start; /etc/init.d/luci_hosts start; /etc/init.d/dnsmasq start; '
Terminated

Le tout est disponible ici. Toute remarque est la bienvenue :)

29/07/2009

Bind, patch et jail

[ bind jail ]

Seul soucis:

dsx&#64;linutop>ssh ns.bsdsx.fr df -h
Filesystem       Size    Used   Avail Capacity  Mounted on
zfs/jail/ns72    1.0G    157M    849M    16%    /

Mais FreeBSD est suffisemment bien fait. Je me connecte sur le kimsufi où les sources sont disponibles. Je suis la procédure à la lettre. J'ai donc un bind 9 patché mais pas dans ma jail dns. Reste à mettre à jour la jail:

kimsufi>cd /usr/src/lib/bind
kimsufi>make DESTDIR=/zfs/jail/ns72 install
kimsufi>cd /usr/src/usr.sbin/named
kimsufi>make DESTDIR=/zfs/jail/ns72 install

Un restart pour finir:

dsx&#64;linutop>ssh ns /etc/rc.d/named restart

Et voilà !

27/06/2009

Jail et ipv6

[ jail ipv6 ]

Depuis FreeBSD 7.2, les jails peuvent avoir aucune, une ou des adresses ipv4 et/ou ipv6. Si l'utilisation d'une jail sans ip peut s'apparenter à un chroot, que faire de plusieurs ipv4/ipv6 ? Allons faire un tour au pays des jails.

/etc/rc.conf mono ip

jail_essai_rootdir=/zfs/jail/essai
jail_essai_hostname=essai.bsdsx.fr
jail_essai_ip=172.16.0.42
jail_essai_interface=lo1
jail_essai_devfs_enable="YES"
jail_essai_devfs_ruleset="devfsrules_jail"

Pour une jail à l'ancienne, il nous faut:

La configuration des services tournant dans cette jail est assez simple: tous les démons doivent écouter 172.16.0.42 (sshd -> ListenAddress, lighttpd -> server.bind, nginx -> listen ...)

/etc/rc.conf v4 + v6

jail_essai_rootdir=/zfs/jail/essai
jail_essai_hostname=essai.bsdsx.fr
jail_essai_devfs_enable="YES"
jail_essai_devfs_ruleset="devfsrules_jail"
jail_essai_ip="lo1|172.16.0.42,vr0|2001:41d0:1:34b6::42"

La syntaxe de l'option 'ip' a évolué. On peut désormais préciser l'interface d'une adresse ip. Ici, lo1 est notre interface privée et vr0 l'interface ipv6 publique.

> ifconfig
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC>
        ether 00:15:f2:5d:cc:a0
        inet6 2001:41d0:1:34b6::17 prefixlen 128 
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet 172.16.0.17 netmask 0xffffffff 
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160

On remarquera l'apparition d'un lo0 (son absence dans les anciennes jails pouvait géner certains services). Les démons peuvent écouter sur toutes les interfaces, sans configuration particulière:

> grep ListenAddress /etc/ssh/sshd_config 
#ListenAddress 0.0.0.0
#ListenAddress ::
> netstat -an -f inet
netstat: kvm not available: /dev/mem: No such file or directory
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0 172.16.0.42.22         *.*                    LISTEN
> netstat -an -f inet6
netstat: kvm not available: /dev/mem: No such file or directory
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp6       0     48 2001:41d0:1:34b6.22    2a01:e35:2ee9:f6.35888 ESTABLISHED
tcp6       0      0 2001:41d0:1:34b6.22    *.*                    LISTEN

/etc/rc.conf v4 + multi v6

jail_essai_ip_multi0="vr0|2001:41d0:1:34b6::43"
jail_essai_ip_multi1="vr0|2001:41d0:1:34b6::44"

Simple non ? Attention à ne pas faire de trou dans la numérotation des multi car sinon le script /etc/rc.d/jail ne les prendra pas en compte.

> ifconfig
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC>
        ether 00:15:f2:5d:cc:a0
        inet6 2001:41d0:1:34b6::42 prefixlen 128
        inet6 2001:41d0:1:34b6::43 prefixlen 128
        inet6 2001:41d0:1:34b6::44 prefixlen 128
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet 172.16.0.17 netmask 0xffffffff
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33160

Utilisation

L'accès aux services des anciennes jails se faisait en ipv4 uniquement. A nous les joies des redirections/translations (mais pf est notre ami :)

nat on $ext_if from !($ext_if) -> ($ext_if:0)
rdr pass on $ext_if proto tcp from <ssh_ok> to port 65080 -> 172.16.0.1 port ssh
rdr pass on $ext_if proto tcp from <ssh_ok> to port 65081 -> 172.16.0.41 port ssh

Mais maintenant que nos jails sont ipv6 ready:

pass quick on $ext_if inet6 proto tcp from <ssh6_ok> to any port ssh

hostname et jail

Petite précision: le nom d'une jail peut contenir un underscore mais pas de tiret. Un nom d'hôte ne peut pas contenir d'underscore.

Et maintenant

Il ne me reste plus qu'à:

En effet, avec toutes ces adresses disponibles, on peut vraiment affecter une ipv6 à un service et/ou un domaine virtuel (virtual host, ssl, wildcard, toussa... :)

20/06/2009

Linutop 3, clefs USB et SSD

[ linutop usb ssd ]

Afin de remplacer un antique Compaq (PII@400, 64 Mo, 3 Go de disque) qui devenait bruyant, j'ai choisi un Linutop v3.

Mon seul critère: 0 décibel. Mon bureau s'est transformé en chambre et depuis, fini le switch 24 ports, les disques SCSI et autres ventilateurs qui font penser à un B17 au décollage.

Objectif atteint mais restait un détail: les 2 Go de flash, bien suffisant pour un OpenBSD 4.5, risquent d'être un peu juste pour mon home et les logs de mes différents OpenWRT. Mon home étant raisonnable (100 Mo ~) et l'écriture des logs pouvant mettre à mal la flash, je me dis qu'une clef usb fera largement l'affaire. C'est le début des ennuis.

Machine démarrée, je branche ma clef, fdisk, disklabel, newfs et voila mon home tout beau tout propre. Reboot de la machine, logo "LINUTOP", perte du signal vidéo, logo "LINUTOP", perte du signal vidéo... Aïe. Changement de clef, rebelote. Troisième clef, même motif, même punition. Quatrième clef, il y a vraiment quelque chose de pourri au royaume du Danemark. 6 connecteurs usb, j'en fais le tour. Ma tension monte. Je ne me décourage pas et teste un lecteur de compact flash. Nada. Je suis pas un peu maudit là ?

Avec l'usb, on soupçonne rapidement l'alimentation. Je me procure un hub usb alimenté. Pas mieux. Pire, un lecteur/graveur de DVD usb fonctionne comme un charme. Va comprendre Charles.

Seule lueur d'espoir: une vieille clef noname de 128 Mo. Pas suffisant pour mon home, encore moins pour mes logs. Mais c'est un bon début. La lueur se tranforme en rayon de soleil: la clef d'1 Go, fournie avec mon Linutop v1. Bonheur. Une clef de 4 Go, empruntée du boulot, finit par me rassurer. Félicité.

Pour vous épargner des montées d'adrénaline, un petit récapitulatif:

Les clefs suivantes provoquent un reboot en boucle:

SanDisk CRUZER 2 Go
idVendor           0x0781 SanDisk Corp.
idProduct          0x550a 
iManufacturer           1 SanDisk
iProduct                2 Cruzer Pattern
iSerial                 3 1100430EF18167FA

PNY Attache 1 Go
idVendor           0x0930 Toshiba Corp.
idProduct          0x6544 
iManufacturer           1         
iProduct                2 USB Flash Memory
iSerial                 3 0702051036590

Emtec 1 Go
idVendor           0x13fe Kingston Technology Company Inc.
idProduct          0x1e00 
iManufacturer           1         
iProduct                2 USB DISK 2.0    
iSerial                 3 0777053B01C5

Integral 1 Go
idVendor           0x13fe Kingston Technology Company Inc.
idProduct          0x1a00 512MB/1GB Flash Drive
iManufacturer           1         
iProduct                2 USB DISK 2.0    
iSerial                 3 07691738011C

Les clefs suivantes fonctionnent correctement:

Lexar 4 Go
idVendor           0x05dc Lexar Media, Inc.
idProduct          0xa732
iManufacturer           1 Lexar
iProduct                2 JD Secure II +
iSerial                 3 AA04011300003478

Noname 128 Mo
idVendor           0x0ef5 PointChips
idProduct          0x2202 Flash Disk
iManufacturer           1 YOUR_COMPANY
iProduct                2 YOUR_PRODUCT
iSerial                 3 SN12345678901

Kingston Data Traveler 1 Go
idVendor           0x0951 Kingston Technology
idProduct          0x1603 Data Traveler 1GB/2GB Pen Drive
iManufacturer           1 Kingston
iProduct                2 DataTraveler 2.00000000184
iSerial                 3 0000000184

Si mon bureau s'est transformé en chambre, cela a au moins un avantage: la fêtes des père. J'ai reçu un sympatique ssd de 16 Go de chez OCZ au format mini pcie. Le linutop v3 refuse tout simplement de démarrer avec. J'attends des nouvelles du constructeur.

Dernières nouvelles:

14/05/2009

OpenWrt et Netgear DG834

[ openwrt dg834 ]

Installation

Un vieux modem/routeur Netgear DG834 trainait sur un coin de mon bureau. Un rapide tour sur http://oldwiki.openwrt.org/OpenWrtDocs(2f)Hardware.html m'apprend que ce matériel est supporté. Je vais donc décrire l'installation de Kamikaze 8.09.

Pas à pas

On commence par activer le telnet depuis l'interface html:

$ wget --user=admin --password=passord 'http://192.168.0.1/setup.cgi?todo=debug'
$ telnet 192.169.0.1

Petit tour du propriétaire:

# cat /proc/version 
Linux version 2.4.17_mvl21-malta-mips_fp_le (root&#64;Run-P4) (gcc version 2.95.3 20010315 (release/MontaVista)) #6 Wed Sep 7 16:50:05 CST 2005

# cat /proc/meminfo 
        total:    used:    free:  shared: buffers:  cached:
Mem:  14757888  6991872  7766016        0   778240  2539520
Swap:        0        0        0
MemTotal:        14412 kB
MemFree:          7584 kB
MemShared:           0 kB
Buffers:           760 kB
Cached:           2480 kB
SwapCached:          0 kB
Active:           1008 kB
Inactive:         3232 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:        14412 kB
LowFree:          7584 kB
SwapTotal:           0 kB
SwapFree:            0 kB

# cat /proc/ticfg/env 
memsize 0x01000000
flashsize       0x00400000
modetty0        115200,n,8,1,hw
modetty1        115200,n,8,1,hw
bootserport     tty0
cpufrequency    150000000
sysfrequency    125000000
bootloaderVersion       0.18.01
ProductID       DG834
HWRevision      Unknown
SerialNumber    none
prompt  DGB34
firstfreeaddress        0x9402e088
req_fullrate_freq       125000000
mtd0    0x900d0000,0x903e0000
mtd1    0x90020000,0x900d0000
mtd2    0x90000000,0x90020000
mtd3    0x903e0000,0x903f0000
autoload
maca    00:09:5b:9e:8e:be
macb    00:09:5b:9e:8e:bf
Bridge_MODE     0
mt_time 0
oam_lb_timeout  100
mtd4    0x903f0000,0x90400000
my_ipaddress    192.168.0.1

# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00310000 00010000 "mtd0"
mtd1: 000b0000 00010000 "mtd1"
mtd2: 00020000 00010000 "mtd2"
mtd3: 00010000 00010000 "mtd3"
mtd4: 00010000 00010000 "mtd4"

La lecture de http://www.earth.li/~noodles/hardware-dg834g.html nous apprend qu'il faut modifier le firmware d'origine. Une version de mtd2.bin avec le bon md5 est disponible ici.

# cd /tmp
# wget http://download.bsdsx.fr/netgear/mtd2.bin
# dd if=/tmp/mtd2.bin of=/dev/mtdblock/2
# reboot

On réactive le telnet et on prépare l'installation d'OpenWrt:

# cd /proc/sys/dev/adam2 
# echo "mtd5 0x90020000,0x903e0000" > environment
# reboot

C'est reparti pour un telnet et on passe aux choses sérieuses:

# wget http://downloads.openwrt.org/kamikaze/8.09/ar7/openwrt-ar7-squashfs.bin
# dd if=openwrt-ar7-squashfs.bin of=/dev/mtdblock/5
# reboot

Et là c'est le drame:

$ ping -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 192.168.0.115 icmp_seq=1 Destination Host Unreachable

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

Console série USB

Pour cette recette, il nous faut:

Petit tip pour la soudure: maintenez simplement la pinoche sur la pastille d'étain à l'aide de la pince et faites chauffer le dessus de la pinoche. Appuyez vers le bas et la pinoche rentre toute seule.

Un petit schéma ascii:

j101

j603 [[o]] [o] [o] [o] [o] [o]
       N    B       B
       o    l       l
       i    a       e
       r    n       u
            c
j100

Je suis une vrai quiche en électronique donc cette manipulation est vraiment à la portée du plus grand nombre.

Lève-toi et marche

$ cu -l /dev/ttyU0 -s 115200
ADAM2 Revision 0.18.01
(C) Copyright 1996-2003 Texas Instruments Inc. All Rights Reserved.
(C) Copyright 2003 Telogy Networks, Inc.
Usage: setmfreq [-d] [-s sys_freq, in MHz] [cpu_freq, in MHz]
Memory optimization Complete!

DGB34 >
Press any key to abort OS load, or wait 3 seconds for OS to boot...

DGB34 > help
   Commands   Description
   --------   -----------
         h/help Displays the commands supported
           info Displays board information
          memop Memory Optimization
       setmfreq configures/dumps the system and cpu frequencies
             dm Dump memory at <address>
          erase Erase Flash except Adam2 Kernel and Env space
       printenv Displays Env. Variables
         setenv Sets Env. variable <var> with a value <val>
       unsetenv Unsets the Env. variable <var>
         fixenv Defragment for Env. space
             go Loads the image starting at address <mtd1>

DGB34 > info
Monitor Revision              0.18.01
Monitor Compilation time      Aug  1 2003, 14:43:32
Endianness                    Little
External Memory rate          Full, 16 bit wide
CPU Frequency                 150 MHz
DGB34 > printenv
memsize               0x01000000
flashsize             0x00400000
modetty0              115200,n,8,1,hw
modetty1              115200,n,8,1,hw
bootserport           tty0
cpufrequency          150000000
sysfrequency          125000000
bootloaderVersion     0.18.01
ProductID             DG834
HWRevision            Unknown
SerialNumber          none
prompt                DGB34
firstfreeaddress      0x9402e088
req_fullrate_freq     125000000
mtd0                  0x900d0000,0x903e0000
mtd1                  0x90020000,0x900d0000
mtd2                  0x90000000,0x90020000
mtd3                  0x903e0000,0x903f0000
autoload
maca                  00:09:5b:9e:8e:be
macb                  00:09:5b:9e:8e:bf
Bridge_MODE           0
mt_time               0
oam_lb_timeout        100
mtd4                  0x903f0000,0x90400000
my_ipaddress          192.168.0.1
mtd5                  0x90020000,0x903e0000
DGB34 > go
checksum error
Linux version 2.6.26.5 (nbd&#64;baustelle) (gcc version 4.1.2) #1 Mon Jan 5 05:57:36 CET 2009
console [early0] enabled
CPU revision is: 00018448 (MIPS 4KEc)
TI AR7 (TNETD7300), ID: 0x0005, Revision: 0x02
Determined physical RAM map:
 memory: 01000000 &#64; 14000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
  Normal      81920 ->    86016
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0:    81920 ->    86016
Built 1 zonelists in Zone order, mobility grouping off.  Total pages: 4064
Kernel command line: init=/etc/preinit rootfstype=squashfs,jffs2, console=ttyS0,115200n8
Primary instruction cache 16kB, VIPT, 4-way, linesize 16 bytes.
Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 16 bytes
PID hash table entries: 64 (order: 6, 256 bytes)
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 12572k/16384k available (1988k kernel code, 3812k reserved, 422k data, 124k init, 0k highmem)
SLUB: Genslabs=6, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Mount-cache hash table entries: 512
net_namespace: 644 bytes
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
NET: Registered protocol family 1
squashfs: version 3.0 (2006/03/15) Phillip Lougher
Registering mini_fo version $Id$
JFFS2 version 2.2. (NAND) (SUMMARY) &#169; 2001-2006 Red Hat, Inc.
msgmni has been set to 24
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x8610e00 (irq = 15) is a TI-AR7
console handover: boot [early0] -> real [ttyS0]
serial8250: ttyS1 at MMIO 0x8610f00 (irq = 16) is a TI-AR7
Fixed MDIO Bus: probed
cpmac-mii: probed
cpmac: device eth0 (regs: 08612800, irq: 41, phy: , mac: 00:09:5b:9e:8e:bf)
cpmac: device eth1 (regs: 08610000, irq: 27, phy: , mac: 00:09:5b:9e:8e:be)
physmap platform flash device: 00800000 at 10000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
 Amd/Fujitsu Extended Query Table at 0x0040
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
cmdlinepart partition parsing not available
RedBoot partition parsing not available
4 ar7part partitions found on MTD device physmap-flash.0
Creating 4 MTD partitions on "physmap-flash.0":
0x00000000-0x00010000 : "loader"
0x003f0000-0x00400000 : "config"
0x00020000-0x003f0000 : "linux"
0x000f0000-0x003f0000 : "rootfs"
mtd: partition "rootfs" set to be root filesystem
mtd: partition "rootfs_data" created automatically, ofs=220000, len=1D0000
0x00220000-0x003f0000 : "rootfs_data"
ar7_wdt: timer margin 59 seconds (prescale 65535, change 57180, freq 62500000)
Registered led device: ppp
Registered led device: status
Registered led device: adsl
Registered led device: wifi
Registered led device: power
vlynq0: regs 0x08611800, irq 29, mem 0x04000000
vlynq1: regs 0x08611c00, irq 33, mem 0x0c000000
TCP vegas registered
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb&#64;candelatech.com>
All bugs added by David S. Miller <davem&#64;redhat.com>
VFS: Mounted root (squashfs filesystem) readonly.
Freeing unused kernel memory: 124k freed
Please be patient, while OpenWrt loads ...
Algorithmics/MIPS FPU Emulator v1.5
- preinit -
Press CTRL-C for failsafe
switching to jffs2
mini_fo: using base directory: /
mini_fo: using storage directory: /jffs
- init -

Please press Enter to activate this console.


BusyBox v1.11.2 (2009-01-04 22:13:46 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 KAMIKAZE (8.09, r14511) ----------------------------
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!
 ---------------------------------------------------
root&#64;OpenWrt:/# PHY: 0:10 - Link is Down
br-lan: Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature.
device eth0 entered promiscuous mode
br-lan: port 1(eth0) entering learning state
br-lan: topology change detected, propagating
br-lan: port 1(eth0) entering forwarding state
PPP generic driver version 2.4.2
ip_tables: (C) 2000-2006 Netfilter Core Team
br-lan: port 1(eth0) entering disabled state
br-lan: port 1(eth0) entering learning state
br-lan: topology change detected, propagating
br-lan: port 1(eth0) entering forwarding state
nf_conntrack version 0.5.0 (1024 buckets, 4096 max)
root&#64;OpenWrt:/# ifconfig
br-lan    Link encap:Ethernet  HWaddr 00:09:5B:9E:8E:BF
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 00:09:5B:9E:8E:BF
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:41

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root&#64;OpenWrt:/#

Bon, je reconnais que j'aurais pu me passer de la partie fer à souder si j'avais pingué 192.168.1.1 au lieu de 192.168.0.1 . Cette ip est fixée en dur lors de la compilation d'OpenWrt.

Bonne nouvelle, j'ai maintenant accès au boot ADAM2. Pas suffisant pour flasher la bête en cas de problème comme on peut le lire sur http://www.seattlewireless.net/ADAM2 et mes tentatives de ftp se soldaient par des échecs. Mais maintenant que j'ai accè;s à la console, il est plus facile de détecter cette petite fenêtre où le bootloader accepte les connexions ftp: il suffit d'attendre le message "Press any key to abort OS load...".

Et maintenant

Et oui, c'est bien beau mais qu'est-ce que j'en fais de ce dg834 ? Mon FAI a un célèbre client prénommé Rodolphe qui a tout compris. Ce qui me chagrine:

Quand on commence à avoir plusieurs machines, c'est le genre de services bien pratique. Et quand le tout est ipv6 compliant, pourquoi s'en priver ?

J'ai donc désactiver le dhcp de ma box et configuré dnsmasq. Pour vous éviter de perdre du temps, un extrait de la conf:

config dhcp lan
        option interface      lan
        option start    100
        option limit    150
        option leasetime      48h
        option dhcp_option '3,192.168.0.254'   # gateway

Le dhcp_option m'a fait un peu tourné en bourrique mais maintenant "it works" !

Et demain

Petit tour du stock:

De quoi monter un cluster OpenWrt !

05/05/2009

Mises à jour diverses et variées

[ update freebsd openwrt blosxom ]

Il y a des périodes comme ça, on a envie/besoin de changement(s). Petit récapitulatif:

kimsufi

Passage de FreeBSD 7.1 en 7.2. A moi les joies des jails multi ipv4/ipv6 !

fon2200

Passage d' OpenWRT 7.09 en 8.09. Toujours aussi simple une fois que l'on a accès à la console.

dg834g

Récupération d'un petit boitier modem/routeur wifi qui a rapidement ingurgité un OpenWrt 8.09. Seule ombre au tableau:

root&#64;dg384g:~# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.2M      1.2M         0 100% /
/dev/root                 1.2M      1.2M         0 100% /rom
tmpfs                     6.2M    736.0k      5.5M  12% /tmp
tmpfs                   512.0k         0    512.0k   0% /dev
/dev/mtdblock4            1.8M    760.0k      1.1M  41% /jffs
mini_fo:/jffs             1.2M      1.2M         0 100% /

Un rootfs de 1.2 Mo rempli à 100% et un /tmp qui ne sert pas beaucoup. Je dois revoir ma copie.

shuttle K45

J'ai mis en place un petit NAS pour sauvegarder les photos et vidéos familiales. Au menu:

Un prochain billet décrira plus en détail l'histoire de cette machine.

Le blog

Il n'aura échappé à personne le changement radical de ce blog. On m'a fait découvrir blosxom et je suis tombé sous le charme de ces 444 lignes de perl. Du perl, rien que du perl, pas de dépendance. Le style est un peu brut de décoffrage mais j'y travaille :)

A venir:

Bon, c'est pas le tout mais j'ai du boulot :)

Ps: pour les adeptes des flux rss/atom, c'est en cours.

Pages : 1 2