<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Emile "iMil" Heitor 's home &#187; pkgsrc</title>
	<atom:link href="http://imil.net/wp/tag/pkgsrc/feed/" rel="self" type="application/rss+xml" />
	<link>http://imil.net/wp</link>
	<description>life, unix and stuff</description>
	<lastBuildDate>Sun, 13 May 2012 10:43:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>sysutils/conky</title>
		<link>http://imil.net/wp/2012/05/13/sysutilsconky/</link>
		<comments>http://imil.net/wp/2012/05/13/sysutilsconky/#comments</comments>
		<pubDate>Sun, 13 May 2012 09:35:02 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[conky]]></category>
		<category><![CDATA[envsys]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pkgsrc]]></category>
		<category><![CDATA[proplib]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=727</guid>
		<description><![CDATA[Tout ça, c&#8217;est la faute à Guigui2. Et à Nils aussi.
Y&#8217;a quoi, 2/3 semaines, ces deux là me disent que ce serait tellement bieeeen si on avait conky dans pkgsrc et que patati le challeeenge et que patata tellement c&#8217;est beau tellement y&#8217;a des thèmes de ouf et j&#8217;en passe et des meilleures.
Et je regarde.
Et [...]]]></description>
			<content:encoded><![CDATA[<p>Tout ça, c&#8217;est la faute à Guigui2. Et à Nils aussi.</p>
<p>Y&#8217;a quoi, 2/3 semaines, ces deux là me disent que ce serait tellement bieeeen si on avait <a href="http://conky.sourceforge.net/">conky</a> dans <i>pkgsrc</i> et que patati le challeeenge et que patata tellement c&#8217;est beau tellement y&#8217;a des thèmes de ouf et j&#8217;en passe et des meilleures.</p>
<p>Et je regarde.</p>
<p>Et c&#8217;est l&#8217;engrenage.</p>
<p>Deux semaines plus tard donc, je viens d&#8217;importer <code>sysutils/conky</code> dans <i>pkgsrc current</i> avec le support des <i>sensors</i> usuels, CPU (SMP), load, mémoire, réseau, disque ainsi que batterie et température. Et ces deux derniers, c&#8217;étaient pas les plus simples.</p>
<p>En effet, si par exemple <a href="http://www.freebsd.org">FreeBSD</a> dispose de <a href="http://en.wikipedia.org/wiki/Sysctl">sysctl</a> fort conviviaux du type <code>hw.acpi.battery.time</code> ou <code>hw.acpi.battery.life</code>, bin <a href="http://www.NetBSD.org">nous</a> non. Nous on préfère se faire chier avec <a href="http://www.daemon-systems.org/man/envsys.4.html">envsys(3)</a> dont l&#8217;utilisation est expliquée de manière parfaite par ce commentaire trouvé dans <i>sysutils/torsmo</i>:</p>
<pre>
    /*
     * Using the envsys API is like pulling teeth without anesthetic.
     * so just popen envstat and parse the output instead.
     */
</pre>
<p>Ça résume assez bien la situation.<br />
Mais comme je suis un peu sado-maso sur les bords, et que je souhaitais présenter un peu plus que le pourcentage de charge de la batterie, je me suis lancé dans l&#8217;écriture d&#8217;une petite fonction qui simplifie grandement l&#8217;accès aux ressources d&#8217;envsys. En gros ça donne ça:</p>
<pre>
#include &lt;sys /envsys.h&gt;
#include &lt;prop /proplib.h&gt;

#define _DEV_SYSMON "/dev/sysmon"

#define P_BOOL      0
#define P_UINT8     1
#define P_INT64     2
#define P_STRING    3

typedef struct Devquery {
    int         type;
    char        *dev;
    char        *key;
    char        *row;
} Devquery;

int             sysmon_fd;

int8_t envsys_get_val(Devquery, void *);

void
sysmon_open()
{
    sysmon_fd = open(_DEV_SYSMON, O_RDONLY);
}

void
sysmon_close()
{
    if (sysmon_fd > -1)
        close(sysmon_fd);
}

int8_t
envsys_get_val(Devquery dq, void *val)
{
    char *descr;
    const char *cval;
    prop_dictionary_t dict;
    prop_object_t device;
    prop_object_iterator_t iter;
    prop_object_t obj;
    bool rc = false;

    if (sysmon_fd < 0)
        return -1;

    if (prop_dictionary_recv_ioctl(sysmon_fd, ENVSYS_GETDICTIONARY, &#038;dict)
        != 0)
        return -1;

    if ((device = prop_dictionary_get(dict, dq.dev)) == NULL)
        return -1;

    iter = prop_array_iterator(device);

    while((obj = prop_object_iterator_next(iter)))  {
        descr = (char *)prop_string_cstring_nocopy(prop_dictionary_get(obj,
                "description"));
        if (descr != NULL &#038;&#038; *descr) {
            if(strcmp(descr, dq.key) == 0) {
                switch(dq.type) {
                case P_BOOL:
                    rc = prop_dictionary_get_bool(obj,
                        dq.row, (bool *)val);
                case P_UINT8:
                    rc = prop_dictionary_get_uint8(obj,
                        dq.row, (uint8_t *)val);
                    break;
                case P_INT64:
                    rc = prop_dictionary_get_int64(obj, dq.row,
                        (int64_t *)val);
                    break;
                case P_STRING:
                    rc = prop_dictionary_get_cstring_nocopy(obj,
                        dq.row, &#038;cval);
                    val = (void *)cval;
                    break;
                }
            }
        }
    }

    prop_object_iterator_release(iter);
    prop_object_release(dict);

    if (rc == false) {
        val = NULL;
        return -1;
    }

    return 0;
}
</pre>
<p>On utilise la fonction de cette façon:
</pre>
<pre>
    Devquery dq_ac = { P_BOOL, "acpiacad0", "connected", "cur-value" };

    if (envsys_get_val(dq_ac, (void *)&#038;connected) < 0)
</pre>
<p>Dans cet exemple, <code>connected</code> sera placé à 1 si l'élément <code>acpiacad0</code> est connecté, 0 autrement.</p>
<p>Le package n'est pas encore parfait, mais il est désormais tout à fait utilisable. <i>Upstream</i> a été contacté et l'integration de mes patchs est en cours.</p>
<p>Mandatory screenshot:<br />
<a href="http://imil.net/gfx/NetBSD-conky-full.png"><img src="/gfx/NetBSD-conky-full.png"/></a></pre>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/05/13/sysutilsconky/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ça va pas être possible avec vos baskets</title>
		<link>http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/</link>
		<comments>http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 08:42:57 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[naxsi]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/</guid>
		<description><![CDATA[Dans ma boîte, l&#8217;équipe sécurité a publié voila quelques mois de cela un module pour nginx: un firewall applicatif du nom de naxsi.
Ce module, sous licence GPLv2, je viens de le publier dans pkgsrc current sous la forme d&#8217;une option de www/nginx. Je me propose de vous montrer ici comment sécuriser simplement votre serveur web [...]]]></description>
			<content:encoded><![CDATA[<p>Dans <a href="http://www.nbs-system.com">ma boîte</a>, l&#8217;équipe sécurité a publié voila quelques mois de cela un module pour <a href="http://wiki.nginx.org/Main">nginx</a>: un firewall applicatif du nom de <a href="http://code.google.com/p/naxsi/">naxsi</a>.</p>
<p>Ce module, sous licence GPLv2, je viens de le publier dans <i>pkgsrc current</i> sous la forme d&#8217;une option de <code>www/nginx</code>. Je me propose de vous montrer ici comment sécuriser simplement votre serveur web / proxy inverse <i>nginx</i> grâce à <i>naxsi</i>.</p>
<p>Premièrement, si comme moi (et comme il se doit) vous utilisez une branche stable de <i>pkgsrc</i>, mettez simplement à jour <code>www/nginx</code> comme ceci:</p>
<pre>
$ cd /usr/pkgsrc/www/nginx
# cvs up -rHEAD -dP
</pre>
<p>Puis spécifiez à <i>pkgsrc</i> que vous souhaitez activer l&#8217;option <i>naxsi</i> pour le paquet <i>nginx</i>:</p>
<pre>
$ grep nginx /etc/mk.conf
PKG_OPTIONS.nginx+=     naxsi
</pre>
<p>Ceci fait, reconstruisez le paquet comme d&#8217;habitude:</p>
<pre>
$ cd /usr/pkgsrc/www/nginx
$ sudo make update clean
</pre>
<p>Dans la configuration de <i>nginx</i>, incluez les règles par défaut de <i>naxsi</i> de cette façon:</p>
<pre>
http {
    include       /usr/pkg/etc/nginx/mime.types;
    include       /usr/pkg/etc/nginx/naxsi_core.rules; # < --- ici
    default_type  application/octet-stream;
</pre>
<p>Comme vous pourrez le constater, le fichier <code>/usr/pkg/etc/nginx/naxsi_core.rules</code> contient un <i>set</i> de règles déjà très efficaces contre bon nombre d'attaques connues.<br />
Reste alors à activer le filtrage sur une <code>location</code> et choisir quels types d'attaques vous souhaitez bloquer; par exemple:
</pre>
<pre>
        location / {
            SecRulesEnabled;
            CheckRule "$SQL >= 8" BLOCK;
            CheckRule "$RFI >= 8" BLOCK;
            CheckRule "$TRAVERSAL >= 4" BLOCK;
            CheckRule "$EVADE >= 4" BLOCK;
            CheckRule "$XSS >= 8" BLOCK;
</pre>
<p>Un redémarrage de <i>nginx</i> plus loin, on essayera par exemple d&#8217;accéder à une adresse louche:</p>
<pre>
$ wget -O- http://coruscant/?../../etc/passwd
--2012-04-22 10:21:01--  http://coruscant/?../../etc/passwd
Resolving coruscant... 192.168.1.2
Connecting to coruscant|192.168.1.2|:80... connected.
HTTP request sent, awaiting response... No data received.
</pre>
<p>Et de constater dans <code>/var/log/nginx/error.log</code>:</p>
<pre>
2012/04/22 10:21:01 [error] 25353#0: *15 NAXSI_FMT: ip=192.168.1.1&#038;server=192.168.1.2&#038;uri=/&#038;total_processed=1&#038;total_blocked=1&#038;zone0=ARGS&#038;id0=1200&#038;var_name0=, client: 192.168.1.1, server: localhost, request: "GET /?../../etc/passwd HTTP/1.0", host: "192.168.1.2"
</pre>
<p>Moi j&#8217;trouve ça assez classe tout de même.</p>
<p>Toutes les infos relatives à la configuration de <i>naxsi</i> sont disponibles <a href="http://code.google.com/p/naxsi/wiki/TableOfContents?tm=6">sur le Wiki</a> de ce dernier.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/04/22/ca-va-pas-etre-possible-avec-vos-baskets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkgin 0.5.2.3</title>
		<link>http://imil.net/wp/2012/04/09/pkgin-0-5-2-3/</link>
		<comments>http://imil.net/wp/2012/04/09/pkgin-0-5-2-3/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 10:19:06 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Ma vie, mon oeuvre]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=716</guid>
		<description><![CDATA[!@#!@# de bug.
Des mois que je cherchais au mauvais endroit, en effet, uniquement chez certains utilisateurs (évidemment), un pkgin up / fug proposait d&#8217;installer l&#8217;univers. Problème dans le moteur de dépendances me dis-je; que de temps perdu à décortiquer ce qui fonctionnait parfaitement, pour finalement tomber sur ceci:

static const struct Summary {
	const int	type;
	const char	*tbl_name;
	const char	*deps;
	const [...]]]></description>
			<content:encoded><![CDATA[<p>!@#!@# de bug.</p>
<p>Des mois que je cherchais au mauvais endroit, en effet, <strong>uniquement</strong> chez certains utilisateurs (évidemment), un <code>pkgin up / fug</code> proposait d&#8217;installer l&#8217;univers. Problème dans le moteur de dépendances me dis-je; que de temps perdu à décortiquer ce qui fonctionnait parfaitement, pour finalement tomber sur ceci:</p>
<pre>
static const struct Summary {
	const int	type;
	const char	*tbl_name;
	const char	*deps;
	const char	*conflicts;
	const char	*requires;
	const char	*provides;
	const char	*end;
} sumsw[] = {
	{
		LOCAL_SUMMARY,
		"LOCAL_PKG",
		"LOCAL_DEPS",
		"LOCAL_CONFLICTS",
		"LOCAL_REQUIRES",
		"LOCAL_PROVIDES",
		NULL
	},
	{
		REMOTE_SUMMARY,
		"REMOTE_PKG",
		"REMOTE_DEPS",
		"REMOTE_CONFLICTS",
		"REMOTE_REQUIRES",
		"REMOTE_PROVIDES",
		NULL
	},
};

[...]

	for (ptbl = __UNCONST(sum.tbl_name), i = 0;
		 i < nelms;
		 ptbl += ((strlen(ptbl) + 1) * sizeof(char)), i++) {
</pre>
<p>Il ne faut PAaaaaaaas coder avec de l'alcool dans le sang, il ne faut <strong>pas</strong>, parce qu'après, on se retrouve avec des bouts de trucs ni faits ni à faire qui supposent que les membres d'une structure seront forcément alignés, et des effets de bords qui n'ont rien à voir.</p>
<p>Bref, <i>stacktic</i> m'a proposé cette méthode, bien plus élégante:
</pre>
<pre>
static const struct Summary {
	const int	type;
	const char	*tbl_name;
	const char	*deps;
	const char	*conflicts;
	const char	*requires;
	const char	*provides;
	const char	*end;
} sumsw[] = {
	[LOCAL_SUMMARY] = {
		LOCAL_SUMMARY,
		"LOCAL_PKG",
		"LOCAL_DEPS",
		"LOCAL_CONFLICTS",
		"LOCAL_REQUIRES",
		"LOCAL_PROVIDES",
		NULL
	},
	[REMOTE_SUMMARY] = {
		REMOTE_SUMMARY,
		"REMOTE_PKG",
		"REMOTE_DEPS",
		"REMOTE_CONFLICTS",
		"REMOTE_REQUIRES",
		"REMOTE_PROVIDES",
		NULL
	},
};

[...]

	/* (REMOTE[LOCAL)_PKG is first -> skip */
	for (arr = &#038;(sum.tbl_name) + 1; *arr != NULL; ++arr) {
</pre>
<p>Aaah, bah oui, tout de suite c&#8217;est moins dégueulasse hein.</p>
<p><i>0.5.2.3</i> est dans <i>current</i>, et le <a href="http://www.netbsd.org/developers/releng/pullups.html">pullup request</a> vient de partir.</p>
<p>meh.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2012/04/09/pkgin-0-5-2-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aiguille, fil, trou</title>
		<link>http://imil.net/wp/2011/10/30/aiguille-fil-trou-3/</link>
		<comments>http://imil.net/wp/2011/10/30/aiguille-fil-trou-3/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 23:30:17 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[bulk]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=653</guid>
		<description><![CDATA[Pour une partie de mon parc de machines, je fais mon propre bulk build. Ce dernier ne construit pas l&#8217;ensemble des packages, mais un petit subset (environ 600 packages) avec mes propres préférences. Parmi elles, il en est une qui fout un merdier sans nom dans le build, converters/libiconv. Comme je l&#8217;expliquais ici il y [...]]]></description>
			<content:encoded><![CDATA[<p>Pour une partie de mon parc de machines, je fais mon propre <a href="http://www.netbsd.org/docs/pkgsrc/bulk.html">bulk build</a>. Ce dernier ne construit pas l&#8217;ensemble des <i>packages</i>, mais un petit <i>subset</i> (environ 600 packages) avec mes propres préférences. Parmi elles, il en est une qui fout un merdier sans nom dans le <i>build</i>, <code>converters/libiconv</code>. Comme je l&#8217;expliquais ici <a href="http://imil.net/wp/2009/11/12/notice-iconv-function-iconv-wrong-charset-conversion/">il y a quelques temps</a>, j&#8217;ai besoin de construire <code>converters/php-iconv</code> avec la version <i>pkgsrc</i> de la <code>libiconv</code>. Cet impératif a un impact non négligeable dans la configuration de mon <code>/etc/mk.conf</code>, aussi je vous livre ce dernier, final et fonctionnel:</p>
<pre>
.ifdef BSD_PKG_MK

# no base X11
MKX11=no
X11_TYPE=modular
# clean dependencies when the "clean" target is called
CLEANDEPENDS=yes
# everybody likes vim
ACCEPTABLE_LICENSES+=vim-license

USE_BUILTIN.iconv=      no
# A built-in gettext is always going to use a built-in iconv.
USE_BUILTIN.gettext=    no

PKG_RCD_SCRIPTS=        yes

PKG_OPTIONS.irssi=      perl inet6
PKG_OPTIONS.mplayer=    oss

DSPAM_STORAGE_DRIVER=   mysql
PKG_OPTIONS.dspam+=     graphs
MYSQL_VERSION_DEFAULT=  50
PHP_VERSION_DEFAULT=    52
PKG_OPTIONS.php=        -cgi fastcgi

PKG_OPTIONS.rtorrent=           xmlrpc

UPDATE_TARGET=package-install
DEPENDS_TARGET=         bulk-install
BATCH=                  yes

ACCEPTABLE_LICENSES+= socks5-license
ACCEPTABLE_LICENSES+= sendmail-license
ACCEPTABLE_LICENSES+= openmotif-license
ACCEPTABLE_LICENSES+= idea-license

PKG_OPTIONS.dovecot=    ssl ldap dovecot-sieve dovecot-managesieve
PKG_OPTIONS.nagios-nrpe = ssl tcpwrappers

PKGCHK_CONF?=   /usr/pkgsrc/pkgchk.conf
BULK_PREREQ+=   converters/libiconv
#
# Parse pkgchk.conf and supply list of packages for the bulk build framework.
#
.if defined(SPECIFIC_PKGS)
PKGLIST!=               awk '{print $$1}' ${PKGCHK_CONF}
.  for _pkg_ in ${PKGLIST}
HOST_SPECIFIC_PKGS+=    ${_pkg_}
.  endfor
.endif

.endif # BSD_PKG_MK
</pre>
<p>À noter, donc, les particularités suivantes:</p>
<ul>
<li>Xorg modular pour les dépendances relatives à X11</li>
<li>libiconv en provenance de pkgsrc, il est impératif de faire de même pour gettext</li>
<li>irssi est compilé avec le support perl et IPv6</li>
<li><i>storage</i> MySQL pour dspam</li>
<li>MySQL 5.0</li>
<li>PHP 5.2</li>
<li>Options <i>ssl ldap dovecot-sieve et dovecot-managesieve</i> pour dovecot</li>
<li>Options <i>ssl et tcpwrappers</i> pour nagios-nrpe</li>
<li>On ajoute libiconv comme pré-requis pour la construction <i>bulk</i></li>
</ul>
<p>J&#8217;utilise, pour générer tout ce petit monde, l&#8217;<strong>excellent</strong> script du sieur orgrim, disponible <a href="http://orgrim.net/post/2011/08/19/Bulk-build-partiel-de-pkgsrc">ici, avec sa note explicative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/10/30/aiguille-fil-trou-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkgin (probably not weekly) news 3</title>
		<link>http://imil.net/wp/2011/10/29/pkgin-probably-not-weekly-news-3/</link>
		<comments>http://imil.net/wp/2011/10/29/pkgin-probably-not-weekly-news-3/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 14:46:21 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=645</guid>
		<description><![CDATA[I&#8217;ve just commited 0.5.2.1. As the version shows, it is a bugfix release; is@ got a very nasty bug that took me a while to figure out. For 3 years, the only pkg_summary(5) format I&#8217;ve seen was:

PKGNAME=foo
[...]

or, in case of conflicting packages:

CONFLICTS=bar
CONFLICTS=baz
PKGNAME=foo
[...]

Well it turns out that we can also find:

PKGNAME=foo
CONFLICTS=bar
[...]

which is pretty annoying when it [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just commited 0.5.2.1. As the version shows, it is a bugfix release; is@ got a very nasty bug that took me a while to figure out. For 3 years, the only <a href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_summary+5+NetBSD-current">pkg_summary(5)</a> format I&#8217;ve seen was:</p>
<pre>
PKGNAME=foo
[...]
</pre>
<p>or, in case of conflicting packages:</p>
<pre>
CONFLICTS=bar
CONFLICTS=baz
PKGNAME=foo
[...]
</pre>
<p>Well it turns out that we can also find:</p>
<pre>
PKGNAME=foo
CONFLICTS=bar
[...]
</pre>
<p>which is pretty annoying when it comes to stick to an anchor. Until now, I did the following:</p>
<pre>
static int
chk_pkgname(char *field)
{
        if (strncmp(field, "PKGNAME=", 8) == 0 ||
                strncmp(field, "CONFLICTS=", 10) == 0)
                return 1;

        return 0;
}
[...]
                /* browse entries following PKGNAME and build the SQL query */
                while (*psum != NULL &#038;&#038; !chk_pkgname(*psum)) {
                        update_col(sum, pkgid, *psum);
                        psum++;
                }
</pre>
<p>But with that new case, I had to check a little bit further:</p>
<pre>
static int
chk_pkgname(char *field, char *last_field)
{
	if (strncmp(field, "PKGNAME=", 8) == 0)
		return 1;
	/* in some very rare cases, CONFLICTS appears *after* PKGNAME */
	if (strncmp(last_field, "PKGNAME=", 8) != 0 &#038;&#038;
		/* never seen many CONFLICTS after PKGNAME, but just in case... */
		strncmp(last_field, "CONFLICTS=", 10) != 0 &#038;&#038;
		strncmp(field, "CONFLICTS=", 10) == 0)
		return 1;

	return 0;
}
[...]
		/* browse entries following PKGNAME and build the SQL query */
		while (*psum != NULL &#038;&#038; !chk_pkgname(*psum, *(psum - 1))) {
			update_col(sum, pkgid, *psum);
			psum++;
		}
</pre>
<p>I really don&#8217;t like the way it&#8217;s done but I&#8217;ve no sexier way in mind at the moment. Maybe after some glasses of wine&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/10/29/pkgin-probably-not-weekly-news-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkgin 0.5.1 released</title>
		<link>http://imil.net/wp/2011/10/16/pkgin-0-5-1-released/</link>
		<comments>http://imil.net/wp/2011/10/16/pkgin-0-5-1-released/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 10:15:56 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/2011/10/16/pkgin-0-5-1-released/</guid>
		<description><![CDATA[Finally, here comes a release ! Read the full announcement and changelog on pkgsrc-users.

]]></description>
			<content:encoded><![CDATA[<p>Finally, here comes a release ! Read the full announcement and changelog on <a href="http://mail-index.netbsd.org/pkgsrc-users/2011/10/16/msg015198.html">pkgsrc-users</a>.</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/10/16/pkgin-0-5-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pkgin (probably not weekly) news</title>
		<link>http://imil.net/wp/2011/09/28/pkgin-probably-not-weekly-news/</link>
		<comments>http://imil.net/wp/2011/09/28/pkgin-probably-not-weekly-news/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 21:10:05 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[DragonFlyBSD]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=634</guid>
		<description><![CDATA[Foreword: this post will be written in english as many pkgin users don&#8217;t speak french. Sorry to my french readers then, and sorry also to my english readers as i&#8217;m not as fluent in english as i am in french :)
I subscribed to jmmv&#8217;s blog, The Julipedia, a while ago and found his idea of [...]]]></description>
			<content:encoded><![CDATA[<p><i>Foreword: this post will be written in english as many <code>pkgin</code> users don&#8217;t speak french. Sorry to my french readers then, and sorry also to my english readers as i&#8217;m not as fluent in english as i am in french :)</i></p>
<p>I subscribed to jmmv&#8217;s blog, <a href="http://blog.julipedia.org/">The Julipedia</a>, a while ago and found his idea of the <a href="http://blog.julipedia.org/2011/09/kyua-weekly-status-report_26.html">&#8220;Kyua: Weekly status report&#8221;</a> very inspiring, that&#8217;s a good way to keep your users informed on how the project is moving and keeps you focused on your TODO (although i hate TODO&#8217;s&#8230;). I doubt i&#8217;ll have the time to write a weekly report, but at last i&#8217;ll try to write a post whenever important updates are made to <a href="http://pkgin.net/">my beloved project</a>.</p>
<p>So let&#8217;s begin !<br />
As you, pkgin users, may be aware of, i&#8217;m working on the future 0.5 release, which includes massive internal changes plus some features that have been asked and i found interesting. So, in addition to the features i already listed in <a href="http://mail-index.netbsd.org/pkgsrc-users/2011/08/29/msg014870.html">this mail</a> sent to <i>pkgsrc-users@</i>, here are some hilights on recent changes:</p>
<ul>
<li>pkgin now has a <a href="http://imil.net/gfx/pkgin-logo-new.png">new logo</a> !</li>
<li>it is now possible to export / import your keep-list, pretty much like <code>dpkg</code>&#8216;s <code>get/set-selection</code>. The exported list is in <code>pkg_chk</code>&#8216;s format. Thanks wiz@ for the idea</li>
<li>pkgin install can now take a &#8220;blob&#8221; as an argument, i.e. <code>pkgin in 'mysql-server&lt;5.5'</code>, thanks filip@ for the idea</li>
<li>pkgin now uses pkgsrc&#8217;s <code>pkg_install</code> for NetBSD also</li>
<li>added the <code>-t</code> modifier, mostly for debugging purposes, in order to trace the dependency tree and impact lists</li>
<li><code>pkg_install</code> error logs are handled in a nicer way</li>
<li>enlisted pkgin&#8217;s code to <a href="http://www.ohloh.net/p/pkgin">ohloh</a> (click on &#8220;i use this&#8221; !)</li>
<li>plus usual bugfixes</li>
</ul>
<p>Yeah, these were fairly productive holidays :) Of course most of these changes are only available in CVS, see http://pkgin.net for details. Some of them have already made their way to <a href="http://pkgsrc-wip.sourceforge.net/">pkgsrc-wip</a>, i try not to insert big changes now, so wip and CVS should be sync&#8217;ed quite often.</p>
<p>Needs to be done:</p>
<ul>
<li>make pkgin&#8217;s pkgsrc <strong>package</strong> depend on pkgsrc&#8217;s <code>pkg_install</code></li>
<li>reproduce and fix 2 different bugs two users had</li>
<li>optimize the dependency loop regarding packages that exists in many versions (i.e. bash)</li>
<li>check if <code>pkg_install</code> is to be upgraded and then push it on top of ordered list</li>
<li>test Minix 3.2.0</li>
</ul>
<p>Hope i&#8217;ll make it to <i>pkgsrc 2011Q4</i> !</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/09/28/pkgin-probably-not-weekly-news/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Un logo en carton</title>
		<link>http://imil.net/wp/2011/09/05/un-logo-en-carton/</link>
		<comments>http://imil.net/wp/2011/09/05/un-logo-en-carton/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 18:23:33 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Gimp]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=626</guid>
		<description><![CDATA[J&#8217;aime aussi les vacances parce qu&#8217;elles me donnent des idées, et ce matin, alors que j&#8217;attendais que la piscine se réchauffe, j&#8217;ai pondu ça:

]]></description>
			<content:encoded><![CDATA[<p>J&#8217;aime aussi les vacances parce qu&#8217;elles me donnent des idées, et ce matin, alors que j&#8217;attendais que la piscine se réchauffe, j&#8217;ai pondu ça:<br />
<a href="http://imil.net/gfx/pkgin-logo-new.png"><img src="/gfx/pkgin-logo-new.png" width="450"/></a></p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/09/05/un-logo-en-carton/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>pkgin 0.5, faster pussycat kill kill</title>
		<link>http://imil.net/wp/2011/08/29/pkgin-0-5-faster-pussycat-kill-kill/</link>
		<comments>http://imil.net/wp/2011/08/29/pkgin-0-5-faster-pussycat-kill-kill/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 10:25:58 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>

		<guid isPermaLink="false">http://imil.net/wp/2011/08/29/pkgin-0-5-faster-pussycat-kill-kill/</guid>
		<description><![CDATA[Avant de partir me dorer la pilule à la maison, je vous jette en pâture une toute nouvelle pre-release de pkgin, j&#8217;ai nommé 0.5.0.
Fruit des conseils avisés du sieur Bapt, fort de son experience avec son fâmeux pkgng, ainsi que des multiples feedbacks d&#8217;horizons très differents, le code de pkgin 0.5.0 est plus rapide, plus [...]]]></description>
			<content:encoded><![CDATA[<p>Avant de partir <a href="http://en.wikipedia.org/wiki/Marbella">me dorer la pilule</a> à <a href="http://en.wikipedia.org/wiki/Andalusia">la maison</a>, je vous jette en pâture une toute nouvelle <a href="http://pkgsrc-wip.cvs.sourceforge.net/viewvc/pkgsrc-wip/wip/pkgin/">pre-release de pkgin</a>, j&#8217;ai nommé 0.5.0.</p>
<p>Fruit des conseils avisés du sieur <a href="http://blog.etoilebsd.net/">Bapt</a>, fort de son experience avec son fâmeux <a href="http://wiki.freebsd.org/pkgng">pkgng</a>, ainsi que des multiples <i>feedbacks</i> d&#8217;horizons très differents, le code de pkgin 0.5.0 est plus rapide, plus simple et embarque un certain nombre de <i>features requests</i>.</p>
<p>Dans l&#8217;ordre d&#8217;implémentation:</p>
<ul>
<li>Migration silencieuse d&#8217;une base 0.4 vers 0.5</li>
<li>Fonction check_yesno() plus souple</li>
<li>&#8220;Yes&#8221; par defaut pour pkgin install / remove / upgrade</li>
<li>Une unique structure pour toutes les formes de listes de packages</li>
<li>Nettoyage de dizaines de calculs de listes inutiles (perfs x10)</li>
<li>Introduction du champs FULLPKGNAME, accélération des recherches</li>
<li>unique_pkg(): plus de &#8220;many versions of foo available&#8221;, le plus récent est toujours choisi</li>
<li>Import du progressmeter d&#8217;OpenSSH</li>
</ul>
<p>Cette version restera en gestation dans <a href="http://pkgsrc-wip.cvs.sourceforge.net/viewvc/pkgsrc-wip/wip/pkgin/">wip</a> le temps qu&#8217;elle soit correctement testée, les changements sont nombreux et profonds, je dois m&#8217;assurer que tout fonctionne comme il se doit.<br />
Vous l&#8217;aurez compris, il faut tester, TESTER, <strong>TESTER</strong> !<br />
Je vous invite à rapporter les problèmes potentiels sur la liste de developpement de pkgin, à pkgin-devel-at-lists-point-sourceforge-point-net.</p>
<p><a href="http://imil.net/gfx/pkgin_upgrade.png"><img src="/gfx/pkgin_upgrade.png" width="450" alt="pkgin upgrade"/></a></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/08/29/pkgin-0-5-faster-pussycat-kill-kill/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leeeeeeeet the sun shiiiiiiiiiine</title>
		<link>http://imil.net/wp/2011/03/14/leeeeeeeet-the-sun-shiiiiiiiiiine/</link>
		<comments>http://imil.net/wp/2011/03/14/leeeeeeeet-the-sun-shiiiiiiiiiine/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 08:27:41 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Illumos]]></category>
		<category><![CDATA[pkgin]]></category>
		<category><![CDATA[pkgsrc]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://imil.net/wp/2011/03/14/leeeeeeeet-the-sun-shiiiiiiiiiine/</guid>
		<description><![CDATA[En fevrier dernier, je vous parlais d&#8217;Illumos, incubateur libre permettant à OpenIndiana de garder l&#8217;haleine fraiche et le teint pétillant.
Les choses ont pas mal évolué depuis, en particulier, je me suis un chouillat impliqué dans le projet visant à intégrer parfaitement pkgsrc à Illumos.
De discussions en reflexions, j&#8217;en suis venu à me demander s&#8217;il ne [...]]]></description>
			<content:encoded><![CDATA[<p>En fevrier dernier, je vous <a href="http://www.gcu-squad.org/2011/02/gcuitter-montre-moi-ton-cote-sombre/">parlais d&#8217;Illumos</a>, incubateur libre permettant à <a href="http://openindiana.org/">OpenIndiana</a> de garder l&#8217;haleine fraiche et le teint pétillant.</p>
<p>Les choses ont pas mal évolué depuis, en particulier, je me suis un chouillat <a href="http://www.illumos.org/projects/worsoe">impliqué</a> dans le projet visant à intégrer parfaitement <a href="http://www.netbsd.org/docs/software/packages.html">pkgsrc</a> à Illumos.</p>
<p>De discussions en reflexions, j&#8217;en suis venu à me demander s&#8217;il ne serait pas judicieux de monter un repository de binaires <i>pkgsrc</i> pour OpenIndiana/Illumos/Solaris puisque cette plateforme est finalement parfaitement supportée depuis des lustres mais qu&#8217;aucun repo digne de ce nom n&#8217;a été maintenu plus de 2 mois. (et puis evidemment, il faut bien un <a href="http://pkgin.net/">package manager</a> pour gêrer tous ces binaires hin hin hin&#8230;)<br />
Ainsi, Mads Worsøe Duun, l&#8217;initiateur du projet pkgsrc pour Illumos, a demandé aux gentils administrateurs du projet OpenIndiana (ouais, faut suivre) de nous mettre à disposition une buildbox afin de proposer des packages à jour, et bien plus de logiciels que n&#8217;en proposent <a href="http://www.blastwave.org/">Blastwave</a> ou les repos <a href="http://hub.opensolaris.org/bin/view/Project+pkg/WebHome">IPS/pkg</a> d&#8217;<a href="http://pkg.opensolaris.org/release/en/index.shtml">OpenSolaris</a> (*ricane* *ricane*).</p>
<p>Ce qui est réellement à notre disposition ici, c&#8217;est une <a href="http://en.wikipedia.org/wiki/Solaris_Containers">Zone</a>, or, dans la plupart des documentations <a href="http://www.perkin.org.uk/blog/2009/09/pkgsrc-on-solaris/">sur ce sujet</a> (pkgsrc et Solaris), la méthode préférée, c&#8217;est de justement créer une zone pour faire son <a href="http://www.netbsd.org/docs/pkgsrc/bulk.html">bulk build</a>, mais comme ne nous pouvons pas créer de zone dans une zone (<a href="http://knowyourmeme.com/memes/xzibit-yo-dawg">YO DAWG</a>), il faudra procéder autrement, et c&#8217;est la raison même de cet article.</p>
<p>Comme l&#8217;explique la documentation officielle, il serait parfaitement inconscient de réaliser son <i>bulk build</i> sur une arborescence opérationnelle, en effet, sur les 10000 packages disponibles, une quantité non négligeable d&#8217;entre eux vont ajouter des utilisateurs, des groupes, des repertoires, des logs, des modules, des librairies etc etc etc. Il vous faut une <a href="http://en.wikipedia.org/wiki/Sandbox_(computer_security)">sandbox</a>. Fort heureusement, la &#8220;création&#8221; d&#8217;une sandbox Solaris est d&#8217;une grande simplicité.</p>
<p>Je vous livre ici les differentes étapes que vous pourrez bien entendu concaténer dans un joli petit script.</p>
<p>On déclare tout d&#8217;abord la localisation du bac à sable sur le <i>filesystem</i>, puis on s&#8217;y rend :</p>
<pre>SANDBOX="/export/home/pkgsrc/sandbox"
cd ${SANDBOX}</pre>
<p>Là, nous créons tous les répertoires nécessaires au bon fonctionnement du <i>chroot</i>, <code>/tmp</code> possède evidemment des droits particuliers :</p>
<pre>mkdir -p bin sbin usr lib etc tmp dev opt var/run proc
chmod 777 tmp; chmod +t tmp</pre>
<p>On peuple un peu <code>/etc</code> de fichiers indispensables :</p>
<pre>cp /etc/passwd etc/
cp /etc/group etc/
cp /etc/shadow etc/
cp /etc/nsswitch.conf etc/
cp /etc/vfstab etc/
cp /etc/resolv.conf etc/
cp /etc/hosts etc/
cp /etc/netconfig etc/
cp /etc/datemsk etc/
cp /etc/user_attr etc/
cp /etc/auto_home etc/
cp /etc/project etc/
cp -r /etc/skel /etc/

chmod 400 etc/shadow</pre>
<p>Enfin, point de copie de fichiers inutiles, nous <i>mountons</i> en <i>loopback</i> les repertoires <code>/dev</code> et <code>/proc</code> en lecture et écriture, puis <code>bin sbin usr lib</code> en lecture seule afin de ne pas faire de bêtises.</p>
<pre>
for rwfs in proc dev
do
        mount -F lofs /${rwfs} ${SANDBOX}/${rwfs}
done

for rofs in bin sbin usr lib
do
        mount -F lofs -o ro /${rofs} ${SANDBOX}/${rofs}
done
</pre>
<p>C&#8217;est prêt !</p>
<pre>
imil@pkgsrc:~$ pfexec chroot pkgsrc/sandbox /usr/bin/bash
bash-4.0#
</pre>
<p>Afin de pouvoir correctement compiler l&#8217;ensemble des paquets de pkgsrc, vous aurez également besoin d&#8217;installer les logiciels suivants à l&#8217;aide de la commande <code>pkg install</code> : <code>SUNWgcc, gnu-patch, gnu-tar, system/xopen/xcu4, gnu-grep, developer/object-file</code>.</p>
<p>Enfin, voici les particularités de mon <code>mk.conf</code>, à ajouter aux directives du <i>mk.conf chrooté</i> grace au <i>bootstrap</i> et son drapeau <code>--mk-fragment</code> :</p>
<pre>
PKGSRC_COMPILER=                ccache gcc

ACCEPTABLE_LICENSES+=           vim-license
ACCEPTABLE_LICENSES+=           sendmail-license

FAILOVER_FETCH=                 yes
ALLOW_VULNERABLE_PACKAGES=      yes
PKG_DEVELOPER=                  yes

MAKE_JOBS=              16

PASSIVE_FETCH=          1

X11_TYPE=               native
X11BASE=                /usr/X11
</pre>
<p>Ainsi que la commande complète de <i>bootstrap</i> :</p>
<pre>
./bootstrap --workdir=/tmp/pkgsrc --prefix=/opt/ipp/pkg --abi=32 --mk-fragment=mk-fragment.conf
</pre>
<p>Happy building.<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/03/14/leeeeeeeet-the-sun-shiiiiiiiiiine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: imil.net @ 2012-05-22 23:42:47 by W3 Total Cache -->
