Mon combat pour installer un inux sur le Asus X205TA
Publié par The Troll le 04 10 2015

DISCLAIMER : SI VOUS N'ÊTES PAS À L'AISE AVEC DES INSTALLS UN PEU COMPLEXE, FAITE LE FAIRE

Pour la faire court, j'ai installé, plus ou moins avec bonheur, un Ubuntu sur cette.... machine. Jolie, y'a pas à dire et sous windows, elle tient assez longtemps (on dit 8 heures...). Mais cela implique d'avoir un UEFI en 32 bits ET un windows en 32 bits sur une machine 64 bits pour probablement économiser de la batterie. Moi péquin de base j'aurais fait pareil, mais de la part de asus/intel/microsoft, ca laisse rêveur de la compétence de ces gens là.

Oui vous pouvez vous moquer, car c'est un uBuntu et pas un Debian, mais la copine en question travaille avec, je ne vais pas lui imposer mes choix et je n'ai rien contre ubuntu. Comme dit mon plus jeune fils : uBuntu ce sont des copains, même si on ne mange pas à la même table.

Avant tout chose, il faut bien vérifier la partition de démarrage et cette du boot (ses numéros). On en aura bien besoin lors du redémarrage sur le vrai disque.

J'ai choisi de l'installer à coté de windows car uBuntu le permet sans se prendre la tête. Il sera toujours temps de supprimer la partie winwin et agrandir l'espace réserve à uBuntu le jour on a décidé de faire sans.

Comme ce n'est pas ma machine et que j'ai une obligation de donner une machine fonctionnelle, s'il y a quoi que ce soit de problématique, il restera toujours un winwin pour travailler.

En suivant la procédure d'installation à partir du live cd fournis, ubuntu a installé le système sur p6 et le swap sur P7. C'est la partie dont il faut se souvenir pour le lancement à la main et la finalisation

l'installation est particulièrement longue. Je ne sais pas trop pourquoi, on est sur du SSD, ca devrait filer mais bon.
J'avais vu qu'il y avait une device /dev/mmcblk0rpmb (souvenez vous de cette chose qui va vous pourrir la vie) qui était en time out, mais comme je suis partie de installation directe(l'autre plantait) je n'ai pas la main pour le supprimer. Je ne sais pas si c'est le coupable, mais comme j'ai du temps (façon de parler) je prend mon mal en patience.

C'est assez bien expliqué sur les liens suivant : J'ai utilise ce kernel là :

#!/bin/sh
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/\
linux-headers-4.0.0-040000-generic_4.0.0-040000.201504121935_amd64.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/\
linux-image-4.0.0-040000-generic_4.0.0-040000.201504121935_amd64.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.0-vivid/\
linux-headers-4.0.0-040000_4.0.0-040000.201504121935_all.deb
Mais vous pouvez en trouver un plus récent ici : En sachant qu'à l'époque, seulement les ubuntu 64 bits s'installaient sur des machines UEFI.

Ensuite je l'ai refait avec le kernel 4.1-rc2, car il manquait la prise en charge du wifi et de la carte SD

Certaines choses ne sont pas fonctionnelles, comme le son, certains 'fonctions', et surtout, surtout un PUT* de time out au démarrage d'environs 50 secondes sur le fameux device /dev/mmcblk0rpmb. Ce qui fait que cette bous.. machine démarre en 50 secondes au lieu de 2. C'est con pour du SSD.

Le soucis vient du fait que systemD le traite comme un périphérique bloc (un disque dur ou une carte SD) alors que c'est l'antémémoire du SSD (un truc dont l'accès n'est pas autorisé au système)

C'est une régression de systemd car cela eu fonctionné avec un version plus vieille, mais plus maintenant, au moment ou la machine fut installée. Pas la peine d'aller voir dans les règles de udev, elles sont bien là, mais elles ne trapent pas la chose, je ne sais pas pourquoi et je n'ai pas trouvé ailleurs sur le net un moyen de résoudre le soucis à l'époque des faits. Enfin si, il y a un vilain hack qui consiste à recompiler le noyau en lui faisant pas exposer ce périphérique, mais ce n'est pas pérenne, il faut le refaire à chaque mise à jour de noyau... ce qui est noyen.

En mode Race, les étapes :
  1. Faire un usb disk bootable avec l'iso ubuntu
  2. Copier le fichier bootia32.efi (le boot EFI)* dans le dossier /EFI/BOOT de la dite clé.
  3. désactiver le secure boot
  4. booter de l'usb
  5. Installer sur le disque
  6. Redémarrer sur la clé usb (F2)
  7. une fois sous grub, faites c pour avoir la ligne de commande(ui ui ca pique un peu)
  8. Une fois au prompt de grub (grub>) taper :
    • linux (hd1,gpt6)/boot/vmlinuz-xxx root=/dev/mmcblk0p2 reboot=pci,force
      - ui ui le 6 de la partition 6 lors de l'install (je vous avait dit de le noter )
      - normalement tab permet l'autocomplétion pour ne pas avoir à taper tout le chemin (d'ou mes xxx)
    • initrd (hd1,gpt6)/boot/initrd-xxxx
      - idem pour l'autocompletion par tab
    • boot
  9. TADAAAA.. boot sur le disque
  10. Et pour finir, la création du boot uefi (en root hein ! ou avec sudo)
    • apt-get install git bison libopts25 libselinux1-dev autogen m4 autoconf \
      help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev \
      libfreetype6-dev texinfo

      plus forcément en root
    • mkdir git
    • cd git
    • git clone git://git.savannah.gnu.org/grub.git
    • cd grub
    • ./autogen.sh
    • ./configure --with-platform=efi --target=i386 --program-prefix=""
    • make
    • cd grub-core
      maintenant ca va re-être en root (ou avec sudo)
    • grub-install -d . --efi-directory /boot/efi/ --target=i386
    • cp /boot/efi/EFI/grub/grubia32.efi /boot/efi/EFI/ubuntu/
    • update-grub2
  11. Et maintenant vous pouvez démarrer sans la clé, directement sur le disque
    - Et non je ne vous proposerais pas le mien de fichier, car je pense qu'un fichier qui est installé à vie sur une machine (pas un fichier transitoire comme celui pour l'install usb) doit être fournis par la distribution ou compilé soit même.
    - C'est pas parce que je suis paranoïaque que je n'ai pas raison de penser que les gens me veulent du mal.
* J'ai confiance dans ce fichier parce que c'est moi qui l'ai fait, mais si vous êtes parano, voici les instructions pour le faire :

apt-get install git bison libopts25 libselinux1-dev autogen m4 autoconf \
help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev \
libfreetype6-dev texinfo

# from http://www.gnu.org/software/grub/grub-download.html
git clone git://git.savannah.gnu.org/grub.git

cd grub

./autogen.sh

./configure --with-platform=efi --target=i386 --program-prefix=''

make

cd grub-core

../grub-mkimage -d . -o bootia32.efi -O i386-efi -p /boot/grub ntfs hfs \
appleldr boot cat efi_gop efi_uga elf fat hfsplus iso9660 linux keylayouts \
memdisk minicmd part_apple ext2 extcmd xfs xnu part_bsd part_gpt search \
search_fs_file chain btrfs loadbios loadenv lvm minix minix2 reiserfs memrw \
mmap msdospart scsi loopback normal configfile gzio all_video efi_gop efi_uga \
gfxterm gettext echo boot chain eval
Libre - Commentez
Présentation du matériel de base
Publié par The Troll le 13 02 2018

Il est temps de vous présenter le matériel que nous allons utiliser. Il y a d'autres modules et d'autres méthodes. Notre arbitrage fonctionnalités/prix nous a conduit à ces choix.

Les trois modules basiques fournis

Comme on peut le voir, Nous avons un arduino uno (ou plutôt un funduino) qui est un arduino italien, comme il est entièrement libre, il est fabriqué également sous d'autres marques. !Nous avons donc le arduino uno, une carte d'extension, permettant de bénéficier des connecteurs arduino sur une carte "vide", et une petite breadboard en plastique blanc. La breadboard est une petite carte permettant de faire des montages simples sans soudure.

On colle la breadboard sur la carte d'extension et on accouple la carte d'extension sur l'arduino uno. Nous obtenons alors la bête terminée.

la plateforme de travail montée

Il reste juste à présenter comment fonctionne une breadboard. Chaque demie-partie présente des continuités verticales. Comme le montre la photo ci-dessous, chacun des trous d'une même ligne sont reliés entre eux : le courant passe entre tous les trous de la même ligne.

le schéma de droite représente un petit circuit : Nous relions une résistance à la pin 9 de l'arduino avec un câble sans soudure (le câble et la résistance sont branchés sur la même ligne verticale). Puis nous relions la résistance à une led (les 2 sont sur la même ligne verticale. puis la led à un câble sans soudure (les 2 sont sur la même ligne verticale) qui est relié à la masse. Sur l'image les continuités entre les composants sont représentées par les lignes rouges.

Breadboard, comment ca marche ?
Prêts pour devenir le nouveau Turing :-)
Arduino - Électronique - Commentez
Premier pas avec un arduino : l'installation des outils
Publié par The Troll le 01 05 2015

Puisque nous sommes à nous raconter notre vie, j'ai commencé à tater un peu de l’électronique pour en faire avec mon gamin. Après des recherches un peu fastidieuses, j'ai opté pour un arduino, car il me semblait bien adapté pour ce que je voulais faire :

  • Facilement mis en œuvre
  • De l’électronique simple
  • De la programmation accessible
  • Tout plein de tutoriels sur le net

De plus, cerise sur le gâteau, ce que l'on apprends est directement utilisable autant en électronique qu'en programmation ( c'est du c). Dans ce premier billet, je vais aborder ce que nous avons fait pour mettre en place la plateforme pour que tout fonctionne.

Disclaimer : J'ai toujours cherché à avoir des outils qui fonctionnent en ligne de commande pour ne pas avoir besoin d'un machine dont la puissance sert uniquement à faire tourner un ide. J'ai l'impression également que cela te permet d'être plus proche de ce que tu fais en ayant besoin de plus de connaissance et que donc tu comprends un peu pus ce que tu fais.

Disclaimer 2 : mon système d'exploitation est debian linux, ainsi toute les étapes d'installation sont centrées sur cette plateforme.

Donc, première étape, installons les outils nécessaires pour l'arduino (ces manœuvres se font en étant Super Utilisateur - root) :

apt-get install arduino-core

Ce paquet va également installer le nécessaire de compilation et les outils pour obtenir un "fichier" binaire utilisable sur l'arduino. On peut également installer arduino (tout court) qui fournit un IDE qui à besoin de java pour fonctionner. arduino-core fournis tout un tas de fichier nécessaire à compiler pour l'arduino, des bibliothèques, des fichiers de définitions des différents modèles...

Pour parler avec l'arduino branché en usb, j'ai choisi ino, écrit en python, il s'installe facilement (si vous avez le paquet python-setuptools, qui fournit easy_install. Donc :


apt-get install python-setuptools

Une fois installé, il reste à installer ino

easy_install ino

ino à besoin de picocom pour parler avec la carte, et de make pour compiler c'est facilement fait :


apt-get install picocom
apt-get install make

Ensuite, il vous reste à brancher votre carte et vous la verrez apparaître sous le poétique nom de /dev/ttyACM0

crw-rw--- 1 root dialout 4, 67 mai    1 11:57 /dev/ttyACM0                                                                                                                     

Comme on peut le voir, vous en tant que simple utilisateur, vous n'avez pas le droit de faire quoi que ce soit avec lui, seul le propriétaire (root) et le groupe (dialout) ont le droit de lire et écrire (rw-) sur ce fichier (car sous linux tout est fichier). Ainsi il y a 2 moyens de contourner le problème :

  • Crée une règle udev pour que le périphérique vous appartienne
  • Vous faire appartenir au groupe dialout

J'ai choisi cette deuxième solution. Cela se fait facilement avec une simple commande (il faut être Super utilisateur (root)) :


usermod -a -G dialout votre_utilisateur

Votre utilisateur est le login que vous employez pour vous connecter, si vous ne le connaissez pas (auto-login par exemple), il est disponible avec la commande :


whoami

Une fois ajouté au groupe, il faut vous reconnecter et vous reconnecter pour que votre appartenance soit effective. Dernière manœuvre pour se faciliter la tache (car nous avons décider d'utiliser nano comme éditeur de code : installé d'office et très très light. D'autant plus que pour le moment le code que l'on fera sera tout simple et plutôt court. Les fichiers que produit ino se nomment xxx.ino. Comme nous désirons avoir la coloration syntaxique du C, je modifie le fichier de coloration syntaxique de nano pour le langage c qui se trouve à cette place /usr/share/nano/c.nanorc et modifie la première ligne pour qu'elle deviennent :


syntax "c" "\.(c(c|pp|xx)?|C|ino)$" "\.(h(h|pp|xx)?|H)$" "\.ii?$"

Vous êtes maintenant prêts pour la grande aventure.

Arduino - Électronique - 2 commentaire(s)
BOITE À OUTILS : Postfix et Dovecot
Publié par The Troll le 01 05 2015

Et bien, j'avais promis la chose, la voila... C'est le truc qui m'avait pris le plus de temps à comprendre et mettre en place. C'est le genre de truc pas aussi courant qu'un virtualhost apache et qui a besoin de pas mal de configuration pour fonctionner.

Comme à chaque fois, c'est un truc qui marche chez moi, mais je ne peux pas vous certifier qu'il marchera chez vous. De plus je vous conseille de lire l'introduction à tous mes billets "boite à outils pour gestion de serveur".

Donc passons aux choses sérieuses. j'utilise postfix et dovecot-pop3d de la manière qui me semble la plus simple, il y a des milliers d'autres manières de faire, peut être même plus intelligentes mais celle-ci me convient. TOUS les mails sont indépendants des utilisateurs du système.

1 - d'abord quelques réglages dans le fichier /etc/postfix/main.cf


virtual_mailbox_domains = /etc/postfix/domains
virtual_mailbox_base = /var/vmail/
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = virtual

Le reste du fichier n'est pas concerné par la configuration que nous faisons.

Comme vous le voyez, vous devez créer les fichiers /etc/postfix/domains /etc/postfix/vmailbox et /etc/postfix/virtual (ce sont des noms que j'ai choisis tout seul et qui sont utilisés dans le script_de_la_mort_qui_tue), vous pouvez tout à fait les changer. Pas besoin de les remplir, le script d'en chargera.

Pour résumer, le fichier domains contiendra les noms de domaines que votre serveur gère, le fichier virtual contiendra les mails redirigés et le fichier vmailbox contiendra les mails avec une boite pop dispo sur votre serveur.

Comme vous le voyez j'ai un utilisateur 5000, pour le créer :


groupadd -g 5000 vmail
useradd -s /usr/sbin/nologin -g vmail -u 5000 vmail -d /var/vmail -m

J'ai choisi de mettre les boites mails dans /var/vmail/ le script en tient compte, si vous voulez changer vous devez également le faire dans le script.

2 - Passons à dovecot.

J'ai décidé d'utiliser un seul fichier pour gérer les identifiants et mots de passe que l'on peut créer ou l'on veut, par exemple /etc/dovecot/fichier_user

On doit modifier /etc/dovecot/conf.d/10-master.conf, dans service auth {


# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
}

(on a ajouté le user et le group.)

puis on modifie : /etc/dovecot/conf.d/10-auth.conf


#!include auth-deny.conf.ext
#!include auth-master.conf.ext
#!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

(on désactive tous les protocoles et laisse auth-passwdfile.conf.ext)

ce qui amène à modifier le fichier : /etc/dovecot/conf.d/auth-passwdfile.conf.ext


passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/fichier_user
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/fichier_user
}

Comme vous le voyez, on retrouve ici le fichier que l'on a créé pour les utilisateurs : /etc/dovecot/fichier_user

Il reste ensuite à modifier le fichier /etc/dovecot/conf.d/10-mail.conf pour y ajouter la ligne suivante :


mail_location = maildir:/var/vmail/%d/%n/

Ici le chemin /var/vmail/ est le chemin choisi ET dans le fichier /etc/postfix/main.cf ET lors de la création de l'utilisateur virtuel vmail.

Normalement vous redémarrez postifx et dovecot et vous êtes près à commencer.

Maintenant le morceaux de choix : le fameux (fumeux?) script. Je l'ai appelé manage_mail. Comme pour le reste je le pose dans un dossier, le rend exécutable et ./manage_mail pour l'appeler.


#!/bin/sh

[ "$1" = "" ] && echo "$0 help pour de l aide" && exit

# conf postfix
virtual_alias_file=/etc/postfix/virtual
virtual_mailbox_file=/etc/postfix/vmailbox
virtual_domains=/etc/postfix/domains

# conf dovecot
dovecot_passwd="/usr/bin/doveadm pw"
dovecot_make_dir=/usr/bin/maildirmake.dovecot
directory_mail=/var/vmail
dovecot_id=5000
dovecot_users=/etc/dovecot/users

# conf sauvegarde
file_to_save="$virtual_alias_file $virtual_mailbox_file $virtual_domains $dovecot_users"
save_dir=/home/herve


action=$1
data=$2
la_date=`date +"%Y-%m-%d"`
its_done="     ....... fait"
already="     ...... existait déjà"

get_stats(){
        echo "#####################"
        [ "$data" != "" ] && echo "# Recherche sur $data" || echo "# liste générale"
        echo "#####################\n"

        echo "## domaines gérés  ##############"
        [ "$data" != "" ] && grep $data $virtual_domains || cat $virtual_domains |tr "\n" " "
        echo $domains

        echo "## adresses box ##############"
        [ "$data" != "" ] && grep $data $virtual_mailbox_file | cut -f1-2 --output-delimiter " ->[*]" || cut $virtual_mailbox_file -f1-2 --output-delimiter " ->[*]"
        echo "\n"

        echo "## adresses alias ##############"
        [ "$data" != "" ] && grep $data $virtual_alias_file | cut -f1-2 --output-delimiter " -> " || cut $virtual_alias_file -f1-2 --output-delimiter " -> "
        echo "\n"
}

re_start_all(){
        echo -n "Redemarrage du service"
        postmap $virtual_alias_file
        postmap $virtual_mailbox_file
        postfix reload
        /etc/init.d/postfix restart
        echo "$its_done"

}

add_domains(){
        if (grep -q $data $virtual_domains )
        then
                echo "domaine $data déja présent"
        else
                echo "$data" >> $virtual_domains
                echo "#$data" >> $virtual_alias_file
                echo "#$data" >> $virtual_mailbox_file
                echo "#$data" >> $dovecot_users
                echo "Domaine $data ajouté."
        fi
}

del_domains(){
        [ "$data" != "" ] && sed -i '/'"$data"'/d' $virtual_domains && echo "Domain $data effacé"
        read -p "Effacer toutes les adresses mails afférentes ? [o/n]" del_mails
        if [ $del_mails = "o" ]
        then
                sed -i '/'"$data"'/d' $virtual_alias_file
                sed -i '/'"$data"'/d' $virtual_mailbox_file
                sed -i '/'"$data"'/d' $dovecot_users
                rm -rf $directory_mail/$data/
                echo "$its_done"
        fi
}


add_aliass(){
        if (grep -q $data $virtual_alias_file )
        then
                echo "Alias $data déja présent"
        else
                sed -i 's/#'"$domain"'/#'"$domain"'\n'"$data"'  '"$redir"'/' $virtual_alias_file
                echo "Alias $data -> $redir  ajouté."
        fi
}

del_aliass(){
        sed -i '/'"$data"'/d' $virtual_alias_file
        echo "$its_done"

}

del_boxes(){
        read -p "Effacer l'adresse $data  [o/n]? " del_box

        if [ $del_box = "o" ]
        then
                sed -i '/'"$data"'/d' $virtual_mailbox_file
                sed -i '/'"$data"'/d' $dovecot_users
                rm -rf $directory_mail/$domain/$user
                echo "$its_done"
        fi
}

add_boxes(){
        echo "Ajout de la boite mail  $data..."
        read -p "Mot de passe pour l'utilisateur:  " the_pass
        the_passwd=`$dovecot_passwd -p $the_pass`

        if (grep  -q $data $dovecot_users)
        then
                sed -i '/'"$data"'/d' $dovecot_users
        fi

        echo -n "Ajout de l utilisateur  $user@$domain au fichier $dovecot_users"
        sed -i 's|#'$domain'|#'$domain'\n'$data':'$the_passwd':5000:5000::'$directory_mail'\/'$domain'\/'$user'\/:\/bin\/false::|' $dovecot_users && echo "$its_done"

        echo -n "Creation du répertoire $directory_mail/$domain/$user"

        if [ ! -d $directory_mail/$domain ]
        then
                mkdir $directory_mail/$domain
                chown $dovecot_id:$dovecot_id $directory_mail/$domain
                chmod 700 $directory_mail/$domain
                echo "$its_done"
        else
                echo "$already"
        fi

        $dovecot_make_dir $directory_mail/$domain/$user $dovecot_id:$dovecot_id
        for i in Drafts Sent Junk Trash
          do
          $dovecot_make_dir $directory_mail/$domain/$user/.$i $dovecot_id:$dovecot_id
        done

        echo -n "Ajout de l utilisateur au fichier $virtual_mailbox_file"

        if (grep  -q $data $virtual_mailbox_file)
        then
                echo "$already";
        else
                sed -i 's/#'"$domain"'/#'"$domain"'\n'"$data"'  '"$domain\/$user\/"'/' $virtual_mailbox_file
                echo "$its_done";
        fi

        #################### pour garder les informations dans un fichier ##################################
        echo "======================"
        echo "$user@$domain -> $the_pass"
        echo "======================"
        ####################################################################################################

}

save_conf(){
        for i in $file_to_save
        do
        cp $i $save_dir/"$la_date"_"$i".bak
        done
        echo "$its_done"

}
case $action in
        stats)
                get_stats;;

        add_domain)
                add_domains;;

        del_domain)
                del_domains;;

        add_alias)
                user=`echo "$data" | cut -f1 -d "@"`
                domain=`echo "$data" | cut -s -f2 -d "@"`
                if !(grep  -q $domain $virtual_domains);then echo "le domaine $domain n est pas géré, il faut le créer avant"; exit;fi
                [ "$3" = "" ] && echo "il manque l adresse de redirection. add_alias user@domain.tld redir@domain.tld" && exit
                redir=$3
                [ "$data" != "" ] && add_aliass;;


        del_alias)
                [ "$data" != "" ] && del_aliass;;

        add_box)
                user=`echo "$data" | cut -f1 -d "@"`
                domain=`echo "$data" | cut -s -f2 -d "@"`
                if !(grep  -q $domain $virtual_domains);then echo "le domaine $domain n est pas géré, il faut le créer avant"; exit;fi
                [ "$data" = "" ] && echo "il manque l adresse à créer. add_box user@domain.tld" && exit
                add_boxes;;

        del_box)
                [ "$data" = "" ] && echo "il manque l adresse à supprimer. del_box user@domain.tld" && exit
                user=`echo "$data" | cut -f1 -d "@"`
                domain=`echo "$data" | cut -s -f2 -d "@"`
                del_boxes;;

        restart)
                re_start_all;;

        save)
                save_conf;;

        help)
                echo "###############################"
                echo "Usage $0 action data"
                echo "----------------"
                echo " action:  stats -> listes de tout ( stats | stats motif_de_recherche) "
                echo "          add_domain -> ajoute un domaine à gerer (add_domain domain.ltd)"
                echo "          del_domain -> supprime un domaine à gerer (del_domain domain.ltd)"
                echo "          add_alias -> ajoute une adresse redirigée (add_alias from_mail@domain.tld to_mail@anotherdomain.tld)"
                echo "          del_alias -> supprime une adresse redirigée (del_alias from_mail@domain.tld )"
                echo "          add_box -> ajoute une adresse pop (add_box mail@domain.tld )"
                echo "          del_box -> supprime une adresse pop (del_box mail@domain.tld )"
                echo "          restart -> redemmare le serveur et remet à jour les hash des fichiers (restart)"
                echo "          save -> sauvegarde les fichiers de config en .bak (save)"

esac

comment il marche : l'aide dit :

Usage ./manage_mail action data
----------------
action:
stats -> listes de tout ( stats ou stats motif-de-recherche)
add_domain -> ajoute un domaine à gerer (add_domain domain.ltd)
del_domain -> supprime un domaine à gerer (del_domain domain.ltd)
add_alias -> ajoute une adresse redirigée (add_alias from_mail@domain.tld to_mail@anotherdomain.tld)
del_alias -> supprime une adresse redirigée (del_alias from_mail@domain.tld )
add_box -> ajoute une adresse pop (add_box mail@domain.tld )
del_box -> supprime une adresse pop (del_box mail@domain.tld )
restart -> redemmare le serveur et remet à jour les hash des fichiers (restart)
save -> sauvegarde les fichiers de config en .bak (save)

L'aide est assez claire.

il y a juste à configurer les variables en début de fichier


# conf postfix
virtual_alias_file=/etc/postfix/virtual (fichier défini dans /etc/postfix/main.cf)
virtual_mailbox_file=/etc/postfix/vmailbox (fichier défini dans /etc/postfix/main.cf)
virtual_domains=/etc/postfix/domains (fichier défini dans /etc/postfix/main.cf)

# conf dovecot
dovecot_passwd="/usr/bin/doveadm pw" (normalement inchangé dans debian 7)
dovecot_make_dir=/usr/bin/maildirmake.dovecot (normalement inchangé dans debian 7)
directory_mail=/var/vmail (fichier défini dans /etc/postfix/main.cf, /etc/dovecot/conf.d/10-mail.conf et home de l'utilisateur vmail )
dovecot_id=5000 (id de l'utilisateur vmail)
dovecot_users=/etc/dovecot/fichier_user (fichier défini dans /etc/dovecot/conf.d/auth-passwdfile.conf.ext)

# conf sauvegarde
file_to_save="$virtual_alias_file $virtual_mailbox_file $virtual_domains $dovecot_users"
save_dir=/rertoire/ou/vous/sauvegarder (doit exister)

le fichier /etc/dovecot/fichier_user sera sous la forme :


user@domaine.ltd:{CRAM-MD5}mot_de_passe_hash_md5:5000:5000::/var/vmail/domaine.ltd/user/:/bin/false::

Vous pouvez tout à fait faire vos test avant de le mettre en production, en donnant des fichiers "factices" (que vous avez créés dans votre home) ainsi qu'un sous répertoire de test (pour les mails) dans votre home.

Normalement cela fonctionne, il ne reste qu'à faite un test :


./manage_mail add_domain domaine_que_vous_gerez.com
./manage_mail add_box mon_user@domain_que_vous_gerez.com (vous donnez le mot de passe et il fait tout le travail).
./manage_mail restart (pour que tout soit pris en compte)

Enfin plus qu'à tester en ligne de commande :


mail user@domain_que_vous_gerez.com

vous renseignez le sujet, puis tappez le corps du message, vous terminez par une ligne avec juste un . (puis entrer) et vous devez voir passez dans vos logs

Nov 22 09:48:27 votre_server postfix/qmgr[6034]: 87F9A564670B: from=, size=292, nrcpt=1 (queue active)
Nov 22 09:48:28 votre_server postfix/virtual[8508]: 87F9A564670B: to=, relay=virtual, delay=0.77, 
    delays=0.49/0.09/0/0.19, dsn=2.0.0, status=sent (delivered to maildir)
Nov 22 09:48:28 votre_server postfix/qmgr[6034]: 87F9A564670B: removed

pffff. bon voila qui est fait, comme promis. Et le mot de la fin n]'oubliez pas de mettre à jour redémarrer votre serveur sinon cela n'est pas pris en compte.


./manage_mail restart

Serveurs - 1 commentaire(s)
BOITE À OUTILS BIND
Publié par The Troll le 26 04 2015

Puisqu'avoir un serveur virtuel ça ne sert pas à grand chose si on ne peut pas le visiter, il faut y associer une résolution de noms pour que les femelles en chaleur puisse le trouver (Oui c'est sexiste, mais à mon crédit, lorsque les femelles en chaleur peuvent le trouver, les mâles en rut également.) Ok, çà n'améliore pas mon coté sexiste, j'irais me fouetter avec des orties fraîches.

Donc je disais : la résolution des noms avec bind. La encore, même technique que pour apache, un fichier de zone modèle, un script qui le remplit à la demande. Vous DEVEZ remplir les fichiers modèle et script avec VOS bonnes informations, sinon ça marchera pas.

================ zone_modele==============
    
$ttl 38400
DOMAIN.        IN    SOA    SERVER.    user.mail.com.    (
            NUMERO
            28800
            14400
            1209600
            38400    )
DOMAIN.        IN    NS    SERVER.
DOMAIN.        IN    NS    DNSSLAVE.
        IN    MX    10 Mail
mail        IN    A    IP
DOMAIN.        IN    TXT    "v=spf1 mx a ip4:IP/32 ~all"
DOMAIN.        IN    A    IP
www.DOMAIN.    IN    A    IP

Dans ce fichier, il faut juste personnaliser en mettant votre adresse mail. il est sous la forme username@domain.com. en remplaçant le @ par un point. SI dans votre username il y a aussi un point, il s'échappe avec un \ exemple : prenom\.nom.domain.com. Remarquez bien le point final, il est important.

Ensuite un fichier pour faire le travail

=============== do_dns===============

#!/bin/sh
echo "vérifier les infos de base : serveur dns secondaire et nom de machine"

LIP=88.888.77.877
SERVER=domain.com
DNSSLAVE=ns-slave.server.tld
STAMP=`date "+%Y%m%d01"`
DEST="/etc/bind/zones/"

sed -e 's/IP/'$LIP'/g' zone_modele > $1.hosts
sed -i -e 's/DNSSLAVE/'$DNSSLAVE'/g'  $1.hosts
sed -i -e 's/SERVER/'$SERVER'/g'  $1.hosts
sed -i -e 's/NUMERO/'$STAMP'/g'  $1.hosts
sed -i -e 's/DOMAIN/'$1'/g'  $1.hosts
echo "======================="
more  $1.hosts
echo "======================="
read -p "Config ok [o/n]]?" reponse

if [ $reponse = "o" ]; then

mv $1.hosts $DEST$1.hosts && echo "fichier copié $DEST$1.hosts"
echo "verif fichier ======================="
named-checkzone $1 $DEST$1.hosts
echo "======================="

echo "modifier aussi le fichier named.conf.local et y ajouter :"
echo "======================="
echo 'zone "'$1'" {'
echo "        type master;"
echo '        file "'$DEST$1.hosts'";'
echo "        };"
echo "======================="
named-checkconf
read -p "redemarrer le serveur ? [o/n]]?" reponse

if [ $reponse = "o" ]; then
rdnc reload
service bind9 restart
fi
fi

Il faut absolument personnaliser les lignes suivantes :
LIP=L'adresse IP de votre serveur
SERVER=Le nom de domaine de votre serveur (donc qui fait dns primaire)
DNSSLAVE=le nom de votre serveur dns secondaire *
DEST="/etc/bind/zones/" -je mets mes fichiers zone à cet endroit (il faut créer le répertoire)

* ne pas oublier que le serveur secondaire doit avoir le droit de transférer les infos : on l'ajoute donc dans le fichier named.conf.options dans allow-transfert, allow-recursion et allow-query-cache

Donc comme pour apache, les 2 fichiers dans un répertoire, exécutable pour do_dns et on l'appelle simplement


./do_dns mondomaine.tld

il crée le fichier mondomaine.tld.hosts que vous pouvez éditer dans un autre shell, pour vérifier. En cliquant sur o à la réponse "config ok ?", il le copie à la bonne place, vous propose les informations à copier dans le fichier named.conf.local (vous devez le faire, un copier-coller marche très bien) , un truc du style :


zone "toto.com" {
                type master;
                file "/etc/bind/zones/toto.com.hosts";
                };

Oui, je sais, je pourrais l'ajouter directement avec un echo >>, mais je ne l'ai pas encore fait.. un jour je le mettrais à jour.

Redémarre le serveur bind.

YAPU qu'a attendre le car de femelles en chaleurs\w\w\w\w mâle en rut

Serveurs - Commentez