# [script] portage-sync, lastlog, GSLA & co

## anigel

Bonjour,

Pas mal de récriminations au sujet de Gentoo portent sur le fait que les mises à jour du système sont incessantes (oui, c'est vrai), et qu'il faut passer son temps à recompiler son système (non, c'est faux). Alors je me suis attelé à la tâche de créer un petit script qui prévient l'utilisateur lorsqu'il faut mettre à jour, entre autres...

1. Configurer le mailer.

NB : si vous avez déjà un mailer fonctionnel sur votre machine, inutile de suivre cette étape.

portage-sync.sh, le script en question, est lancé tous les jours (idéalement), et le résultat des commandes est envoyé par mail à une adresse de votre choix, via ssmtp (issu du projet Debian, merci à la communauté). ssmtp est une sorte de sendmail, en version ultra-light. Vous pouvez trouver un HOWTO détaillé sur ce même forum (en anglais). Pour nos besoins, il n'est pas vraiment nécessaire de faire une configuration de-la-mort.

```
emerge ssmtp
```

Puis, dans le fichier /etc/ssmtp/ssmtp.conf, renseignez les 2 champs suivants (en remplaçant par vos propres paramètres, évidemment) :

```
root=anigel@mon_fai.com

mailhub=serveur_smtp_de.mon_fai.com
```

Pour la cosmétique, on peut aussi renseigner la directive suivante :

```
rewriteDomain=votre_choix.com
```

Remplacez votre_choix.com par le nom qui vous plaira, et les mails que vous recevrez sembleront venir de root@votre_choix.com

Enfin, un petit test s'impose :

```
cat /etc/ssmtp/ssmtp.conf | mail -s "test ssmtp" anigel@mon_fai.com
```

Quelques secondes plus tard, vous devriez avoir dans votre boite aux lettres le fichier de configuration de ssmtp, que vous venez de configurer avec succès  :Wink:  ! Passons à la suite.

2. Le démon cron

Avant de mettre en place le script proprement dit, vérifiez que vous avez bien un démon cron qui fonctionne. Il s'agit d'un programme chargé d'exécuter des commandes à intervalle régulier. Personnellement, pour mon usage domestique, j'utilise sys-process/dcron. Vous trouverez plus de renseignements sur l'installation et l'utilisation de cron dans la doc gentoo (version française ici).

3. Mettre le script en place

```
mkdir /root/bin

wget http://www.neskaya.free.fr/files/gentoo/scripts/portage-sync.sh -O /root/bin/portage-sync.sh

chmod 700 /root/bin/portage-sync.sh
```

Vous pouvez jeter un oeil au contenu du script, afin de commenter / décommenter certains "modules" (des blocs de commande, en fait), ou de changer les options des commandes lancées (voir la série de *_CMD en début de fichier).

Un petit test s'impose, pour s'assurer que tout fonctionne bien chez vous :

```
/root/bin/portage-sync.sh
```

Enfin, en root, mettez ce script dans votre crontab, afin qu'il s'exécute tout seul comme un grand :

```
crontab -e
```

Ajoutez en fin de fichier la ligne suivante, qui lancera le script tous les jours, à 06:53 précises :

```
53 6 * * * /root/bin/portage-sync.sh
```

Et voilà, vous disposez maintenant d'un outil qui vous donnera, au jour le jour, la liste des updates disponibles pour votre système, avec, surtout, une liste séparée, et cliquable, pour les failles de sécurité affectant votre système. C'est tout simple, sans prétentions, mais ça facilite la vie de votre serviteur depuis quelques mois déjà  :Wink:  !

PS : Comme d'hab, n'hésitez pas à corriger / commenter, et même à ajouter vos petit "modules" au script. Merci dans ce dernier cas de préciser si vous m'autorisez à les ajouter au script "de base" ou non.

----------

## Mickael

Merci Anigel pour ton boulot. Je le testerai dans les jours à venir, et regarder comment y intégrer le update de eix, en remplaçant SYNC_CMD="emerge --sync --quiet" par SYNC_CMD="eix-sync et les options qui vont bien" sans oublier de remplacer les variables emerge sync dans le reste du script  :Idea:  . Oui je sais cela fait pense bête au milieu d'un post, et alors??

Encore merci.

Je crois qu'il n'y que cela à changer dans les boucles :

 *Quote:*   

> 
> 
> # emerge --sync module ---> update-eix non c'est eix-sync!!
> 
> separator "Portage tree synchronization"
> ...

 

EDIT : tu rajoutes ce que tu veux au script ani, sauf ce qui est faux.

----------

## anigel

 *MickTux wrote:*   

> echo "A problem occurred when trying to sync portage tree. Aborting. C'est balo"

 

 :Laughing: 

----------

## PabOu

yop :)

j'ai deux petits soucis :

1) 

```
root@framboise ~ # cat /etc/ssmtp/ssmtp.conf | mail -s "test ssmtp" pabou@swing.be

bash: mail: command not found
```

Pourrais-t-on me faire un qfile mail ? siouplait ?

2) j'aimerais envoyer ces emails sur le serveur smtp de mon FAI qui n'accepte que les connexions avec un user/pass.

J'ai trouvé les lignes suivantes à mettre dans le fichier .conf, est-ce que c'est ce qu'il me faut ? *Quote:*   

> # auth user must be your remote email username
> 
> AuthUser=<username>
> 
> # AuthPass must be your remote email password
> ...

 

----------

## PabOu

 *PabOu wrote:*   

> 
> 
> ```
> root@framboise ~ # cat /etc/ssmtp/ssmtp.conf | mail -s "test ssmtp" pabou@swing.be
> 
> ...

 Apparement, il faudrait le use flag "mailwrapper" au paquet ssmtp pour construire le binaire "mail". À vérifier.

 *PabOu wrote:*   

> 2) j'aimerais envoyer ces emails sur le serveur smtp de mon FAI qui n'accepte que les connexions avec un user/pass.
> 
> J'ai trouvé les lignes suivantes à mettre dans le fichier .conf, est-ce que c'est ce qu'il me faut ? *Quote:*   # auth user must be your remote email username
> 
> AuthUser=<username>
> ...

 On dirait que ces lignes sont parfaites. Ne pas oublier un chmod o-r /etc/ssmtp/smtp.conf pour un peu plus de sécurité.

(si je fais des contributions au script, j'autorise tout le monde à les ajouter/modifier/questionner/commenter/refuter)

Euh, je me demande si c'est utile de faire "/sbin/nice emerge" au lieu de "emerge" tout court ? Je sais qu'il existe la variable PORTAGE_NICENESS, mais est-ce que ça fonctionne aussi avec --sync ?

----------

## PabOu

Ajout d'une étape pour layman.

La ligne 

```
LAYMAN_CMD="layman -S"
```

 est à rajouter parmi les commandes au début du script.

Les lignes 

```
# layman -S module

separator "Layman overlays synchronization"

${LAYMAN_CMD}

echo -n "${LAYMAN_CMD} : "

if [ $? = 0 ] ; then

   echo "OK"

else

   echo "A problem occured when trying to sync layman overlays. Aborting."

   exit 1

fi
```

 sont à rajouter après la function "separator" et avant le module "emerge -uDN(pv)" (moi je l'ai mis juste après le emerge --sync et avant le glsa-check)

----------

## _Seth_

Salut,

  Je fais un peu de jardinage (je déterre   :Very Happy:  ) en cette saison et je suis reparti de la base de ton script pour me faire un petit rapport quotidien. Je te remercie beaucoup pour cette utile contribution.

  J'ai une petite question, cela dit. Je ne comprends pas du tout comment le système fait pour envoyer un mail ? Je m'explique : ton script exécute une certain nombre de commande et affiche leur résultat. Quand est ce que le mail est envoyé ? Je n'ai vu nulle part dans le script d'occurence de "mail" ou de "sendmail", idem pour la ligne du cron... et pourtant ce matin, j'ai bien reçu le mail-qui-va-bien   :Question: 

  Encore merci !

----------

## Oupsman

 *_Seth_ wrote:*   

> Salut,
> 
>   Je fais un peu de jardinage (je déterre   ) en cette saison et je suis reparti de la base de ton script pour me faire un petit rapport quotidien. Je te remercie beaucoup pour cette utile contribution.
> 
>   J'ai une petite question, cela dit. Je ne comprends pas du tout comment le système fait pour envoyer un mail ? Je m'explique : ton script exécute une certain nombre de commande et affiche leur résultat. Quand est ce que le mail est envoyé ? Je n'ai vu nulle part dans le script d'occurence de "mail" ou de "sendmail", idem pour la ligne du cron... et pourtant ce matin, j'ai bien reçu le mail-qui-va-bien  
> ...

 

Par défaut, les démons cron envoient à l'utilisateur la stdin du script executé en crontab.

----------

## _Seth_

 *Oupsman wrote:*   

> Par défaut, les démons cron envoient à l'utilisateur la stdout du script executé en crontab.

 

Effectivement, en cherchant bien :

```
man 5 crontab
```

Bon j'ai encore pas mal à apprendre sur les MTA & leur utilisation...

Merc beaucoup.

----------

## Mickael

D'après la remarque de Pabou sur le binaire mail, il faudrait le usealg mailwrapper, mais mon petit soucis c'est que ce flag ne semble pas existé ?

 *Quote:*   

> eix -s ssmtp
> 
> [I] mail-mta/ssmtp
> 
>      Available versions:  2.61-r2 2.62-r3 2.62-r4 (~)2.62-r6 {ipv6 mailwrapper maxsysuid md5sum ssl}
> ...

 

 *Quote:*   

> emerge -pv ssmtp
> 
> These are the packages that would be merged, in order:
> 
> Calculating dependencies... done!
> ...

 

hop disparu, what happened?

EDIT : j'ai un début de piste :

 *Quote:*   

>  equery belongs mailq
> 
> [ Searching for file(s) mailq in *... ]
> 
> mail-mta/ssmtp-2.62-r6 (/usr/bin/mailq -> /usr/sbin/ssmtp)
> ...

 

----------

## Mickael

Humm.. je vais surement passer pour un con mais je ne vois pas dans le script l'utilisation de ssmtp.... il est ou le schimilimiblick...

et puisj' faire un lien symbolique entre sendmail et ssmtp  pour avoir une commende mail?

```
/usr/bin/sendmail

/usr/lib/sendmail

/usr/sbin/sendmail

```

et oui vous l'aurez compris, je ne comprends rien au réseau..

EDIT : deux infos :

 *Quote:*   

> ls -l /usr/sbin/sendmail
> 
> lrwxrwxrwx 1 root root 15 févr. 25 08:55 /usr/sbin/sendmail -> /usr/sbin/ssmtp*
> 
> 

 

 *Quote:*   

> ls -l /usr/bin/sendmail 
> 
> lrwxrwxrwx 1 root root 15 févr. 25 08:55 /usr/bin/sendmail -> /usr/sbin/ssmtp*
> 
> 

 

```
locate sendmail

/usr/bin/sendmail

/usr/lib/sendmail

/usr/sbin/sendmail

```

EDIT 2 : En progrès mailx :

```
 mail-client/mailx

     Available versions:  8.1.2.20040524-r1 (~)8.1.2.20050715 8.1.2.20050715-r1

     Homepage:            http://www.debian.org/

     Description:         The /bin/mail program, which is used to send mail via shell scripts

```

----------

## anigel

Bonjour,

 *Mickael wrote:*   

> D'après la remarque de Pabou sur le binaire mail, il faudrait le usealg mailwrapper, mais mon petit soucis c'est que ce flag ne semble pas existé ?

 

Je ne m'en suis jamais trop soucié : j'installe simplement directement le paquet mail-client/mailx. Tout est inclus dedans.

 *Mickael wrote:*   

> Humm.. je vais surement passer pour un con mais je ne vois pas dans le script l'utilisation de ssmtp.... il est ou le schimilimiblick...

 

Il n'y a pas de questions idiotes  :Wink: . Explications : sur les systèmes UNIX depuis que l'email existe, on utilise comme MTA (Mail Transport Agent : le programme qui transporte les mails) un truc nommé sendmail. C'est fiable, mais horriblement compliqué à configurer (et encore, c'est rien de le dire !). Ce MTA (ou un autre, car aujourd'hui il en existe d'autres : postfix et exim par exemple) est installé chez ton FAI, et c'est ce serveur que tu désigne dans ton client mail sous le nom "SMTP server". Ton client mail contacte alors ce serveur, et lui confie l'acheminement du message. SSMTP n'est en fait qu'un intermédiaire entre ton système et le serveur de mail de ton FAI : plutôt que de configurer chaque soft chez toi et de leur déclarer ton FAI, tu leur fais croire à tous que tu as installé un MTA chez toi, et tu configure seulement SSMTP pour qu'il sous-traite la gestion de tes mails au serveur de ton FAI. Si tu change de FAI, tu as une seule ligne à changer pour que tout fonctionne  :Wink: . Simple question de soupleté  :Wink: .

 *Mickael wrote:*   

> et puisj' faire un lien symbolique entre sendmail et ssmtp  pour avoir une commende mail?

 

A la lumière de l'explication ci-dessus : non. la commande mail n'est ni plus ni moins qu'un thunderbird primitif (MUA : Mail User Agent). sendmail est un MTA en revanche. L'un est client, l'autre serveur.

 *Mickael wrote:*   

> et oui vous l'aurez compris, je ne comprends rien au réseau..

 

C'est pas compliqué, suffit d'avoir l'explication  :Wink: .

 *Mickael wrote:*   

> EDIT 2 : En progrès mailx :
> 
> ```
>  mail-client/mailx
> 
> ...

 

Ben tu vois  :Wink: .

----------

## Mickael

Merci !

----------

