Upgrade FreeBSD 8.0 et jails

date
6 / 1 / 2010
comments
4

J'ai upgradé ma FreeBSD (ce serveur) et ses 4 jails de FreeBSD 7.2-RELEASE vers FreeBSD 8.0-RELEASE, voilà donc le récit de ce qui est toujours une épopée.

Dans un premier temps il faut récupérer les sources du système. J'ai fait ça à coup de csup depuis cvsup1.fr.FreeBSD.org (qui n'est autre que cvsup.free.org).

# cat /usr/local/etc/stable-supfile
*default host=cvsup1.fr.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_0
*default delete use-rel-suffix
*default compress
src-all
# csup /usr/local/etc/stable-supfile

Pendant ce temps au lieu de te tourner les pouces fais toi un /etc/src.conf(5) pour customiser un peu ce qu'on va compiler dans le world. Moi je n'utilise plus sendmail, authpf, bind (j'ai déjà un bind sur mon routeur), bluetooth, les jeux, IPfilter (j'utilise pf) ni zfs.

# cat /etc/src.conf
WITHOUT_AUTHPF=YES
WITHOUT_BIND=YES
WITHOUT_BLUETOOTH=YES
WITHOUT_GAMES=YES
WITHOUT_IPFILTER=YES
WITHOUT_SENDMAIL=YES
WITHOUT_ZFS=YES

Quand csup à finit son boulot on peut lancer la compilation qui tue :

# cd /usr/src
# make buildworld

Bois une grosse tasse de café et attend sagement en lisant config(8) et $EDITOR ta config kernel dans /usr/src/sys/<arch>/conf/LAPIN, sinon le kernel GENERIC marche bien hein :-).

Une fois le buildworld terminé lance la compilation de ton kernel :

# cd /usr/src/
# make buildkernel KERNCONF=LAPIN

Pendant ce temps mettons à jours les jails. Moi j'arrête complètement les jails, je préfère un service injoignable qu'un service qui pourrait planter. Pour que le mergemaster(1) soit moins long j'ai mis quelques options dans /root/.mergemasterrc.

# cat /root/.mergemasterrc
FREEBSD_ID=yes
# /etc/rc.d/jail stop
# cd /usr/src
# make installworld DESTDIR=/path/to/jail
# mergemaster -i -C -D /path/to/jail

Réponds aux questions de mergemaster, c'est long mais nécessaire, si ça te parait trop long rajoutes -U aux options de mergemaster.

Refait la manip pour toutes tes jails. Enfin installe le nouveau kernel et reboot en Single user mode.

# cd /usr/src
# make installkernel KERNCONF=LAPIN
# shutdown -r now
## MAINTENANT EN SINGLE USER MODE ##
# adjkerntz -i
# mount -a -t ufs
# mergemaster -p
# cd /usr/src/
# make installworld
# mergemaster -i -C
# reboot

Nous voilà en FreeBSD 8.0-RELEASE-p1, maintenant il faut réinstaller tous les ports pour que les softs soient liés avec les libs de la 8.0. Alors là plusieurs méthodes possibles.

  • Par compilation => portupgrade -a (va faire un tour sur google.com pour plus d'info sur les options crousti de portupgrade).
  • En binaire, c'est ce que j'ai fait via un hack plus crade qu'un porno thaïlandais mais qui marche.

Attention lapin ! , ce script va t'installer des packages avec les options de compilation par défaut des ports. Ça va enlever ton support PGSQL de dovecot et te rajouter toute la libx11 :-), à manipuler avec précaution donc.

Mon petit script magique pkg_reinstall:

#!/bin/sh
# Force la réinstallation des
# packages pour la nouvelle release
# http://blog.philpep.org/post/Upgrade-FreeBSD-8.0-et-jails
# Je ne suis pas responsable de la casse éventuelle :-)

# Mirroir pour choper les packages voyez pkg_add(1)
# section ENVIRONEMENT.
export PACKAGEROOT="ftp://ftp.fr.freebsd.org"

# Liste des packages sur la machine
PKG_LIST=`pkg_info | cut -d' ' -f1`

for pkg in $PKG_LIST
do
    # On coupe la version du package
    # et on force la réinstallation
    pkg_add -rvF "${pkg%-*}"
done

Je lance donc mon script dans un shell de la jail (dont le JID m'est donné par jls(1)) :

# jexec 1 sh
# sh /root/pkg_reinstall

Ensuite tu peux normalement supprimer les anciennes libs et anciens fichiers de ta vielle FreeBSD :

# cd /usr/src
# yes | make delete-old DESTDIR=/path/to/jail
# yes | make delete-old-libs DESTDIR=/path/to/jail

Tu peux faire pareil pour l'hote maintenant, un coup de pkg_reinstall et yes | make delete-old(|-libs) et te voilà en 8.0 avec un système super clean.

Bonus spécial pour toi lapin !

Personnellement j'aime bien rester avec mes packages de RELEASE, donc je met pratiquement jamais à jours. Par contre l'idée d'avoir des packages avec des failles de sécurité ça m'insupporte. Donc j'utilise le grand portaudit et si il trouve un package foireux je l'upgrade vers les build de STABLE (qui sont plus récents).

# export PACKAGEROOT="ftp://ftp.fr.freebsd.org"
# pkg_add -r portaudit
# /usr/local/sbin/portautit -Fda
Problem found with phplol see http://machintruc.com/64867/php/6764

Et pour tous les packages faillibles :

# export PACKAGESITE="ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/"
# pkg_add -rF phplol

Te voilà avec un système très nice nice qui te laissera dormir jusqu'au prochain local root voir même jusqu'à la prochaine release.

Ssmtp pour remplacer sendmail

Sur mon serveur FreeBSD j'ai 4 jails et par défaut le système envoie régulièrement des security run output à root@localhost pour l'informer de ce qu'il se passe sur le système (nouveau fichiers etc). Tout ça c'est très bien sauf que un hote et 4 jails ça fait 5 compte mail à visiter, c'est pas trop convi et en plus on a pas envie de faire tourner sendmail juste pour ça.

J'ai donc décidé d'utiliser un MTA très simple appelé (devinez comment) : Simple smtp agent. Chaque mail envoyé depuis la machine (en appelant sendmail) partira vers un serveur smtp de mon choix, ainsi je récupère tous les mails sur mon compte mail usuel.

# cd /usr/ports/mail/ssmtp
# make install
Information for ssmtp-2.62.3:
Install notice:
sSMTP has been installed successfully.
To replace sendmail with ssmtp type "make replace"
# make replace

Ensuite j'ai crée mon /usr/local/etc/ssmtp/ssmtp.conf :

# Serveur de mail à contacter pour l'envoi + le port
# par defaut c'est le port 25
mailhub=mail.philpep.org:578
# Domaine d'où semble venir le mail
rewriteDomain=philpep.org
# Domaine à donner pendant le HELO
# À accorder avec le reverse DNS de votre machine
# vu depuis le serveur de mail.
hostname=shen.philpep.org

Arrangez vous pour que le serveur de mail accepte de vous relayer, moi c'est le cas parce que je suis en local et mon postfix relaie ce qui vient du réseau local. Mais si ce n'est pas le cas (genre vous utilisez le serveur mail de votre fournisseur de mail), on peut configurer l'authentification SMTP, SSL/TLS et tout le reste.

Ensuite désactivez sendmail dans /etc/rc.conf puisqu'il ne sert plus :

sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Pour tester l'envoi :

$ dmesg | mail -s "works ?" lapin@barreenfer.com
$ if [[ $? -ne 0 ]]; then man ssmtp; fi

EDIT 5/01/10 17:15

  • client smtp -> MTA

Upgrader ses packages FreeBSD

date
28 / 12 / 2009
comments
0

J'ai un problème depuis longtemps avec les ports FreeBSD. Dans un premier temps je compilais tout, puis à la longue c'est assez lassant parce que ça prend du temps, des ressources et sur une machine peu puissante c'est pas franchement conseillé. Donc dans la plupart des cas j'utilise maintenant des paquet binaires compilés et distribués par le projet FreeBSD.

Je ne vais pas m'attarder à peser le pour et le contre puisqu'en réalité j'utilise aussi bien les ports que les paquets binaires suivant les dépendances du logiciel et le temps de compilation.

Environnement : FreeBSD 8.0-RELEASE i386 (à vous de changer suivant votre version et votre CPU)

Déjà une bonne chose à savoir :

$ ftp ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/
....
250-descriptions of each subdirectory.
...
250-packages-*-release directories are built from the ports collection
250-shipped with the release, and are not updated thereafter.
250-
250-packages-*-stable and packages-*-current are updated roughly once a
250-week.
....

Les paquets qui nous intéressent sont donc dans packages-8-stable.

Pour installer un soft, il suffit d'un

# export PACKAGESITE="ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/"
# pkg_add -r firefox3

Pour mettre à jours c'est nettement moins marrant, surtout si vous utilisez conjointement un arbre des ports à jours dans /usr/ports. Les outils comme portmaster et portupgrade sont assez dur à utiliser pour mettre à jours en se basant non pas sur l'INDEX de /usr/ports mais sur celui du ftp.

D'ailleurs si quelqu'un à déjà réussi à faire proprement la manip je veux bien son /usr/local/etc/pkgtools.conf en commentaire de ce billet.

bapt est en train de porter pkgin sur FreeBSD, mais il n'est pas encore tout à fait prêt (il le sera bientôt j'espère, je ferrai un billet pour l'occasion).

Il y a une solution que j'ai trouvé sympatique en attendant pkgin, c'est les bsdadminscripts avec l'outil pkg_upgrade. C'est du shell, pas très rapide donc, mais au moins ça marche et c'est facile.

# make -C /usr/ports/sysutils/bsdadminscripts install clean

Ensuite c'est enfantin, pour tout mettre à jours et en mode verbeux :

# setenv PACKAGEROOT ftp://ftp.fr.freebsd.org
# setenv BRANCH 8-stable
# pkg_upgrade -av

Et ça marche ! Il se base sur le md5 du fichier INDEX du ftp pour savoir s'il faut mettre à jours sa base de donnée sur les ports puis compare les version installés avec les versions disponibles.

La page de man de pkg_upgrade vous donnera beaucoup d'information sur la manière dont il fonctionne.

Pblog une release qui s'annonce

date
21 / 12 / 2009
comments
0

Comme vous savez, j'utilise maintenant un blog que j'ai codé avec mes petites mains et avec celles de Bender.

Ce blog était assez pauvre et buggé, jusqu'il y a quelques jours où nous avons décidés de faire une release sans trop de bugs et avec un peu plus de fonctionnalité. Ce blog tourne toujours tout en python, avec webpy, makotemplates, markdown, pygments, et une base de donnée SQL.

Voilà rapidement ce qui à changé :

  • MySQL était la seule DB utilisable, maintenant pblog tourne aussi avec sqlite3 (pour Postgresql les patchs seront grandement appréciés)

  • Nuage de tags (a votre droite)

  • Archives (aussi à votre droite)
  • liens (toujours et encore à votre droite)
  • Les <title> de pages sont plus explicites
  • les commentaires gèrent les erreurs
  • captcha (merci à rhaamo)
  • Le design (entièrement géré par Bender) est super classe, il évolue en fonction de pblog.
  • Une barre de recherche (en haut à droite)
  • Des pages quand il y a trop de résultats

links

  • Liens vers billet suivant et précédent

precsuiv

  • Niveau édition (post et commentaires), on peut maintenant faire des aperçus, c'est en javascript + XMLHttpRequest. Mais je vous rassure, le site est toujours testé sans javascript pour éviter qu'une fonction 'vitale' ne soit plus possible sans javascript. D'une manière générale on utilise javascript uniquement quand ça semble plus pertinent au niveau du code.

preview

Le code est pour l'instant en 1.0-rc3, on a fait en sorte que les images soient libre de droit, donc c'est tout libre (faut qu'on mette rapidement une licence d'ailleurs, mais ce sera sans doute une BSD).

Bref, ça sent la release pour bientôt, donc si vous avez un peu de temps trouvez des bugs (si si c'est facile je vous assure), envoyez vos patchs, demandes de features, "ce serait pas mieux si ...." etc.

Il n'y a pas assez de doc (seulement un petit README et des commentaires dans le fichier de conf), mais ça tourne sur du lighttpd/nginx/apache assez facilement.

Pour ceux qui chercheraient un blog super léger tout en C et surtout sans base de données je ne saurais trop vous conseiller Cblog.

Faire sauter les pubs de Canal Plus

date
17 / 12 / 2009
comments
2

Si vous êtes adeptes du zapping / petit journal actu de Canal Plus et que vous n'avez pas la TV et que les scripts shell qui chopent directement les vidéos ne marchent plus au bout d'une semaine, il vous faut alors aller sur leur beau site tout en flash et manger la pub d'une minute avant chaque vidéo.

Sauf que, en fouillant dans le code source des pages on trouve assez facilement d'où viennent les vidéos de pubs, ils suffit alors de bloquer le domaine en question qui est smartadserver.com. Les videos de canal plus sont dans www3.smartadserver.com/call/pubi/ , mais libre à vous de bloquer completement smartadserver.com.

Donc mettez la bonne ligne qu'il faut dans votre Adblockplus / proxy. Moi j'ai un privoxy transparent qui filtre tout le réseau local et la syntaxe est la suivante (dans la conf, le fichier user.action)

{ +block{Nasty ads.} }
www3.smartadserver.com/call/pubi*

Un jours je trouverais un moyen simple (module firefox ?) pour mettre à jours les règles privoxy plus facilement, et je partagerais ma config promis :-).