<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>およそMECEでないアカシックレコードの200那由多飛んで3万分の1</title>
  <id>https://blog.eniehack.net/</id>
  <author>
    <name>Nakaya</name>
    <uri>https://blog.eniehack.net/</uri>
  </author>
  <generator>Hugo gohugo.io</generator>
  <rights>2020 eniehack.
Assets and articles not otherwise specified are licensed under &lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;CC BY 4.0&lt;/a&gt;.
Source code is licensed under by &lt;a href=&#34;https://apache.org/licenses/LICENSE-2.0.txt&#34;&gt;Apache-2.0&lt;/a&gt;.
</rights>
  <updated>2024-03-16T09:04:42Z</updated>
  <link rel="self" type="application/atom+xml" href="https://blog.eniehack.net/tags/archlinux/atom.xml" hreflang="ja"/>
  <link rel="alternate" type="text/html" href="https://blog.eniehack.net/tags/archlinux/" hreflang="ja"/>
  <entry>
    <title>xfce4 ではデフォルトで ssh-agent を自動起動するらしい</title>
    <author>
      <name></name>
      <uri></uri>
    </author>
    <id>https://blog.eniehack.net/articles/2023/03/13/autostart-ssh-agent-on-xfce4/</id>
    <updated>2023-03-13T04:54:15Z</updated>
    <published>2023-03-13T04:57:37Z</published>
    <content type="html">&lt;h2 id=&#34;tl-dr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;xfce4 では、デフォルトで ssh-agent を自動起動する設定になっているので、設定エディタや Terminal から無効化する必要がある。
Terminal から実行する場合は以下のように実行する:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt; xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;経緯&#34;&gt;経緯&lt;/h2&gt;
&lt;p&gt;最近は gpg に日常を大きく依存する日々を送っている。というのも、pgp 鍵はかなり便利であるからだ。&lt;/p&gt;
&lt;p&gt;例えば以下のものが挙げられる:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;password manager の &lt;a href=&#34;https://www.passwordstore.org/&#34;&gt;pass&lt;/a&gt; で master password として使う&lt;/li&gt;
&lt;li&gt;副鍵に Authentication の権限を持たせて SSH 鍵として使う&lt;/li&gt;
&lt;li&gt;pgp 鍵の notation 機能を使って &lt;a href=&#34;https://keyoxide.org/&#34;&gt;Keyoxide&lt;/a&gt; で keybase もどきをする&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;本題&#34;&gt;本題&lt;/h2&gt;
&lt;p&gt;これほど gpg に頼って生活を送っていると、毎回 gpg のパスワードを入力するのがバカらしくなってくる。&lt;/p&gt;
&lt;p&gt;ここで、Linux 環境の gpg に備えられている gpg-agent が登場する。これを使えば、ssh-agent のように SSH でサーバにアクセスする際、鍵の passphrase を要求される回数が大きく減ってうれしい。&lt;/p&gt;
&lt;p&gt;しかし、ここ数日、ArtixLinux の FS が壊れたので、 PC に ArchLinux をインストールして、久々の xfce4 を楽しんでいた。&lt;/p&gt;
&lt;p&gt;もちろん、gpg-agent は QoL に関わる大事なものなのでセットアップを試みようとするも、立ち上げた記憶のない ssh-agent が毎ログインのたびに起動してくる。&lt;/p&gt;
&lt;p&gt;悪く言えば ssh-agent をジャックする gpg-agent は、ssh-agent が後に起動してしまうと、例え gpg-agent が立ち上がったとしても利用することができない。&lt;/p&gt;
&lt;p&gt;このままだとつらいね、ということで、数日間悪戦苦闘して直したので、数日の供養として、解決しなかった手法、した手法をそれぞれ述べていこうと思う。&lt;/p&gt;
&lt;h2 id=&#34;この記事の対象&#34;&gt;この記事の対象&lt;/h2&gt;
&lt;p&gt;signin するだけで gnome-keyring の Default keyring が開く、であったり、signin すると pgp 鍵が開く、といった gnome-keyring と gpg-agent の環境構築は、対象としない。これに関しては ArchWiki の &lt;a href=&#34;https://wiki.archlinux.org/title/GNOME/Keyring&#34;&gt;gnome-keyring&lt;/a&gt; と &lt;a href=&#34;https://wiki.archlinux.org/title/GnuPG#gpg-agent&#34;&gt;gpg&lt;/a&gt; のページを見るほうが手っ取り早い。&lt;/p&gt;
&lt;p&gt;代わりに、この記事は、xfce4 において、勝手に ssh-agent が起動されてしまう問題の解決を提示する。&lt;/p&gt;
&lt;h2 id=&#34;解決しなかった&#34;&gt;解決しなかった&lt;/h2&gt;
&lt;h3 id=&#34;systemd-の-environment-dot-d-を使う&#34;&gt;systemd の environment.d を使う&lt;/h3&gt;
&lt;p&gt;ユーザのログイン時に systemd が参照する環境変数は.bashrc や.xinitrc と独立であるらしい。その環境変数をユーザが操作するには、  &lt;code&gt;~/.config/environment.d/*.conf&lt;/code&gt; を編集すればよいらしく&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;、実際に  &lt;code&gt;.xinitrc&lt;/code&gt; などの概念がない Wayland では利用されているらしい&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;p&gt;しかし、この手法では、解決しなかった。どうやら、このファイルには shellscript における  &lt;code&gt;unset&lt;/code&gt; が用意されておらず、構文エラーとなってしまった。&lt;/p&gt;
&lt;h3 id=&#34;systemd-の-environment-generator-を使う&#34;&gt;systemd の environment generator を使う&lt;/h3&gt;
&lt;p&gt;また、systemd には、先程の environment.d のファイルを生成するための機構がある &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;。ユーザごとの環境変数であれば、 &lt;code&gt;/etc/systemd/user-environment-generators/&lt;/code&gt; にプログラムを格納し、標準出力で environment.d 形式の要素を吐ければよいらしい。これは、言語は問われないので、shellscript である必要は全然なく、Python などで書いても問題ないらしい。&lt;/p&gt;
&lt;p&gt;こちらも解決はしなかった。そもそも、こちらにも shellscript における  &lt;code&gt;unset&lt;/code&gt; が用意されていないようだ。&lt;/p&gt;
&lt;h3 id=&#34;gnome-keyring-などの-systemd-user-unit-を無効化する&#34;&gt;gnome-keyring などの systemd user unit を無効化する&lt;/h3&gt;
&lt;p&gt;確かに &lt;code&gt;gcr-ssh-agent.service&lt;/code&gt; は無効化する意味があるのだが&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;、他の service ファイルや socket ファイルを無効化したところで ssh-agent を起動するものはないので、無効化したところで解決しないことは自明であった……。&lt;/p&gt;
&lt;h2 id=&#34;解決した&#34;&gt;解決した&lt;/h2&gt;
&lt;p&gt;なんと、xfce4 では ssh-agent と gpg-agent を自動起動する機能があるらしい&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;。なので、ssh-agent を無効化する:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt; xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ssh-agent を無効化するだけも問題ないのだが、私としては、gnome-keyring を使って gpg-agent を管理したいので、gpg-agent も無効化しておく:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt; xfconf-query -c xfce4-session -p /startup/gpg-agent/enabled -n -t bool -s false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを実行してから、ArchWiki の gpg と gnome-keyring のページにある記述を順番にこなせば、gpg-agent は動作するようになるハズである。&lt;/p&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://man.archlinux.org/man/environment.d.5&#34;&gt;https://man.archlinux.org/man/environment.d.5&lt;/a&gt; &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.jp/index.php/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#Wayland_.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.94.E3.81.A8&#34;&gt;https://wiki.archlinux.jp/index.php/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#Wayland_.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.94.E3.81.A8&lt;/a&gt; &lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://man.archlinux.org/man/systemd.environment-generator.7&#34;&gt;https://man.archlinux.org/man/systemd.environment-generator.7&lt;/a&gt; &lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.jp/index.php/GNOME/Keyring#.E3.82.AD.E3.83.BC.E3.83.AA.E3.83.B3.E3.82.B0_ssh_.E3.82.B3.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.8D.E3.83.B3.E3.83.88.E3.82.92.E6.9C.89.E5.8A.B9.E3.81.AB.E3.81.99.E3.82.8B&#34;&gt;https://wiki.archlinux.jp/index.php/GNOME/Keyring#.E3.82.AD.E3.83.BC.E3.83.AA.E3.83.B3.E3.82.B0_ssh_.E3.82.B3.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.8D.E3.83.B3.E3.83.88.E3.82.92.E6.9C.89.E5.8A.B9.E3.81.AB.E3.81.99.E3.82.8B&lt;/a&gt; &lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.xfce.org/xfce/xfce4-session/advanced&#34;&gt;https://docs.xfce.org/xfce/xfce4-session/advanced&lt;/a&gt; &lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>
  <entry>
    <title>Gemini Protocol のサーバ実装 gmid を ArchLinux にインストールする</title>
    <author>
      <name></name>
      <uri></uri>
    </author>
    <id>https://blog.eniehack.net/articles/2022/03/14/gmid-install-on-archlinux/</id>
    <updated>2022-03-15T12:03:11Z</updated>
    <published>2022-03-15T04:43:04Z</published>
    <content type="html">&lt;h2 id=&#34;おことわり&#34;&gt;おことわり&lt;/h2&gt;
&lt;p&gt;この記事では断りなく&lt;a href=&#34;https://mustache.github.io/&#34;&gt;mustache構文&lt;/a&gt;を用いることがある。注意されたい。&lt;/p&gt;
&lt;h2 id=&#34;gemini-protocol-とは&#34;&gt;Gemini Protocol とは&lt;/h2&gt;
&lt;h3 id=&#34;概要&#34;&gt;概要&lt;/h3&gt;
&lt;p&gt;今の WWW には、問題点があると考える。
広告やトラッキング、自動再生される動画などである。
特に広告とトラッキングに関しては、広告やトラッキングをブロックすることが、ブラウザの機能として取り込まれるまでになり、さらに、それらが欠かせないものとなってしまった。&lt;/p&gt;
&lt;p&gt;gemini は、そんなカオスな現代の WWW とは、対照的なプロトコルである。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gemini.circumlunar.space/docs/faq.gmi&#34;&gt;公式サイトの FAQ&lt;/a&gt; にある 「what is gemini?
」の章には、大体以下のことが書いてある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロトコルとしては、OSI 参照モデルにおけるアプリケーション層に該当する&lt;/li&gt;
&lt;li&gt;プロトコルに加え、軽量なハイパーテキストフォーマットを加えたもの&lt;/li&gt;
&lt;li&gt;Web を本来のあるべき姿に戻しつつ、 Gopher &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; を現代風に味付けしたもの。
&lt;ul&gt;
&lt;li&gt;URI、MIME type や TLS といった、標準化され、成熟している技術の上に成立している&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;シンプルさとプライバシーを念頭に置いている
&lt;ul&gt;
&lt;li&gt;拡張を困難にすることで、シンプルでプライバシーを確保することができる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;その他、Gemini の response は、 HTTP のように Header 部と Body 部に分かれている。
Header 部には status code や、その文書の言語などを記述する、などに用いられている。&lt;/p&gt;
&lt;p&gt;gemini に CSS や JavaScript に当たるものはない。CSS 的な装飾は Client に委ねられている。&lt;/p&gt;
&lt;h3 id=&#34;gemtext&#34;&gt;gemtext&lt;/h3&gt;
&lt;p&gt;先程の箇条書きにあった「軽量なハイパーテキストフォーマット」は gemtext(MIME: text/gemini、拡張子:gmi)と考えられる。&lt;/p&gt;
&lt;p&gt;これは Markdown をベースとした軽量マークアップ言語である。
gemini protocol で閲覧できるページのほとんどは、この gemtext で書かれている。
Markdown との大きな差異はリンクにある。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;Markdownではこのように文中に[リンク]()を挿入することができるが、
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code class=&#34;language-gemini&#34; data-lang=&#34;gemini&#34;&gt;gemtextではこのように

=&amp;gt; https://gemini.circumlunar.space リンク

は改行しなければならない。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;しかし、これは表現力を落としてでも、パースを簡単にしようとしているのではないかと考えている。&lt;/p&gt;
&lt;p&gt;また、gemtext には &lt;a href=&#34;https://tildegit.org/sloum/gemini-vim-syntax&#34;&gt;Vim&lt;/a&gt;、&lt;a href=&#34;https://git.carcosa.net/jmcbray/gemini.el&#34;&gt;Emacs&lt;/a&gt; や &lt;a href=&#34;https://github.com/yzzyx-network/nanorc/blob/master/gemini.nanorc&#34;&gt;nano&lt;/a&gt; など各エディタに syntax highlight が用意されている。&lt;/p&gt;
&lt;h3 id=&#34;client&#34;&gt;client&lt;/h3&gt;
&lt;p&gt;server に関しては後の章に譲るとして、ここでは client について紹介する。
client について紹介するのは、本筋ではないため、軽く紹介するに留める。
興味のある方は&lt;a href=&#34;https://gemini.circumlunar.space/software/&#34;&gt;公式サイトのページ&lt;/a&gt;、もしくは &lt;a href=&#34;https://github.com/kr1sp1n/awesome-gemini&#34;&gt;awesome-gemini&lt;/a&gt;を参照していただきたい。&lt;/p&gt;
&lt;p&gt;GUIは&lt;a href=&#34;https://gmi.skyjake.fi/lagrange/&#34;&gt;Lagrange&lt;/a&gt;、TUIは&lt;a href=&#34;https://github.com/makeworld-the-better-one/amfora&#34;&gt;Amfora&lt;/a&gt;が、おすすめと挙げられることが多いように感じられる。
ちなみに、Emacs には &lt;a href=&#34;https://thelambdalab.xyz/elpher/&#34;&gt;Elpher&lt;/a&gt; というクライアントが &lt;a href=&#34;https://melpa.org/#/elpher&#34;&gt;melpa&lt;/a&gt; から入手できる。&lt;/p&gt;
&lt;h2 id=&#34;gmid-を選んだ理由&#34;&gt;gmid を選んだ理由&lt;/h2&gt;
&lt;p&gt;gmid を選んだ理由として 2 つの譲れない点があった。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;eniehack.net は、友人とのカンパによって運用されているので、みんなで使えるようにしい&lt;/li&gt;
&lt;li&gt;すでに Nextcloud が運用されているマシンなので、ファイルシステムをひっ迫したくない&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これらから、要件として以下の基準を満たすものをサーバとして採用しようと考えた:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;per-user directory(例: &lt;a href=&#34;https://example.com/~username&#34;&gt;https://example.com/~username&lt;/a&gt;)がやりたい&lt;/li&gt;
&lt;li&gt;Go や Nim などのコンパイラを、サーバに導入せずに済む&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これらを満たしたものを&lt;a href=&#34;https://github.com/kr1sp1n/awesome-gemini&#34;&gt;awesome-gemini&lt;/a&gt;から検討した結果、gmid を使うこととした。&lt;/p&gt;
&lt;p&gt;他にも、Nim で作られた &lt;a href=&#34;https://github.com/ardek66/geminim&#34;&gt;geminim&lt;/a&gt; や、 &lt;code&gt;inetd&lt;/code&gt; などのスーパーサーバで動作する &lt;a href=&#34;https://tildegit.org/solene/vger&#34;&gt;vger&lt;/a&gt; などがある。
実装された言語でも、動作する形態でも、バリエーションが豊富なので、是非いろいろ見てほしい。&lt;/p&gt;
&lt;h2 id=&#34;gmid-のインストール&#34;&gt;gmid のインストール&lt;/h2&gt;
&lt;h3 id=&#34;aur-から&#34;&gt;AUR から&lt;/h3&gt;
&lt;p&gt;AUR から &lt;code&gt;gmid&lt;/code&gt; パッケージをインストールする。
ちなみに、 &lt;code&gt;gmid-bin&lt;/code&gt; や &lt;code&gt;gmid-git&lt;/code&gt; もある。&lt;/p&gt;
&lt;p&gt;2022/03/15 追記: systemd-sysusers の設定ファイルや systemd の service ファイルの修正が、AUR パッケージの更新により導入された&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;。
そのため、以下、訂正線の入った作業は行う必要がなくなった。
具体的には、AUR から gmid のインストールが完了したら、「gmid.conf の編集」から再開して問題ない。
2022/03/15 追記終わり&lt;/p&gt;
&lt;p&gt;&lt;del&gt;また、PKGBUILD を自分で修正したことがある、という上級者は、以下の作業によって &lt;code&gt;.service&lt;/code&gt; ファイルの編集、gmid ユーザの作成の各章を飛ばすことができる。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;1. &lt;code&gt;yay -G&lt;/code&gt; や &lt;code&gt;aur fetch&lt;/code&gt; などを用いて、 &lt;code&gt;PKGBUILD&lt;/code&gt; を入手&lt;/del&gt;
&lt;del&gt;2. 私の pastebin にある &lt;a href=&#34;https://pastebin.com/u/eniehack/1/LDUKRB9m&#34;&gt;3 つのファイル&lt;/a&gt;を curl などで入手し、 &lt;code&gt;PKGBUILD&lt;/code&gt; のあるディレクトリに入れる&lt;/del&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;$ curl -sSL -o gmid.sysusers https://pastebin.com/raw/U9fMpT37
$ curl -sSL -o gmid.service https://pastebin.com/raw/dKfDWpkz
$ curl -sSL -o PKGBUILD.diff https://pastebin.com/raw/MNt0Dcfy
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;del&gt;3. &lt;code&gt;PKGBUILD&lt;/code&gt; に patch を当てる&lt;/del&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;$ patch PKGBUILD{,.diff}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;del&gt;4. &lt;code&gt;makepkg&lt;/code&gt; や &lt;code&gt;aur build&lt;/code&gt; などを用いて、パッケージを作成し、インストール&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&#34;service-ファイルの編集&#34;&gt;service ファイルの編集&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;このパッケージは systemd の &lt;code&gt;.service&lt;/code&gt; もインストールされるのだが、2022/03/14 現在、そのままでは動作しないので&lt;/del&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;# systemctl edit gmid
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;del&gt;を実行して&lt;/del&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;[service]
ExecStart=
ExecStart=/usr/bin/gmid -f -c /etc/gmid.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;del&gt;と書き加える必要がある。&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&#34;gmid-ユーザの作成&#34;&gt;gmid ユーザの作成&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;公式ドキュメントでは gmid を実行するためのユーザを作成することを勧めているので作成する。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;ArchLinux には、system user を作成するためのツールが systemd によって用意されているので&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;、これを使う。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;gmid の upstream が、新しいリリースを出したら、AUR パッケージにも反映されるはずである。 &lt;code&gt;/usr/lib/sysusers.d/gmid.conf&lt;/code&gt; がなければ、curl で取得する &lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; 。&lt;/del&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;$ curl -sSL -o gmid.conf https://raw.githubusercontent.com/omar-polo/gmid/master/contrib/gmid.sysusers
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;del&gt;以下のコマンドを実行すれば作成できる:&lt;/del&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;# systemd-sysusers ./gmid.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;del&gt;念のために &lt;code&gt;/etc/passwd&lt;/code&gt; を見ておいてもいいかもしれない。&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&#34;gmid-dot-conf-の編集&#34;&gt;gmid.conf の編集&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://gmid.omarpolo.com/quickstart.html&#34;&gt;gmid公式ドキュメントのquickstart&lt;/a&gt;を参考に &lt;code&gt;gmid.conf&lt;/code&gt; を設定する。
ちなみに、gmid パッケージには &lt;code&gt;gmid.conf&lt;/code&gt; 向け syntax highlight 用の vim script も付属している。&lt;/p&gt;
&lt;p&gt;例えば、per-user directory を作りたい場合:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;server &amp;quot;{{FQDN}}&amp;quot; {
    cert &amp;quot;{{public key path}}&amp;quot;
    key &amp;quot;{{private key path}}&amp;quot;

    root &amp;quot;/usr/local/share/gmid/&amp;quot;

    location &amp;quot;/~*&amp;quot; {
        root &amp;quot;/usr/local/share/gmid&amp;quot;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;などとする。&lt;/p&gt;
&lt;p&gt;pacman が、 &lt;code&gt;/usr/local&lt;/code&gt;  以下に手を出すことは基本的にありえない&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;。
そのため、私はこのディレクトリにしたというだけである。
なので、location ディレクティブに記述する directory path は、都合に応じて適宜変更して問題はないはずである。&lt;/p&gt;
&lt;h3 id=&#34;gencert-の実行&#34;&gt;gencert の実行&lt;/h3&gt;
&lt;p&gt;理由はよくわからないのだが、Gemini を介して公開されているサーバは、自己署名証明書で TLS 通信を行っている。
そのため、gmid についてくる &lt;code&gt;gencert&lt;/code&gt; という Perl 製ヘルパースクリプトを実行する。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;# /usr/share/gmid/gencert {{FQDN}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;その後、 &lt;code&gt;gmid.conf&lt;/code&gt; に記述した場所へ公開鍵(拡張子: &lt;code&gt;.pem&lt;/code&gt; )、秘密鍵(拡張子: &lt;code&gt;.key&lt;/code&gt;)を移動する。
その際、秘密鍵を入れておくディレクトリは、必ず &lt;code&gt;chmod&lt;/code&gt; で 700 に設定しておくこと。&lt;/p&gt;
&lt;h3 id=&#34;firewall-の設定見直し&#34;&gt;firewall の設定見直し&lt;/h3&gt;
&lt;p&gt;最後に &lt;code&gt;ufw&lt;/code&gt; などの firewall の設定を変更する。
gemini protocol のデフォルトポートは 1965 であるので、以下を実行する:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;# ufw allow 1965
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;service-実行&#34;&gt;service 実行&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-shell-session&#34; data-lang=&#34;shell-session&#34;&gt;# systemctl start gmid
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;こぼれ話&#34;&gt;こぼれ話&lt;/h2&gt;
&lt;p&gt;gmid の upstream には以下が付属している:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;証明書管理用のヘルパスクリプト&lt;/li&gt;
&lt;li&gt;config ファイルを syntax highlight するための、vimscript&lt;/li&gt;
&lt;li&gt;systemd の service ファイル&lt;/li&gt;
&lt;li&gt;systemd-sysusers のための config ファイル&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;しかし、そのほとんどが AUR のパッケージではインストールされていなかった。
そのため、AUR に patch を送ったのは初めてのことだった。
すべてが取り入れられたわけではなかった。&lt;/p&gt;
&lt;p&gt;しかし、取り入れられなかった点は upstream へ Pull Request を投げたらどうかと言われたため、&lt;a href=&#34;https://github.com/omar-polo/gmid/pull/14&#34;&gt;PR&lt;/a&gt;を投げたところ、すんなり受け入れられてしまった。&lt;/p&gt;
&lt;p&gt;また、Gemini と同様、HTTP でも、いにしえの `&lt;a href=&#34;https://eniehack.net/~eniehack&#34;&gt;https://eniehack.net/~eniehack&lt;/a&gt;` のような URL で自己紹介を書いている。
そのため、gemtext から HTML へ変換するプログラムなどを用いて、gemtext から HTML が生成されると便利かもしれない。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gemini.circumlunar.space/&#34;&gt;Gemini Protocol公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;詳しくは&lt;a href=&#34;https://wiki.archlinux.jp/index.php/Gopher&#34;&gt;Archwiki&lt;/a&gt;、または&lt;a href=&#34;https://ja.wikipedia.org/wiki/Gopher&#34;&gt;Wikipedia&lt;/a&gt;を参照のこと。 &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://aur.archlinux.org/cgit/aur.git/commit/?h=gmid&amp;amp;id=8432689b101b93366fcb6a82259503a6f6a0396c&#34;&gt;https://aur.archlinux.org/cgit/aur.git/commit/?h=gmid&amp;amp;id=8432689b101b93366fcb6a82259503a6f6a0396c&lt;/a&gt; を参照。 &lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;systemd-sysusers。詳細は man page:&lt;a href=&#34;https://man.archlinux.org/man/systemd-sysusers.8&#34;&gt;systemd-sysusers(8)&lt;/a&gt;を参照。 &lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;2022/03/14 現在、まだリリースされていない。 &lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.jp/index.php/Arch%5F%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3#.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8.E3.82.A8.E3.83.81.E3.82.B1.E3.83.83.E3.83.88&#34;&gt;Arch パッケージガイドライン&lt;/a&gt;を参照。 &lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>
  <entry>
    <title>yayからaurutilsに移行してみる</title>
    <author>
      <name></name>
      <uri></uri>
    </author>
    <id>https://blog.eniehack.net/articles/2021/02/21/aurutils-introduction/</id>
    <updated>2021-02-21T13:41:40Z</updated>
    <published>2021-02-21T13:40:23Z</published>
    <content type="html">&lt;h2 id=&#34;motivation&#34;&gt;動機&lt;/h2&gt;
&lt;p&gt;AURヘルパーは今までyayを使っていて、何ら不自由はなかった。しかし、書籍『UNIXという考え方』やPOSIX原理主義に感銘を受けたというのが大きい。特に前者の書籍にあった「実行速度より可搬性」というのはかなり同意できた。&lt;/p&gt;
&lt;p&gt;shellscriptの良さはPOSIX準拠である環境であれば、確実に使える点だ。これはPerl、PythonやRubyにはない有利な点である。また、shellscriptは遅いと一般的には考えられているが、パイプなどを意識すれば、shellsciptは高速化可能であることも&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;、shellscriptのよい点だ。&lt;/p&gt;
&lt;p&gt;そのような思想に影響を受けたなか、bash製のaurutilsというAURヘルパーを発見し、私は使っていたyayからaurutilsへ移行してみることにした。&lt;/p&gt;
&lt;h2 id=&#34;target-readers&#34;&gt;対象読者&lt;/h2&gt;
&lt;p&gt;ArchLinux系のディストリビューションを使うユーザをこの記事は対象とする。ただし、その中でもTerminalに触れることに抵抗がなく、AURについて知っていることを前提として話を進めることとする。&lt;/p&gt;
&lt;h2 id=&#34;what-is-aurutils&#34;&gt;aurutilsとは&lt;/h2&gt;
&lt;p&gt;aurutilsとはbash製のAURヘルパである。&lt;/p&gt;
&lt;p&gt;AURヘルパにもgolang製のyay、nim製のpakkuなど、様々なものがある。しかし、それらとは異なり、このaurutilsはpacmanにあるcustom local repositoryという機能&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;を用いて、AURにあるパッケージをインストールする。&lt;/p&gt;
&lt;p&gt;具体的に、custom local repositoryを使わないyayと、使うaurutilsではどのように違うのか、比較してみる。
yayなどでは、以下のような動作をする。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AURからパッケージを取得&lt;/li&gt;
&lt;li&gt;依存関係の解決&lt;/li&gt;
&lt;li&gt;パッケージのインストールを行う。（ &lt;code&gt;makepkg -si&lt;/code&gt; ）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;しかし、aurutilsでは&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AURからパッケージを取得&lt;/li&gt;
&lt;li&gt;依存関係の解決&lt;/li&gt;
&lt;li&gt;ビルドでちらかった環境の整理&lt;/li&gt;
&lt;li&gt;所定の位置へアーカイブを配置する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;だけだ。インストールはaurutilsが行なわない。これは、公式リポジトリのパッケージのように、pacmanが行う。&lt;/p&gt;
&lt;h3 id=&#34;merit&#34;&gt;特徴&lt;/h3&gt;
&lt;p&gt;yay-binを使えば話は別だが、yayはgolangのコンパイラを導入しなければならない。しかし、aurutilsは幾つかのbashスクリプトと、幾つかのmanドキュメントで構成されており、パッケージサイズが小さい。実際に、パッケージアーカイブ( &lt;code&gt;pkg.tar.zst&lt;/code&gt; ）の状態で、yay-binは約8MB、aurutilsは約100KBである。
yayのほうが、依存するパッケージは少ないかもしれないが、aurutilsでは依存するパッケージの1つ1つが、小さい。&lt;/p&gt;
&lt;p&gt;加えて、aurutilsに関してはpaccacheも設定なしにcustomリポジトリに適用できた。しかし、 &lt;code&gt;makepkg.conf&lt;/code&gt; に &lt;code&gt;PKGDEST=/path/to/yay/cache&lt;/code&gt; のように設定し、 &lt;code&gt;paccache -c /path/to/yay/cache&lt;/code&gt; のように実行すれば、yayでも実行できる。しかし設定せずとも、paccacheが使える点では、yayより有利かもしれない。&lt;/p&gt;
&lt;p&gt;ちなみに、paccacheは&lt;a href=&#34;https://archlinux.org/packages/community/x86%5F64/pacman-contrib/&#34;&gt;pacman-contrib&lt;/a&gt;パッケージにあるコマンドだ。localにあるのパッケージアーカイブを、デフォルトで最新の3つのみを残して、それ以外を削除することができる。&lt;/p&gt;
&lt;p&gt;ただ、aurutilsは &lt;code&gt;yay -Ss&lt;/code&gt; のような、AURと公式リポジトリを横断的に探索する機能がない、という不便な部分もある。&lt;/p&gt;
&lt;p&gt;これらの特徴を考えると、サーバや、HDDの小さいPCなど、ディスクをシビアに管理しなければならないような環境に向いているのかもしれない。&lt;/p&gt;
&lt;h3 id=&#34;aurutils-usage&#34;&gt;使い方&lt;/h3&gt;
&lt;p&gt;aurutilsはaurコマンドと、いくつかのサブコマンドで構成されている。サブコマンドの詳しい解説は &lt;code&gt;man 1 aur-sync&lt;/code&gt; のように、manコマンドからそれぞれ読むことができる。&lt;/p&gt;
&lt;h4 id=&#34;install&#34;&gt;install&lt;/h4&gt;
&lt;p&gt;AURからパッケージをインストールするときは、まず、 &lt;code&gt;aur sync $pkgname&lt;/code&gt; のようにパッケージをビルドし、配置する。次に、データベースを更新して（ &lt;code&gt;pacman -Syy&lt;/code&gt; ）、インストール（ &lt;code&gt;pacman -S $pkgname&lt;/code&gt; ）する。&lt;/p&gt;
&lt;h4 id=&#34;update&#34;&gt;update&lt;/h4&gt;
&lt;p&gt;aurutilsを用いてAURから取得したパッケージの更新は、 &lt;code&gt;aur sync -u&lt;/code&gt; を実行する。このコマンドによって、まず、パッケージの更新確認する。その結果から、更新がある場合はビルドしてcustomリポジトリへ配置する。&lt;/p&gt;
&lt;h4 id=&#34;search&#34;&gt;search&lt;/h4&gt;
&lt;p&gt;パッケージの検索は &lt;code&gt;aur search $pkgname&lt;/code&gt; のようにコマンドを実行する。&lt;/p&gt;
&lt;h4 id=&#34;その他&#34;&gt;その他&lt;/h4&gt;
&lt;p&gt;その他にもaurutilsは &lt;code&gt;aur&lt;/code&gt; コマンドのサブコマンドとして様々な機能を提供している。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aur build&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;パッケージをビルドする&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aur fetch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;パッケージを取得してくる&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;aur chroot
&lt;code&gt;systemd-nspawn&lt;/code&gt; を用いてパッケージをビルドする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;aur query&lt;/p&gt;
&lt;p&gt;aurwebへGETリクエストを送る&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;aur pkglist
AURにある全てのパッケージ名を取得する&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;install&#34;&gt;導入&lt;/h2&gt;
&lt;p&gt;ここからは、yayからaurutilsへ実際に移行してみることにする。&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;を参考にした。また、検証はしていないものの、yay以外の既存のAURヘルパーに関しても、パッケージアーカイブを移動し、 &lt;code&gt;repo-add&lt;/code&gt; コマンドでパッケージを登録すればよいと思われる。さらに、AURヘルパーを初めて導入する場合は、&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;とここを参考にすれば導入できるはずだ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pacman -Qqm &amp;gt; ~/aurpkglist&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;パッケージアーカイブを移動する&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gitlab.com/-/snippets/2076763&#34;&gt;yayからlocal repoへアーカイブ(pkg.tar.(xz|zst))を移動する自作scriptを書いた&lt;/a&gt;ので参考にどうぞ。&lt;/p&gt;
&lt;p&gt;ちなみに、私は &lt;code&gt;/etc/makepkg.conf&lt;/code&gt; の &lt;code&gt;PKGEXT&lt;/code&gt; を &lt;code&gt;&amp;quot;.pkg.tar.zst&amp;quot;&lt;/code&gt; にしている&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;。なぜなら、ZStandardは展開と圧縮がgzipより高速で、かつpacmanがデフォルトで用いている圧縮フォーマットだからだ。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pacman.confの編集&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作成するcustomリポジトリをpacmanへ認識させる。
&lt;code&gt;/etc/pacman.d/custom/&lt;/code&gt; へ 以下の内容を書きこみ、&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;[options]
CacheDir = /var/cache/pacman/pkg
CacheDir = /var/cache/pacman/custom
CleanMethod = KeepCurrent

[custom]
SigLevel = Optional TrustAll
Server = file:///var/cache/pacman/custom
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;/etc/pacman.conf&lt;/code&gt; の最後に &lt;code&gt;Include = /etc/pacman.d/custom/&lt;/code&gt; を追記する。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo install -d /var/cache/pacman/custom -o $USER&lt;/code&gt; でディレクトリを作成する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cd /var/cache/pacman/custom/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;repo-add custom.db.tar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;repo-add&lt;/code&gt; とはpacmanが提供する個人的なリポジトリを管理するコマンドだ。このコマンドでは、ワイルドカードでパッケージアーカイブを指定できる。ここではcustomリポジトリのデータベースを作成している。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;repo-add -n custom.db.tar *.pkg.tar.xz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ここではcustomリポジトリのデータベースにyayが作成したパッケージアーカイブを登録する。この作業は長いので、ここでティーブレイクをしてもいいだろう。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最後に &lt;code&gt;pacman -Syu&lt;/code&gt; をすれば完了だ。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;最後に&lt;/h2&gt;
&lt;p&gt;custom local repositoryを始めて知った。これを応用して、gemやpipのパッケージを管理するのはよさそうだ、と思った。&lt;/p&gt;
&lt;p&gt;最後に。添削に協力してくださった、skiaさん、trash_canさんありがとうございました。この場で感謝いたします。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公式GitHubリポジトリ: &lt;a href=&#34;https://github.com/AladW/aurutils&#34;&gt;AladW / aurutils - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;松浦 智之、大野 浩之、當仲 寛哲『ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング』&lt;a href=&#34;https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html&#34;&gt;https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html&lt;/a&gt;より。2021/02/20 閲覧。 &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.org/index.php/Pacman/Tips%5Fand%5Ftricks#Custom%5Flocal%5Frepository&#34;&gt;Pacman/Tips and tricks#Custom local repository - Archwiki&lt;/a&gt; &lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/geosharma/afe1ea9ebe58cb67aaaba62a0d47bc7a&#34;&gt;Arch Linux: aurutils installation and configuration - GitHub Gist&lt;/a&gt; &lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;詳細は &lt;code&gt;man 5 makepkg.conf&lt;/code&gt; もしくは &lt;a href=&#34;https://man.archlinux.org/man/makepkg.conf.5.en&#34;&gt;https://man.archlinux.org/man/makepkg.conf.5.en&lt;/a&gt;を参照のこと &lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>
</feed>
