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
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
[ 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:
- un utilisateur git
- les dépôts dans /home/git/repo
- tous les dépôts seront accessibles depuis l'extérieur
/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
Le contexte:
- HP ProLiant DL140
- 2 Xeon HT (32 bits)
- 4 Go de RAM
- 80 Go IDE (récup)
- 5 adresses IP
- le tout derrière un squid
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:
- Figure 3.5. MBR partitions
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)
- Figure 3.6. Full or custom installation
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:
- http://www.netbsd.org/ports/xen/howto.html
- http://www.netbsdfr.org/wiki/doku.php?id=tips:xen3_current
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 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:
- dhcp
- dns
- ntp
J'ai pour ce faire un Netgear DG834, une Fonera et une Fonera+, tous sous Kamikaze (8.09 et 8.09.1).
- Le dhcp
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.
- ntp
Un round-robin dns fait l'affaire. Chaque openwrt a un alias "ntp".
- dns
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@linutop>vim dns.pl (ajout d'une adresse {mac, ipv4, ipv6} ou un alias)
dsx@linutop>make
./dns.pl luci_hosts > luci_hosts
./dns.pl luci_ethers > luci_ethers
dsx@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@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
Seul soucis:
dsx@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@linutop>ssh ns /etc/rc.d/named restart
Et voilà !
27/06/2009
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:
- une interface (ici lo1, clone de lo0)
- une ipv4 (172.16.0.42)
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'à:
- renseigner mon dns (enregistrement AAAA)
- configurer mes reverses dns (que ovh propose, n'est-ce pas messieurs de chez free)
- générer des certificats SSL
- m'amuser avec nginx, sendmail, ldap, bind et j'en passe
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
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:
- configuration du BIOS en boot hard disk only
- une clef usb avec une partition bootable (linux|openbsd) provoque un reboot en boucle
- en suivant scrupuleusement ces instructions, la machine démarre mais un "Boot error" laconique conclut l'essai
- une clef usb avec une partition bootable freebsd ne semble pas poser de problème
14/05/2009
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@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:
- un dg834 qui ne répond plus
- un câble nokia data (DKU-5)
- un fer à souder
- un vieux lecteur ZIP IDE
- un vieux câble audio de cdrom
- une petite pince, idéalement à bec courbé
- explosez le lecteur IDE et récupérez les pinoches
- découpez le câble DKU-5
- explosez le connecteur du câble audio
- soudez les petits connecteurs du câble audio aux fils noir, blanc et bleu du DKU-5
- repérez le jumper j603 http://www.thinkbroadband.com/images/reviews/netgear-dg834/cap-19893.jpg
- soudez les pinoches sur le jumper j603 du dg834
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@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 @ 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) © 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@candelatech.com>
All bugs added by David S. Miller <davem@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@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@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@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:
le serveur DHCP
C'est quand même pénible de rebooter la box pour un simple ajout de bail permanent.
pas de serveur DNS cache
Un petit dnsmasq, c'est bonheur ! ping iphone classe non ?
pas de serveur de temps
toutes les machines à la bonne/même heure, c'est pas mieux ?
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:
- 2x fon2100 (1 rj45 + 1 wifi)
- 1x fon2201 (2 rj45 + 1 wifi)
- 1x fon2202 (2 rj45 + 1 wifi + 1 usb)
- 1x dg834 (switch 4 ports rj45)
- 1x dg834g (switch 4 ports rj45 + 1 wifi)
- 1x livebox (switch 4 ports rj45 + 1 wifi + 1 bluetooth + 1 usb)
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@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:
- 2 x 1 To en Raid 1
- FreeBSD
- Zfs
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:
- passage du linutop et des vieux portables en OpenBSD 4.5
- passage des foneras 2100 et de la fonera 2+ en OpenWrt 8.09
- peaufinage du blog
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
Rss