2008/07/11

Tout lire en console en libre bien sûr

Je vais ici faire un récapitulatif des utilisataires qui permette de lire plein de format différent en console, je ne parle pas ici de framebuffer, le but étant de récupérer le contenu de différents types de fichiers, et éventuellement de pouvoir les traiter.

Le Format .doc MS Word

Souvent on vous envoies des documents .doc, au format MS Word donc, vous avez beau expliquer autour de vous que vous ne voulez rien dans ce format vous en recevez quand, même, une bonne solution pour pouvoir les lire / récupérer le texte contenu sans sortir l'artillerie lourd (OOo, abiword ou kword) c'est d'utiliser antiword c'est vieux, mais ça marche très très bien. (GPLv2)

Les Formats .xls ou .ppt (MS Excel ou MS Powerpoint

Tout comme les .doc, vous ne voulez pas de ces document mais on vous les envoie quand même, dans ces cas là il ne vous reste plus qu'a utiliser le bon vieux xlhtml. (GPLv2)

Les Formats HTML

Dans ce cas la il y a une pléthore d'outils, les principaux sont lynx avec l'option -dump (GPLv2) avec la même option, il y a links (GPLv2), elinks (GPLv2)

mais il y a aussi en beaucoup plus léger html2text (GPLv2)

Les formats OpenDocument

il y a odt2txt (GPLv2) pour aller lire les formats OpenDocument (Texte, Tableur Présentation) cerise sur le gâteau, il permet également d'aller lire les anciens documents .sxw (OpenOffice 1.x)

Le format .ps PostScript

le package ghostscript (GPLv2 et CPLv1) fourmit le binaire ps2ascii qui permet permet donc de récupérer le texte contenu dans le fichier postscript.

Le format .pdf Portable Document Format

poppler (GPLv2) et xpdf (GPLv2) fournissent la même gamme d'outils (normale poppler se base sur xpdf) pour manipuler les pdf, parmi tous ces outils on retrouve pdftotext.

Le format .djvu DJVU

le projet djvulibre (CPLv2) fournit tout un ensemble d'outil de manipulation de fichiers djvu en console, il offre entre autre djvutxt.

Mention spéciale pour tous les formats de document MS (Word, Excel, PPT, RTF)

catdoc fournit trois binaires : catdoc pour lire les document .doc et .rtf, xls2csv pour les excel et catppt pour les PowerPoint. Le gros plus de catdoc est la conversion possible vers latex.

Voila pour le petit point sur les outils permettant de lire/manipuler en console divers formats de documents.

Si comme moi vous lisez vos mail avec mutt, tous ces outils pourront vous être utiles, un autre outil qui pourra vous servir est demoroniser en effet si vous recevez des mails envoyés depuis outlook, ils sont souvent en html (SAYMAL) mais en html foireux en plus, demoroniser est un outil qui remettera le tout en html propre, il suffit ensuite de passer le résultat dans html2text pour pouvoir les lire correctement.

2008/07/03

OSS 3 - 0 ALSA

Voila toutes mes machines (3 os différents dessus : OpenSolaris, FreeBSD, Linux) sont enfin passées sous OSSv4, alors les linuxiens vont me rétorqué, quoi, mais il parait que OSS c'est tout pourri c'est pour ça qu'on a alsa maintenant sous linux... A cela je vais raconter une petite histoire.

Il y a très longtemps, tous les unix vivaient en paix, les applications audio pouvaient fonctionner à la recompilation près sur tous les unix libres puisque tout le monde respectait le standard Open Sound System, autrement dit OSS, mais voila, sous linux, personne n'a su coder une implémentation correcte de l'OSS.

Deplus 4front a décidé un jour de ne plus avoir de version libre de leur implémentation OSS, alors que la majeure partie des OS ont continué à développer leur implémentation OSS et à l'améliorer, sous linux on a d'abord fait des glues infâme pour palier au lacunes de l'implémentation souvenez vous de esound - aujourd"hui on a pulseaudio dans le même genre - (oui je sais ça fait un peu beaucoup plus que ça :)) puis ils ont développé ALSA, et plutôt que de faire quelque chose de portable et d'impliquer les autres Unix au moins les libres, ils ont fait un truc linux only, qui plus est, ALSA est bourré de lacunes (cf dmix par exemple).

Heureusement, 4front revient sur le devant de la scène avec la version 4 de son implémentation OSS en libre, et comme ils sont vraiment très sympa, eux ils ont pensé à tout le monde, non seulement en terme d'implémentation, mais aussi en terme de licence. Ainsi ils fournissent une version CDDL pour la amoureux de (Open)solaris, une version BSD pour les *BSD, et GPL pour Linux.

Cette version signe le retour à la possibilité de faire une application qui gère le son et qui soit portable qui marche sous tous les unix en utilisant une seule et unique API simple et éprouvée.

Cerise sur le gâteau, ossv4 est très simple à déployer sur toutes nos OS libres, la qualité de la gestion des cartes son est bien meilleur qu'avec OSSv3 ou ALSA, bref que du bonheur (utilisateur d'ALSA, pour vous OSSv4 signifie la fin du son faiblard, la fin des grésillement quand on choisit d'avoir un niveau sonore élevé, la fin de l'horrible alsamix, bref tout bénef).

Pour l'installer sur Linux, il faut avoir le support du son en module, puis prendre les packages de sa distribution, le reste se fait tout seul. Sur le site de 4front il est possible de télécharger un paquet RPM, un paquet DEB ou un paquet TAR.

Sous OpenSolaris, il faut télécharger le package directement depuis le site de 4front http://www.4front-tech.com/download.cgi choisir la version de solaris qui vous concerne, pour OpenSolaris 200805 c'est Solaris 10/11 puis pkg_add -d oss*.pkg. Un petit reboot plus tard et on a du son nickel.

Sous FreeBSD, ossv4 est directement disponible depuis les ports : audio/oss un simplement make install clean permettra de l'installer. Il faut ensuite rajouter oss_enable="YES" dans /etc/rc.conf, un reboot ou un kldunload est nécessaire si votre carte son a déjà été détecté par les drivers natifs, puis /usr/local/etc/rc.d/oss start

J'espère que le retour de OSSv4 signifiera la fin des applications ALSA-only. Je sais aussi que la réalité de ma petite histoire et de ALSA est beaucoup plus complexe que ce que j'annonce.

2008/06/24

mutt c'est le bien mais certains patchs sont ... crappy

Utilisateur de mutt, je suis aussi fan de son patch sidebar qui permet de retrouver une sidebar toute convi sous notre petit mutt préféré.

Pendant longtemps je n'ai pas compris pourquoi ce patch n'a jamais été intégré, je l'utilisais pourtant depuis longtemps. un évènement récent m'a fait comprendre le pourquoi du comment, le patch est tout pourri.

En effet, il part du principe que les utilisateurs ont un boite mail locale et crée le contenu de la sidebar en fonction de ça, jusqu'à il y a peu ça marchait quand même en imap.

Le problème c'est que depuis peu ils ont décidé de faire en sorte que la sidebar présente l'arborescence des dossiers et là c'est le drame... j'ai que des <null> sur la sidebar, je me dit merde... Bon c'est pas grave, je vais allé corrigé ça moi même comme un grand. En lisant le patch je me rend compte que le patch prend / comme délimiteur de répertoires, dommage sur mon imap c'était des points.

Pas de soucis je vais donc de ce pas modifier ma conf dovecot pour qu'il se présente avec des / comme délimiteurs :

namespace private {
...
separator = /

...
}

je relance mon mutt : toute l'arbo de premier niveau est <null>, en revérifiant le patch je vois qu'il considère le premier niveau de l'arbo comme nul car il s'attend a un truc genre mail/INBOX et donc il vire le mail/

pour cela il suffit d'éditer le patch ("patch-1.5.18.sidebar.20080517.txt") et à la ligne 1593 remplacer

sidebar_folder_depth = 0;

par

sidebar_folder_depth = 1;

Recompilation de mutt :

% make makesum
% make deinstall reinstall clean

la relance de mutt me dit que tout va bien, mais je me rend compte que ma INBOX n'est pas présente dans la sidebar. Un petit tour sur le webmail m'indique la même chose (DIMP pour le webmail, jusqu'à ce que j'en trouve un bien qui ne soit pas en php - ceci est un appel :))

La modification de mon dovecot.conf m'a donc modifié quelque chose qui ne fallait pas, c'est vite corrigé comme ceci : dans le fichier de configuration de dovecot :

namespace private {
...
inbox = yes
...
}

maintenant j'ai un joli mutt avec une belle sidebar qui marche en imap.

mutt

2008/06/12

Rapide apperçu d'OpenSolaris

Q

2008/06/11

Retrouver les paquets installés concernés par un KNOB donné

Pour retrouver les paquets concernés par un KNOB donné sous FreeBSD, il n'y a pas de méthode propre

Heureusement, ce n'es pas très compliqué, trois coup de zsh plus tard et on obtiens la liste. Dans mon cas je cherhais la liste des paquets qui sont concernés par le KNOBS WITHOUT_NLS :

#!/usr/bin/env zsh

autoload -U zargs
bla=($(zargs ${${(f)"$(pkg_info)"}// */} -- pkg_info -qo ))
for file ($bla) grep -q WITHOUT_NLS /usr/ports/$file/Makefile* && print $file

2008/05/21

FreeBSD 7 supporte LVM2

Depuis quelques temps déjà, FreeBSD-CURRENT supportait les disques LVM2, un pas de plus vers l'interopérabilité Linux/FreeBSD

Depuis quelques jours (février et surtout le 8 mai) , le code ajoutant le support LVM2 au framework geom a été "MFCed" c'est a dire qu'il a été porté de CURRENT vers STABLE. La prochaine version RELEASE de la branche 7 de freebsd pourra donc plus facilement cohabiter avec n'importe qu'elle installation linux utilisant LVM2

j'ai ainsi pu facilement lire les disques linux lvm2 sur mon FreeBSD

ça ce passe ici

2008/05/15

Solution antispam perso

Comment gérer ses mails sur son propre serveur freebsd et ainsi pouvoir y accéder comme on veut, filtrer ses spam, passer un coup d'antivirus etc. C'est un sujet largement abordé partout, mais voila j'ai quand même envie de vous présenter ma solution.

Les technologies :

Installation des différents composants

installation de postfix

#make -C /usr/ports/mail/postfix config

Dans mon cas j'ai choisit les options suivantes :

puis :

#make -C /usr/ports/mail/postfix install clean

Accepter l'activation de postfix dans mailer.conf pour que postfix soit le mta par défaut en lieu et place du sendmail embarqué par défaut dans FreeBSD

installation de dovecot

#make -C /usr/ports/mail/dovecot config

J'ai choisit les options suivantes :

puis :

#make -C /usr/ports/mail/dovecot install clean

installation de dovecot-sieve

#make -C /usr/ports/mail/dovecot-sieve install clean

Installation de postgresql

#make -C /usr/ports/databases/postgresql82-server config

J'ai choisit les options suivantes :

puis :

#make -C /usr/ports/databases/postgresql82-server install clean

Installation de clamav

#make -C /usr/ports/security/clamav config

Je n'ai personnellement mis aucunes options.

#make -C /usr/ports/security/clamav install clean

installation de dspam

#make -C /usr/ports/mail/dspam config

J'ai choisit les options suivantes :

CGI et LIGHTTPD serveur a l'utilisation de l'interface web que je ne décrirais pas dans ce post.

#make -C /usr/ports/mail/dspam install clean

Installation de dovecot-antispam

#make -C /usr/ports/mail/dovecot-antispam config

J'ai choisit les options suivantes :

puis :

#make -C /usr/ports/mail/dovecot-antispam install clean

Installation de fdm

#make -C /usr/ports/mail/fdm install clean

Configuration des différents composants

Configuration de postfix

Relay des mails en fonction du sender

Ici nous allons dire à postfix de relayer les mails en fonction de l'adresse mail du sender de manière a envoyer les mails gmail via le smtp de gmail, free via le smtp de free et ainsi de suite, bien entendu d'effectuer l'authentification si nécessaire Dans le main.cf rajouter ceci

sender_dependent_relayhost_maps = hash:/usr/local/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps              = hash:/usr/local/etc/postfix/smtp_passwords
smtp_sasl_security_options           = noanonymous
smtp_sasl_tls_security_options       = noanonymous
smtp_sender_dependent_authentication = yes
smtp_tls_per_site = hash:/usr/local/etc/postfix/tls_per_site

Il faut donc créer /usr/local/etc/postfix/sender_relay dans lequel on retrouve la liste des serveur smtp vers lesquels relayé les mails envoyé depuis une adresse donnée :

user@free.fr smtp.free.fr
user@gmail.com smtp.gmail.com:587
...

Une fois le fichier renseigné :

#postmap /usr/local/etc/postfix/sender_relay

ensuite il faut créer le fichier suivant : /usr/local/etc/postfix/smtp_passwords qui va servir à l'authentification sur les serveur smtp décrit dans le fichier précédent

user@free.fr user:password
user@gmail.com user:password

de même

#postmap /usr/local/etc/postfix/smtp_passwords

Pour finir le fichier suivant doit aussi être créé : /usr/local/etc/postfix/tlspersite, il va servir à définir si le serveur nécessite l'utilisation du TLS. Seul les serveurs smtps doivent être listés dedans :

smtp.gmail.com MAY

et toujours

#postmap /usr/local/etc/postfix/smtp_passwords

Activation du relay lmtp vers dspam

Il existe plusieurs méthode pour relayé les mails reçu par postfix à dspam, mais le ltmp me semble la plus simple. Pour l'activer il suffit simplement de rajouter

mailbox_transport = lmtp:unix:/var/run/dspam.sock

Dans main.cf

Voila maintenant le MTA est configurer.

Je vous laisse le soin de configurer selon les méthode habituelle le reste des options de postfix : authentification, tls, etc.

Configuration de dspam

Préparation de la base PostgreSQL :

ici tout ce fait en user pgsql

#su - pgsql

création de la base dspam :

#createdb dspam

Il faut que la base support le language plpgsql donc :

#createlang plpgsql dspam

Ensuite il faut créé le contenu de la base dspam en utilisant le fichier /usr/local/share/examples/dspam/pgsql/pgsql_objects.sql Attention ce fichier m'a posé un problème : ligne 58 il faut ajouter */ à la fin puis

#psql dspam < /usr/local/share/examples/dspam/pgsql/pgsql_objects.sql

création de l'utilisateur dspam (sans mot de passe puisque la base n'est pas accessible depuis l'extérieur

#createuser --no-adduser --no-createdb dspam

enfin attribution des droits à l'utilisateur dspam

#psql dspam <<EOF
GRANT SELECT,INSERT,UPDATE,DELETE ON
  dspam_preferences,
  dspam_signature_data,
  dspam_stats,
  dspam_token_data
TO dspam;
EOF

Configuration de clamav

Editer le fichier de configuration du daemon clamav /usr/local/etc/clamd.conf qui est très clair et positionner les options qui vous intéressent.

Ajouter le rafraîchissement de la base de donnée clamav à dans la crontab de root :

#crontab -e

rajouter la ligne suivante :

0 0 * * 0 /usr/local/bin/freshclam --quiet

Configuration de dspam.conf

Dans le fichier /usr/local/etc/dspam.conf rajouter le chargement du driver postgresql et la configuration du serveur postgresql

StorageDriver /usr/local/lib/libpgsql_drv.so
PgSQLServer     127.0.0.1
PgSQLPort       5432
PgSQLUser       dspam
#PgSQLPass              dspam
PgSQLDb         dspam

Pas besoin du mot de passe puisque nous n'en avons pas mis pour l'utilisateur dspam

Configurer le LDA (celui de dovecot) pour la distribution des tous les mails reçu par dspam, que ce soient des spam ou pas :

TrustedDeliveryAgent  "/usr/local/libexec/dovecot/deliver -d bapt"
UnTrustedDeliveryAgent  "/usr/local/libexec/dovecot/deliver -d bapt"

je précise -d bapt car je n'ai qu'un seul utilisateur et que je souhaite que l'intégralité de mail qui passe par dspam soit délivré à cette utilisateur, quelque soit le destinataire. pour être plus générique, ce rapporter à la doc dspam.

Rajouter votre utilisateur en tant que utilisateur de confiance (pouvant utiliser le binaire dspam) afin que le plugin dovecot-antispam fonctionne correctement :

Trust bapt

Le plugin dovecot antispam peut fonctionner de deux manière : par l'utilisation du binaire dspam --client ou par l'envoie d'un mail à dspam, dans le second cas, il n'est pas nécessaire de rajouter l'utilisateur système.

Passer le mode d'entraînement de dspam à TEFT :

TrainingMode teft

Je n'aime pas avoir le mot SPAM qui apparaît dans le sujet du mail, je préfère que que ce soit dans les headers, donc :

Preference "signatureLocation=headers"
Preference "showFactors=on"
Preference "spamAction=deliver"
#Preference "spamSubject=SPAM"

Configurer l'utilisation de clamav :

ClamAVPort      3310
ClamAVHost      127.0.0.1
ClamAVResponse accept

passer en mode serveur automatique pour que le daemon choisisse le mode le plus approprié en fonction des appels qui lui sont fait :

ServerMode auto

Configurer les paramètre du serveur, cad les options qui aurait été passé au client en ligne de commande si on avait utilisé ce biais là plutôt que de passer par le LMTP

ServerParameters        "--deliver=innocent --user bapt -d %u"

Encore une fois je force le user bapt pour que tous les mails rentrant soit traité comme étant pour le user bapt et non que le nom de l'utilisateur soit autodéterminé. Pour être plus générique, se référer à la doc dspam.

la socket serveur ainsi que la socket client (qui sont la même dans notre cas):

ServerDomainSocketPath  "/var/run/dspam.sock"
ClientHost      /var/run/dspam.sock

Attention le chemin "/var/run/dspam.sock doit être identique au chemin que nous avons donné à postfix précédemment.

voila dspam est maintenant configurer.

Configuration de dovecot

Activation les protocoles IMAP et IMAPS : Dans /usr/local/etc/dovecot.conf, ajouter :

protocols = imap imaps

On désactive l'authentification plaintext pour tout ce qui n'est pas localhost :

disable_plaintext_auth = yes

On active le SSL :

ssl_disable = no
ssl_cert_file = /etc/ssl/dovecot-key.pem
ssl_key_file = /etc/ssl/dovecot-key.pem

On définit l'emplacement du maildir :

default_mail_env = maildir:%h/.maildir

On active le plugin antispam dans la section imap :

protocol imap {
   ...
   mail_plugins = antispam
   mail_plugin_dir = /usr/local/lib/dovecot/imap
   ...
}

On active dovecot-sieve dans la section lda

protocol lda {
   ...
   mail_plugins = cmusieve
   mail_plugin_dir = /usr/local/lib/dovecot/lda
   ...
}

On configure le plugin antispam

plugin {
   ...
   antispam_spam = spam
   antispam_dspam_binary = /usr/local/bin/dspam
   antispam_dspam_args = --user;%u
   ...
}

Ainsi quand un mail est placé dans le dossier spam dspam l'apprend comme étant un spam et inversement si le mail en déplacé du dossier spam vers un autre, dspam l'apprend comme ham.

Finition en tant qu'utilisateur

Configuration de fdm

Rappatriement des mails

Dans le fichier $HOME/.fdm.conf :

set unmatched-mail keep
action "monsmtp" smtp server "localhost" to "bapt"
account "free" pop3 server "pop.free.fr" user "user" pass "passwd"
account "gmail" imaps server "imap.gmail.com" user "user" pass "passwd" folder "INBOX" # ou account "gmail" pop3s server "imap.gmail.com" user "user" pass "passwd"
match accounts {"free" "gmail"} action "monsmtp"
Nettoyage des spam vieux de plus de 1 jours et idem pour la corbeille

Dans le fichier $HOME/.fdm.conf

account "spam" maildir "%h/.maildir/.spam"
account "Trash" maildir "%h/.maildir/.Trash"
match accounts {"spam" "Trash"} and age &gt; 1 days  action drop

(J'utilise la même méthode pour nettoyer les dossiers correspondant aux mailing lists mais je conserver les mails 7 jours) A partir de dovecot 1.1 cette méthode ne sera plus nécessaire car dovecot inclue un nouveau plugin permettant l'expiration des mails. fdm est capable de faire beaucoup plus mais dans notre cas, tout le reste du filtrage est effectué par dovecot-sieve

Configuration de sieve pour trier les spam

dans le fichier $HOME/.dovecot.sieve

require "fileinto";
...
if header :contains "X-DSPAM-Result" "Spam" {

    fileinto "spam";
    stop;
}
...

Il est possible de faire du filtrage très fin de mail via sieve, internet regorge de documentation là dessus.

Démarrer le tout

Rajouter dans /etc/rc.conf :

postfix_enable="YES"
dovecot_enable="YES"
postgresql_enable="YES"
clamav_clamd_enable="YES"
dspam_enable="YES"
postgresql_flags="-w -s -m fast"
postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C"
postgresql_class="default"

puis

#/usr/local/etc/rc.d/postfix start
#/usr/local/etc/rc.d/dovecot start
#/usr/local/etc/rc.d/postgresql start
#/usr/local/etc/rc.d/clamav-clamd start
#/usr/local/etc/rc.d/dspam start

Attention postrgesql doit être démarrer pour la configuration du stockage de dspam sur postgresql

Il ne reste plus qu'à activer le rapatriement automatique des mails. Dans la crontab de l'utilisateur :

*/5 * * * * /usr/local/bin/fdm -l fetch

On ajoute enfin un nettoyage quotidien de dspam Dans la crontab de root :

0 0 * * 0 /usr/local/bin/dspam_clean
0 0 * * 0 psql -U dspam dspam < /usr/local/share/examples/dspam/pgsql/purge.sql > /dev/null

Il ne vous reste plus qu'à configurer vos MUA préférés pour l'utilisation de tout ça. pour moi mutt et horde/dimp (pour le web).

2008/04/01

Nettoyer les signatures dspam avec le driver hashdrv

Sur mon serveur perso, les mails sont filtrés par dspam. Etant mono-utilisateur des mails sur ce serveur, j'ai choisit le driver hashdrv pour stocker sur le disque les infos dspam.

le problème c'est que dspam_clean ne fonctionne pas avec le driver hashdrv, il faut donc se faire à la main un script qui va supprimer les vieilles signatures de mails, ce n'est pas très dur, mais le nombre de signature à supprimer peut être trop grand pour ce qui est autorisé en argument de rm. De plus find -exec est vraiment trop lent et couteux en ressources dès lors que le nombre de fichier devient grand.

Par contre zsh offre de nombreux avantage permettant de faire un script ou plutôt une commande très simple pour faire le ménage :

#!/usr/local/bin/zsh
autoload zargs
zargs ~/.dspam/bapt.sig/*.sig(a+14) -- rm

il va supprimer presque instantanément tous les fichiers .sig veux de plus de 14 jours.

2008/04/01

Econimisez de la place grâce à DJVU

Le format djvu est un format de compression par ondelette, il se compare au jpeg2000 pour les images et au PDF pour les documents.

Il existe un projet libre : djvulibre pour le support de ce format (format lut pas evince et djview)

pour l'installer sous FreeBSD :

#make -C /usr/ports/graphics/djvulibre install clean

ou pour ce qui ne veulent de pas X11 ou de QT

#make -C /usr/ports/graphics/djvulibre-nox11 install clean

pour pouvoir convertir vos PDF en DJVU, il y a un utilitaire appelé pdfdjvu qui fait très bien le boulot :

#make -C /usr/ports/converters/pdf2djvu install clean

une fois terminer, il ne vous reste plus qu'à convertir vos beaux documents PDF en DJVU. Par exemple pour un document produit via pdflatex (dpi par défaut à 600 donc)

$ pdf2djvu -d 600 -o cv.djvu cv.pdf

Sur mon CV (que du texte) j'obtiens :

50.45% saved, 99311 bytes in, 49212 bytes out

2008/02/20

Paquets finaux sur archlinux le retour

Suite au passage à pacman 3.1, le format de la base des paquets à changé légèrement, il n'y a plus de required dans le fichier depends, mon précédent script ne fonctionne donc plus. En revanche, j'avais un bout de C utilisant la libalpm (bout de code fournit pas mimas ici ). Bien sûr entre temps la libalpm a évoluée depuis et ce code ne passe pas tel quel, en revanche quelques petite modifications plus tard et tout refonctionne.

#include <stdio.h>
#include <stdlib.h>

#include <alpm.h>
#include <alpm_list.h>

int main(int argc, char** argv)
{
alpm_list_t *i;
pmpkg_t *pkg = NULL;
pmdb_t *db_local = NULL;

if (alpm_initialize() == -1)
{
    puts ("Erreur: alpm_initialize()");
    return 1;
}
alpm_option_set_root("/");
alpm_option_set_dbpath("/var/lib/pacman");

db_local = alpm_db_register_local();
if (db_local == NULL)
{
    puts ("Erreur: alpm_db_register");
    alpm_release();
    return 1;
}

for (i = alpm_db_getpkgcache(db_local); i ; i = alpm_list_next(i))
{
    pkg = alpm_list_getdata(i);
    if ( alpm_list_count(alpm_pkg_compute_requiredby(pkg)) == 0 )
    {
        printf("%s\n", alpm_pkg_get_name(pkg));
    }
}
alpm_release();
return 0;
}

Pages : 1 2 3 4 5 6 7