Another Home Page Blog - Finkhttps://blog.anotherhomepage.org/2017-01-21T09:30:00+01:00pkgsrc : installer un gestionnaire de paquets pour plus de logiciels sur macOS2017-01-21T09:30:00+01:002017-01-21T09:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-01-21:/post/2017/01/21/pkgsrc-installer-un-gestionnaire-de-paquets-pour-plus-de-logiciels-sur-macos/<p><strong>Disclaimer</strong> : <em>mon installation de pkgsrc étant bien entendu faite depuis quelques temps, une partie de ce billet est écrite grâce aux documentations suivies à l'époque et un peu de mémoire, je n'ai pas pu tout re-tester. Si des passages sont erronés ou que vous éprouvez des difficultés, n'hésitez pas à …</em></p><p><strong>Disclaimer</strong> : <em>mon installation de pkgsrc étant bien entendu faite depuis quelques temps, une partie de ce billet est écrite grâce aux documentations suivies à l'époque et un peu de mémoire, je n'ai pas pu tout re-tester. Si des passages sont erronés ou que vous éprouvez des difficultés, n'hésitez pas à m'en faire part dans les commentaires, je corrigerai dès que possible.</em></p>
<p>L'une des forces de macOS (anciennement OSX, anciennement Mac OS X, Apple pourrait quand même arrêter sa frénésie de renommage) est sa base héritée d'Unix. Sans rentrer dans les détails, j'apprécie de pouvoir lancer un terminal et disposer d'un interpréteur de commandes (Bash) et de certains logiciels "classiques", comme Vim, wget, curl, sed ou awk. J'apprécie aussi de pouvoir installer certains logiciels très facilement via le terminal, ce qui est le cas sur un système GNU/Linux ou BSD. Bien que cela ne soit pas disponible pour macOS, plusieurs projets viennent combler ce manque :</p>
<ul>
<li><a href="https://www.macports.org/" title=""The">MacPorts</a>, anciennement DarwinPorts ;</li>
<li><a href="http://www.finkproject.org/" title="Fink">Fink</a> ;</li>
<li><a href="https://brew.sh/index_fr.html" title=""Le">Homebrew</a> ;</li>
<li>et enfin, <a href="http://pkgsrc.org/" title=""pkgsrc">pkgsrc</a>.</li>
</ul>
<p>J'ai par le passé utilisé MacPorts, mais aujourd'hui j'utilise pkgsrc. Les raisons qui m'ont fait passer de l'un à l'autre sont surtout liées à mes contributions au dernier : au-delà de la réutilisation de connaissances liées à NetBSD/pkgsrc, je peux aussi tester certains paquets pkgsrc sous macOS. Quelque chose que j'ai apprécié aussi est la disponibilité de paquets binaires pré-compilés grâce à <a href="https://pkgsrc.joyent.com" title=""Joyent">Joyent</a>, tout en conservant la possibilité de compiler soi-même de manière rapide et simple ces propres paquets.</p>
<h3>Installation de pkgsrc pour les paquets binaires</h3>
<p>L'installation de pkgsrc sur macOS est assez simple si on souhaite juste utiliser les paquets binaires, et un peu plus longue si on souhaite aussi compiler ses propres paquets, qu'on verra dans un second temps. Une manière plus rapide d'installer pkgsrc consiste à utiliser <a href="https://github.com/cmacrae/savemacos" title=""Save">Save mac OS</a>, un script shell de boostrap qui effectuera ces opérations pour vous. Néanmoins, il me semble pertinent de comprendre un peu le pourquoi des choses, et c'est l'objectif de cette partie.</p>
<p>Démarrons par le <em>bootstrap</em>, qui consiste à installer l'arborescence de base permettant d'obtenir les paquets binaires. Je pars ici du principe qu'on dispose d'une machine au moins sous 10.9. Si vous avez une version plus ancienne, suivez ce qui est indiqué pour 10.6 chez <a href="https://pkgsrc.joyent.com/install-on-osx/" title=""Install">Joyent</a>. On commence par télécharger l'archive contenant cette arborescence :</p>
<div class="highlight"><pre><span></span><code>BOOTSTRAP_TAR="bootstrap-trunk-x86_64-20161011.tar.gz"
curl -O https://pkgsrc.joyent.com/packages/Darwin/bootstrap/<span class="cp">${</span><span class="n">BOOTSTRAP_TAR</span><span class="cp">}</span>
</code></pre></div>
<p>Par principe, vérifions aussi que le téléchargement de pkgsrc s'est bien déroulé :</p>
<div class="highlight"><pre><span></span><code>BOOTSTRAP_SHA="09d6649027ce12cadf35a47fcc5ce1192f40e3b2"
echo "<span class="cp">${</span><span class="n">BOOTSTRAP_SHA</span><span class="cp">}</span> <span class="cp">${</span><span class="n">BOOTSTRAP_TAR</span><span class="cp">}</span>" >check-shasum
shasum -c check-shasum
</code></pre></div>
<p>Tant qu'on y est dans les vérifications, on peut s'occuper de la signature GPG, si celui-ci est installé (c'est optionnel, vous pouvez l'installer sur le site de <a href="https://gpgtools.org/" title="GPGTools">GPGTools</a>) :</p>
<div class="highlight"><pre><span></span><code>curl -O https://pkgsrc.joyent.com/packages/Darwin/bootstrap/<span class="cp">${</span><span class="n">BOOTSTRAP_TAR</span><span class="cp">}</span>.asc
gpg --recv-keys 0x1F32A9AD
gpg --verify <span class="cp">${</span><span class="n">BOOTSTRAP_TAR</span><span class="cp">}</span>{.asc,}
</code></pre></div>
<p>Passons à l'installation de pkgsrc à proprement parler, c'est maintenant qu'on a besoin de droits administrateur :</p>
<div class="highlight"><pre><span></span><code>sudo tar -zxpf <span class="cp">${</span><span class="n">BOOTSTRAP_TAR</span><span class="cp">}</span> -C /
</code></pre></div>
<p>Enfin, on prend en compte les chemins additionnels dans le \$PATH, car les paquets s'installent dans l'arborescence <em>/opt/pkg/</em> (les exécutables sont dans <em>/opt/pkg/bin</em> ou <em>/opt/pkg/sbin</em>) :</p>
<div class="highlight"><pre><span></span><code>eval $(/usr/libexec/path_helper)
</code></pre></div>
<p>Pour ce qui est des pages de manuel, on peut ajouter la ligne suivante dans son fichier <em>.profile</em> :</p>
<div class="highlight"><pre><span></span><code><span class="k">export</span><span class="w"> </span><span class="n">MANPATH</span><span class="o">=$</span><span class="n">MANPATH</span><span class="p">:</span><span class="o">/</span><span class="n">opt</span><span class="o">/</span><span class="n">pkg</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">man</span><span class="o">/</span><span class="w"></span>
</code></pre></div>
<p>Une fois que cela est fait, on peut vérifier que <em>pkgin</em> est bien installé, et mettre à jour la liste des paquets depuis le dépôt :</p>
<div class="highlight"><pre><span></span><code>sudo pkgin -f up
sudo pkgin fug
</code></pre></div>
<p>On peut alors utiliser <em>pkgin</em> pour lister, installer, mettre à jour ou désinstaller des logiciels. Attention, il est préférable de l'utiliser avec <em>sudo</em>, surtout pour les actions d'installation, de désinstallation ou de mise à jour.</p>
<h3>Installation de pkgsrc pour compiler depuis les sources</h3>
<p>La partie binaire mise en place, passons aux sources. Dans cette optique, il faut commencer par installer les <a href="https://developer.apple.com/download/more/?=command%20line%20tools" title=""Downloads">command-line tools de Xcode</a>. Cette partie peut nécessiter de créer un compte développeur chez Apple. L'installation se fait de la manière suivante :</p>
<div class="highlight"><pre><span></span><code>xcode-select --install
</code></pre></div>
<p>Bien qu'un miroir <a href="https://github.com/jsonn/pkgsrc" title=""Automatically">Github de pkgsrc</a> existe, nous allons préférer utiliser CVS pour récupérer l'arbre des paquets :</p>
<div class="highlight"><pre><span></span><code><span class="n">sudo</span><span class="w"> </span><span class="n">pkgin</span><span class="w"> </span><span class="o">-</span><span class="n">y</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">cvs</span><span class="w"></span>
<span class="n">cd</span><span class="w"> </span><span class="o">/</span><span class="n">opt</span><span class="w"></span>
<span class="n">sudo</span><span class="w"> </span><span class="n">mkdir</span><span class="w"> </span><span class="n">pkgsrc</span><span class="w"></span>
<span class="n">sudo</span><span class="w"> </span><span class="n">chown</span><span class="w"> </span><span class="err">$</span><span class="p">(</span><span class="n">whoami</span><span class="p">)</span><span class="err">:</span><span class="n">wheel</span><span class="w"> </span><span class="n">pkgsrc</span><span class="w"></span>
<span class="n">cvs</span><span class="w"> </span><span class="o">-</span><span class="n">danoncvs</span><span class="nv">@anoncvs</span><span class="p">.</span><span class="n">netbsd</span><span class="p">.</span><span class="nl">org</span><span class="p">:</span><span class="o">/</span><span class="n">cvsroot</span><span class="w"> </span><span class="n">checkout</span><span class="w"> </span><span class="n">pkgsrc</span><span class="w"></span>
</code></pre></div>
<p>Optionnellement, on peut ajouter <a href="http://pkgsrc.org/wip/" title="wip">pkgsrc-wip</a>, un arbre supplémentaire de paquets, qui permet entre autres aux débutants de se faire la main dans le domaine de l'empaquetage logiciel pour pkgsrc. Ici, pas besoin d'installer CVS, git est le gestionnaire de version de ce projet (et inclus de base dans macOS) :</p>
<div class="highlight"><pre><span></span><code>cd /opt/pkgsrc
git clone git://wip.pkgsrc.org/pkgsrc-wip.git wip
</code></pre></div>
<p>Pour mettre à jour les arborescences :</p>
<div class="highlight"><pre><span></span><code>cd /opt/pkgsrc
cvs update -dP
cd wip
git pull -r
</code></pre></div>
<p>Pour installer un paquet, par exemple <em>figlet</em>, on utilise la commande <em>bmake</em> (il s'agit du <em>bsd make</em>, disponible sous NetBSD directement via la commande <em>make</em>) :</p>
<div class="highlight"><pre><span></span><code>cd /opt/pkgsrc/misc/figlet
bmake install
</code></pre></div>
<p>On pourra ensuite faire le nettoyage dans l'arborescence via :</p>
<div class="highlight"><pre><span></span><code>bmake clean clean-depends
</code></pre></div>
<p>Avant de terminer, un petit mot sur le paramétrage du bootstrap et de son impact sur l'installation de logiciels via les sources : le boostrap de Joyent active la vérification par clé GPG des paquets binaires, afind de s'assurer de l'intégrité de ceux-ci. Or, cela peut perturber l'installation de paquets via les sources, car le paquet créé ne sera pas signé par Joyent. Il est possible de signer tous les paquets qu'on crée, mais cela peut devenir vite rébarbatif si le processus de compilation n'est pas automatisé. Dans le cas où l'installation d'un paquet par les sources échouerait, il est possible de modifier le niveau de confiance, en demandant de manière interactive si le paquet doit être installé ou non. Il suffit alors de positionner la variable <em>VERIFIED_INSTALLATION</em> à "trusted" dans le fichier <em>/opt/pkg/etc/pkg_install.conf</em>.</p>
<p>J'espère que ce billet aura plus et poussera plus d'utilisateurs de macOS à mieux maîtriser les possibilités de leur machine. Des remarques, des propositions d'améliorations ? Les commentaires sont là pour ça !</p>