27/05/2010

GuruPlug Server Plus et FreeBSD

[ freebsd guruplug arm ]

Mon GuruPlug Server Plus a fini par arriver. Maintenant que mon OpenRD est opérationnel, j'ai pensé que le GuruPlug me ferait moins de misère. Et bien pas du tout. Pour les futurs acquéreurs: le GuruPlug JTAG Board c'est pas une option.

Pourtant mon plan était simple:

Après plusieurs tentatives, j'ai fini par comprendre que ma clef était reconnue en tant que da2. Je recompile mon kernel avec l'option kivabien (options ROOTDEVNAME="ufs:/dev/da2s2a").

Reboot et paf: re-fail. Le kernel boote, tente de mounter la racine mais, voire MAIS, la clef n'est pas encore détectée. Une première piste me conduit vers une impasse. Le grand Ternet étant fait de clickas et de clickous (de fil en aiguille quoi) je tombe sur ce patch. Mon ami Murphy en profite pour le rendre incompatible avec un FreeBSD 9.0 CURRENT. Je retrousse mes manches et c'est parti pour une scéance de $EDITOR (belle esquive de troll :).

Un reboot pour la route et je touche au but:

guruplug# uname -srm
FreeBSD 9.0-CURRENT arm

Il ne me reste plus qu'à rajouter un user, configurer le réseau et je vois la fin du tunnel. Et ben non. Murphy (ou un de ses potes) décide que le rj45/gigabit n'est pas compatible avec un boot. Il faut le voir pour le croire, ou alors le lire ici, et encore là. Et comme pour l'instant j'utilise un câble croisé entre mon portable (carte réseau giga) et le guruplug, re-re-fail.

Lueur d'espoir: mon switch est en 100Mbits donc je repousse la mise à jour d'une version plus récente de U-Boot.

Pour finir, la configuration du U-Boot:

Marvell>> printenv
bootcmd=setenv ethact egiga0; ${x_bootcmd_ethernet}; setenv ethact egiga1; ${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel}; setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x6400000;
bootdelay=3
baudrate=115200
x_bootcmd_ethernet=ping 192.168.2.1
x_bootcmd_usb=usb start
x_bootcmd_kernel=nand read.e 0x6400000 0x100000 0x400000
x_bootargs=console=ttyS0,115200
x_bootargs_root=ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs
Marvell>> setenv bootcmd 'usb start;fatload usb 1 900000 kernel.bin;go 900000'
Marvell>> saveenv

Au chapitre des mauvaises nouvelles, le GuruPlug peut servir de chauffage d'appoint, mge1 est aux abonnés absents mais c'est en cours. Le lecteur de carte SD, la carte wifi, le bluetooth, ma clef usb fâchée avec le cache me réservent encore de belles soirées.

Dernier re-re-re-fail pour la route: si le GuruPlug JTAG Board est uniquement branché au GuruPlug, le bousin ne démarre pas.

Pour les curieux, un dmesg kivabien.

Update: c'est qui l'enfant de salaud qui m'a piqué mon adresse MAC ? Preuve que l'ipv6 c'est magique.

> ifconfig mge0
mge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
    ether 00:00:00:00:00:00
    inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
    inet6 fe80::845:3302:619b:ed0b%mge0 prefixlen 64 scopeid 0x1 
    inet6 2001:470:ca75:10:845:3302:619b:ed0b prefixlen 64 autoconf 
    nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
d531:~> ping6 -c 1 2001:470:ca75:10:845:3302:619b:ed0b
PING 2001:470:ca75:10:845:3302:619b:ed0b(2001:470:ca75:10:845:3302:619b:ed0b) 56 data bytes
64 bytes from 2001:470:ca75:10:845:3302:619b:ed0b: icmp_seq=1 ttl=63 time=11.9 ms

--- 2001:470:ca75:10:845:3302:619b:ed0b ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 11.969/11.969/11.969/0.000 ms

Update 2:

> grep mge0 /etc/rc.conf 
ifconfig_mge0="ether 00:50:43:aa:aa:aa"
ifconfig_mge0_alias0="inet 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"
ifconfig_mge0_ipv6="RTADV"
> ifconfig mge0
mge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
    ether 00:50:43:aa:aa:aa
    inet6 fe80::250:43ff:feaa:aaaa%mge0 prefixlen 64 scopeid 0x1 
    inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
    inet6 2001:470:ca75:10:250:43ff:feaa:aaaa prefixlen 64 autoconf 
    nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
2 commentaire(s)

14/05/2010

OpenRD et FreeBSD

[ freebsd openrd arm ]

Il y a quelques temps, j'ai craqué pour un OpenRD (bon, j'ai aussi pris un GuruPlug mais il n'est toujours pas arrivé).

La bête a rapidement ingéré un disque sata 2.5, il ne lui manquait plus qu'un FreeBSD et c'est là que ça se gâte.

La documentation officielle propose une installation sur NFS mais dans mon cas, c'est impossible car le FreeBSD que j'utilise est derrière une connexion ADSL. Il va donc falloir ruser. Je me dis que si j'arrive à obtenir un kernel avec une image disque contenant ce qu'il faut pour l'installation c'est gagné (un peu à la sauce OpenBSD et son bsd.rd).

Après quelques essais infructueux à base de (Pico/Nano)BSD, j'explore la voie du "rescue". Je finis par réaliser que le "rescue" se construit très bien avec le "make buildworld" et que je fais d'une pierre deux coups. Cette opération pouvant durer un certain temps, je désactive un maximum de chose dans /etc/src.conf. De plus, je vire de la compile ifmcstat dans /usr/src/usr.sbin/Makefile

U-Boot permet aussi de booter sur une clef usb et je prépare le plan suivant:

Est-il utile de préciser que ça ne va pas se passer comme une lettre à la poste ?

C'est parti :

# setenv DESTDIR /zfs/arm/chroot
# make buildworld TARGET_ARCH=arm
# make installworld TARGET_ARCH=arm
# make distrib-dirs TARGET_ARCH=arm
# make distribution TARGET_ARCH=arm
# tar cjvp -f /tmp/arm.tbz -C /zfs/arm/chroot/ .

Je prépare mon image disque:

# dd if=/dev/zero of=/tmp/mfs_image bs=1k count=4096
# mdconfig -a -t vnode -f /tmp/mfs_image -u 0
# fdisk -B /dev/md0
#   Do you want to change the boot code? [n]
#   Should we write new partition table? [n] y
# disklabel -Brw /dev/md0
# newfs -O1 -o space -m 0 /dev/md0a
# mount /dev/md0a /mnt
# cd /mnt
# mkdir rescue dev key disk
# cd rescue
# rsync -H /zfs/arm/chroot/rescue/* .
# cd
# umount /dev/md0a
# mdconfig -d -u 0

Je compile deux kernels:

# cp /usr/src/sys/arm/conf/DB-88F6XXX /usr/src/sys/arm/conf/OPENRD-MFS
# cp /usr/src/sys/arm/conf/DB-88F6XXX /usr/src/sys/arm/conf/OPENRD
# vi /usr/src/sys/arm/conf/OPENRD-MFS

ident           OPENRD-MFS
...
options         SCHED_4BSD              #4BSD scheduler
options         INET                    #InterNETworking
options         INET6                   #IPv6 communications protocols
options         FFS                     #Berkeley Fast Filesystem
options         MSDOSFS                 # MSDOS Filesystem
options         MD_ROOT                 # MD is a potential root device
options         MD_ROOT_SIZE=4096 # 4M
makeoptions     MFS_IMAGE=/tmp/mfs_image
options         ROOTDEVNAME=\"ufs:/dev/md0a\"

options         SYSVSHM                 #SYSV-style shared memory
options         SYSVMSG                 #SYSV-style message queues
...

# cd /usr/src
# make buildkernel TARGET_ARCH=arm KERNCONF=OPENRD-MFS
# cp /usr/obj/arm/usr/src/sys/OPENRD/kernel.bin /tmp/mfs.bin
# vi /usr/src/sys/arm/conf/OPENRD

ident           OPENRD
...
options         SCHED_4BSD              #4BSD scheduler
options         INET                    #InterNETworking
options         INET6                   #IPv6 communications protocols
options         FFS                     #Berkeley Fast Filesystem
options         MSDOSFS                 # MSDOS Filesystem
options         ROOTDEVNAME=\"ufs:/dev/ad0s1a\"

options         SYSVSHM                 #SYSV-style shared memory
options         SYSVMSG                 #SYSV-style message queues
...

# cd /usr/src
# make buildkernel TARGET_ARCH=arm KERNCONF=OPENRD
# cp /usr/obj/arm/usr/src/sys/OPENRD/kernel.bin /tmp/

Depuis ma Debian, je prépare ma clef usb:

$ sudo mkfs.msdos -c -F 16 /dev/sdb1
$ sudo mount -t msdos /dev/sdb1 /mnt
$ cp arm.tbz *.bin /mnt
$ ls -l /mnt
-rw-r--r-- 1 dsx dsx 24243563 mai 13 08:27 arm.tbz
-rwxr-xr-x 1 dsx dsx  2950452 mai 13 19:15 kernel.bin
-rwxr-xr-x 1 dsx dsx  7145076 mai 12 19:47 mfs.bin

Pour obtenir la console rendez-vous ici, et au départ j'ai utilisé un serveur tftp afin de préserver ma clef usb. Il sera lancé en mode standalone (sudo in.tftpd -L -s /home/dsx/).

$ sudo screen -c /dev/null /dev/ttyUSB1 115200

Marvell>> setenv ipaddr 192.168.1.1
Marvell>> setenv serverip 192.168.1.116
Marvell>> tftpboot 900000 mfs.bin
Using egiga0 device
TFTP from server 192.168.1.116; our IP address is 192.168.1.1
Filename 'mfs.bin'.
Load address: 0x900000
Loading: T #################################################################
         ...
         ###################
done
Bytes transferred = 7084148 (6c1874 hex)
Marvell>> go 900000
[ snip boot ]
May  9 18:30:18 init: login_getclass: unknown class 'daemon'
/etc/rc: Can't open /etc/rc: No such file or directory
Enter full pathname of shell or RETURN for /rescue/sh: 
Cannot read termcap database;
using dumb terminal settings.
# ls
.snap   dev     disk    key     rescue

On retrouve nos différents répertoires qui nous serviront de point de montage:

# mount_msdos /dev/da0a /key

Si ici vous prenez des erreurs, vérifiez la présence de "options MSDOSFS" dans le fichier de configuration du kernel, ça peut faire gagner une après-midi. On peut ensuite supprimer le partitionnement du disque dur à grands coups de "gpart delete" et "gpart destroy".

J'y ai passé plusieurs soirées mais impossible de créer une partition FAT avec gpart afin d'y placer kernel.bin. Le linux fourni ne m'a pas aidé non plus, pas de dosfstools d'installé.

# gpart show ad0
gpart: No such geom: ad0.
# gpart create -s mbr ad0
ad0 created
# gpart show ad0
=>      63  78165297  ad0  MBR  (37G)
        63  78165297       - free -  (37G)
# gpart add -t freebsd ad0
ad0s1 added
# gpart create -s BSD ad0s1
ad0s1 created
# gpart show ad0s1
=>       0  78165297  ad0s1  BSD  (37G)
         0  78165297         - free -  (37G)
# gpart add -i 1 -s 4G -t freebsd-ufs ad0s1
ad0s1a added
# gpart show ad0s1
=>       0  78165297  ad0s1  BSD  (37G)
         0   8388608      1  freebsd-ufs  (4.0G)
   8388608  69776689         - free -  (33G)
# gpart add -i 2 -s 1G -t freebsd-swap ad0s1 
ad0s1b added
# gpart show ad0s1
=>       0  78165297  ad0s1  BSD  (37G)
         0   8388608      1  freebsd-ufs  (4.0G)
   8388608   2097152      2  freebsd-swap  (1.0G)
  10485760  67679537         - free -  (32G)
# gpart add -i 3 -s 1G -t freebsd-ufs ad0s1
gpart: index '3': File exists
# gpart add -i 4 -s 1G -t freebsd-ufs ad0s1
ad0s1d added
...
# gpart show ad0s1
=>       0  78165297  ad0s1  BSD  (37G)
         0   8388608      1  freebsd-ufs  (4.0G)
   8388608   2097152      2  freebsd-swap  (1.0G)
  10485760   2097152      4  freebsd-ufs  (1.0G)
  12582912   2097152      5  freebsd-ufs  (1.0G)
  14680064   2097152      6  freebsd-ufs  (1.0G)
  16777216  61388081      7  freebsd-ufs  (29G)

# newfs /dev/ad0s1a
# newfs /dev/ad0s1d
# newfs /dev/ad0s1e
# newfs /dev/ad0s1f
# newfs /dev/ad0s1g
# mount /dev/ad0s1a /disk/
# cd /disk
# mkdir tmp var home usr
# cp /key/arm.tbz .
# tar xjvpf arm.tbz

Pour la petite histoire, mon disque était un peu HS et freezait de temps en temps lors du tar. J'ai passé un temps fou à diagnostiquer le problème pour finir par acheter un disque neuf.

Bien, il reste à configurer le tout:

# echo '/dev/ad0s1a  /      ufs   rw,sync  1  1' >> etc/fstab
...
# echo '/dev/ad0s1g  /usr   ufs   rw,sync  2  2' >> etc/fstab
# echo 'hostname="openrd.bsdsx.fr"' >> etc/rc.conf
...
# echo 'ifconfig_mge0_ipv6="RTADV"' >> etc/rc.conf

Au passage, la syntaxe ipv6 du /etc.rc.conf a évolué et je m'en suis aperçu un peu tard (encore du temps de perdu). Dernière configuration, U-Boot:

Marvell>> setenv bootcmd 'usb start;fatload usb 0:1 900000 kernel.bin;go 900000'
Marvell>> saveenv

Le résultat:

openrd# uname -a
FreeBSD openrd.bsdsx.fr 9.0-CURRENT FreeBSD 9.0-CURRENT #8: Fri May 14 18:15:14 CEST 2010     root@k45.bsdsx.fr:/usr/obj/arm/usr/src/sys/OPENRD  arm

Pour les curieux les différents fichiers sont disponibles. Bon, c'est pas le tout mais maintenant j'ai un "make buildworld" à faire et des ports à installer (encore des bonnes soirées en perspective).

Update: WITHOUT_MAKE c'est pas une bonne idée. Update2: Romain m'avait bien dit que l'option "sync" dans /etc/fstab était une bonne idée. Après une dizaine de csup -g -L 2 /root/current tous plus foireux les uns que les autres, je confirme.

1 commentaire(s)

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.

0 commentaire(s)

16/06/2008

Mon premier billet

[ freebsd kimsufi install jail ]

Prélude

Pour mon premier billet, je vais décrire l'installation de mon serveur. Après avoir pris un domaine chez gandi.net, j'ai commandé mon serveur dédié chez ovh (livré avec un peu de retard :) avec FreeBSD 7.0. Installation de la version 32 bits par défaut et un partitionnement des plus simple:

ks34581# cat /etc/fstab 
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad4s1a             /               ufs             rw      1       1
/dev/ad4s1b             /home           ufs             rw      2       2
/dev/ad4s1d             swap            swap            sw      0       0
proc                    /proc           procfs  rw              0       0

Depuis le manager je réinstalle la version 64 bits. J'en profite pour activer mon compte de backup.

Configuration de base

Modification du mot de passe root

ks34581# passwd

Suppression des getty inutiles

ks34581# grep "getty Pc" /etc/ttys
ttyv0   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv1   "/usr/libexec/getty Pc"         cons25  off secure
ttyv2   "/usr/libexec/getty Pc"         cons25  off secure
ttyv3   "/usr/libexec/getty Pc"         cons25  off secure
ttyv4   "/usr/libexec/getty Pc"         cons25  off secure
ttyv5   "/usr/libexec/getty Pc"         cons25  off secure
ttyv6   "/usr/libexec/getty Pc"         cons25  off secure
ttyv7   "/usr/libexec/getty Pc"         cons25  off secure
ks34581# kill -HUP 1

Heure locale

ks34581# cp /usr/share/zoneinfo/Europe/Paris /etc/localtime

Désactivation du module linux

ks34581# kldunload linux
ks34581# echo 'linux_enable="NO"' >> /etc/rc.conf

Activation de ZFS

ks34581# kldload zfs
ks34581# echo 'zfs_enable="YES"' >> /etc/rc.conf

Activation de lo1 (pour les jails)

ks34581# ifconfig lo1 create
ks34581# ifconfig lo1 inet 172.16.0.254 netmask 255.255.255.0
ks34581# echo 'network_interfaces="lo0 vr0 lo1"'
ks34581# echo '/sbin/ifconfig lo1 create' > /etc/start_if.lo1
ks34581# echo 'ifconfig_lo1="inet 172.16.0.254 netmask 255.255.255.0"' >> /etc/rc.conf
ks34581# echo '172.16.0.254 kimsufi.mondomaine.tld' >> /etc/hosts

ssh sur interface publique

ks34581# echo 'sshd_flags="-o ListenAddress=<mon.ip.publique>"' >> /etc/rc.conf

syslog en mode local

ks34581# echo 'syslogd_flags="-ss"' >> /etc/rc.conf

named ip v4 only

ks34581# echo 'named_flags="-4"' >> /etc/rc.conf

named sur interface privée

ks34581# grep 172.16.0.254 /etc/named/named.conf
    listen-on       { 127.0.0.1; 172.16.0.254; };

Sauvegarde

Pour l'instant, un simple backup ftp fera l'affaire. Je commence par automatiser l'accès au backup:

ks34581# cat >> /root/.netrc
machine backup
login <votre_login>
password <votre_mot_de_passe>
^D
ks34581# chmod 600 /root/.netrc
ks34581# echo "<adresse.ip.du.backup> backup" >> /etc/hosts

Un script sans prétention:

ks34581# cat /root/bin/backup.sh
#!/bin/sh

set -- `date "+%Y%m%d"`
TBZ=kimsufi-$1.tbz
tar cjf $HOME/tmp/$TBZ -T $HOME/etc/backup.cfg 2>/dev/null
cd $HOME/tmp
echo "put $TBZ" | ftp -V backup

Un fichier de configuration minimal:

ks34581# cat /root/etc/backup.cfg
/etc/rc.conf
/etc/ttys
/etc/start_if.lo1
/etc/namedb/named.conf
/root/.netrc
/root/etc/backup.cfg
/root/bin/backup.sh

Tous les jours à 2h45 du matin:

ks34581# echo '45 2 * * *  $HOME/bin/backup.sh' >> /root/.crontab
ks34581# crontab .crontab
ks34581# echo '/root/.crontab' >> /root/etc/backup.cfg

Courriel

Pour l'instant, l'installation de base de FreeBSD me permet d'envoyer des courriels. J'ajuste la configuration de sendmail pour que les jails puissent en profiter. Une jail smtp est prévue pour plus tard.

ks34581# cd /etc/mail
ks34581# echo 'root: <une.adresse&#64;email.valide>' >> aliases
ks34581# make aliases

Pour pouvoir être utilisé par les jails, sendmail doit écouter sur 172.16.0.254:

ks34581# sed -I'.orig' -e 's/^DS/DS[172.16.0.254]/' /etc/mail/submit.cf
ks34581# echo 'sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=172.16.0.254"' >> /etc/rc.conf
ks34581# echo '/etc/mail/submit.cf' >> $HOME/etc/backup.cfg

Il doit aussi accepter de relayer les jails:

ks34581# cat /etc/mail/relay-domains
ks34581.kimsufi.com
localhost
127.0.0.1
.mondomaine.tld

ks34581# make restart
ks34581# echo '/etc/mail/relay-domains' >> /root/etc/backup.cfg

Pf

Les jails seront sur le réseau 172.16.0.x, interface lo1. Pour accèder à ces jails du NAT s'impose:

ks34581# echo 'pf_enable="YES"' >> /etc/rc.conf
ks34581# echo 'pflog_enable="YES"' >> /etc/rc.conf

Un (trop) simple /etc/pf.conf:

ext_if="vr0"
int_if="lo1"

set block-policy return
set loginterface $ext_if
set skip on lo0
scrub in

nat on $ext_if from !($ext_if) -> ($ext_if:0)

block log on $ext_if

antispoof quick for { lo0 $int_if }
pass in on $ext_if inet proto tcp from any to ($ext_if) port ssh

pass quick on $int_if
pass out on $ext_if

Seul le ssh du kimsufi est accessible. Je rajouterai les règles rdr et pass au fur et à mesure. Je croise les doigts (un pf.conf qui bloque est si vite arrivé :) et hop:

ks34581# pfctl -n -f /etc/pf.conf
ks34581# /etc/rc.d/pf start
ks34581# echo '/etc/pf.conf' >> /root/etc/backup.cfg

Jail et Zfs

J'utilise Zfs pour définir les partitions de mes jails. N'ayant qu'une seule partition physique à ma disposition, je ne peux pas utiliser les fonctions mirror, raid, raidz ... Je ne compte que sur mes backup !

ks34581# umount /home
ks34581# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad4s1a             /               ufs             rw      1       1
#/dev/ad4s1b            /home           ufs             rw      2       2
/dev/ad4s1d             swap            swap            sw      0       0
proc                    /proc           procfs  rw              0       0

ks34581# zpool create zfs /dev/ad4s1b
ks34581# zfs create zfs/jail

J'active les jails. jail_list est volontairement vide afin de ne pas démarer automatiquement une jail tant qu'elle n'est pas validée (un reboot du serveur est si vite arrivé :)

ks34581# cat >>/etc/rc.conf
jail_enable="YES"
jail_list=""
jail_set_hostname_allow="NO"
# pour postgresql et symon
jail_sysvipc_allow="YES"
^D

Un script pour simplifier l'installation d'une jail:

ks34581# cat /root/bin/mk_jail.sh
 1  #!/bin/sh
 2  
 3  JROOT=zfs/jail
 4  FTP=ftp://ftp.fr.freebsd.org/pub/FreeBSD
 5  CFG=$HOME/tmp/sysinstall.cfg
 6  IFNAME=lo1
 7  
 8  NAME=$1
 9  SIZE=$2
10  HOSTNAME=$3
11  IP=$4
12  
13  zfs create -o quota=${SIZE}M $JROOT/$NAME
14  zfs create -o quota=512M $JROOT/$NAME/tmp
15  zfs create -o quota=512M $JROOT/$NAME/var
16  
17  cat <<EOF >$CFG
18  installRoot=/$JROOT/$NAME
19  _ftpPath=$FTP
20  mediaSetFTP
21  dists=base
22  distSetCustom
23  installCommit
24  EOF
25  
26  sysinstall configFile=$CFG loadConfig
27  
28  cat <<EOF >> /etc/rc.conf
29  jail_${NAME}_rootdir=/$JROOT/$NAME
30  jail_${NAME}_hostname=$HOSTNAME
31  jail_${NAME}_ip=$IP
32  jail_${NAME}_interface=$IFNAME
33  jail_${NAME}_devfs_enable="YES"
34  jail_${NAME}_devfs_ruleset="devfsrules_jail"
35  EOF
36  
37  echo "$IP $HOSTNAME" >> /etc/hosts
38  
39  cat <<EOF > /$JROOT/$NAME/etc/rc.conf
40  sshd_enable="YES"
41  sshd_flags="-o ListenAddress=$IP"
42  syslogd_flags="-ss"
43  sendmail_enable="NONE"
44  EOF
45  
46  cat <<EOF >> /$JROOT/$NAME/etc/hosts
47  $IP $HOSTNAME
48  213.251.173.2 backup
49  172.16.0.254 kimsufi.mondomaine.tld
50  EOF
51  
52  cat <<EOF > /$JROOT/$NAME/etc/resolv.conf
53  nameserver 172.16.0.254
54  EOF
55  
56  sed -I'.orig' -e 's/^DS/DS[172.16.0.254]/' /$JROOT/$NAME/etc/mail/submit.cf
57  
58  cp /etc/localtime /$JROOT/$NAME/etc

Et c'est parti:

ks34581# /root/bin/mk_jail.sh toto 4096 toto.mondomaine.tld 172.16.0.1

Je vérifie que tout se passe bien à coup de:

Tout est OK, je peux activer cette jail au démarrage du serveur:

ks34581# grep jail_list /etc/rc.conf
jail_list="toto"

Si toto.mondomaine.tld pointe bien vers l'adresse publique du serveur, il ne reste plus que la configuration de pf:

ks34581# cat /etc/pf.conf
[ snip ]

rdr pass on $ext_if proto tcp to port 65080 -> 172.16.0.1 port ssh
rdr pass on $ext_if proto tcp to port http -> 172.16.0.1 port http

pass quick on $ext_if inet proto tcp from any to 172.16.0.1 port ssh
pass quick on $ext_if inet proto tcp from any to 172.16.0.1 port http
[ snip ]

Ici la jail ayant pour ip 172.16.0.1 fait tourner un serveur web et son serveur ssh est accessible depuis ip.publique.du.kimsufi port 65080

A faire

2 commentaire(s)

Pages : 1