435 行
44 KiB
XML
435 行
44 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
|
||
<id>gemini://technicalsuwako.moe</id>
|
||
<title>テクニカル諏訪子</title>
|
||
|
||
<updated>2024-04-16T00:00:00Z</updated>
|
||
|
||
<author><name>テクニカル諏訪子</name></author>
|
||
<link href="gemini://technicalsuwako.moe" rel="alternate"></link>
|
||
|
||
|
||
|
||
<entry>
|
||
<id>blog/c-static-link.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【C言語】静的リンクする方法</title>
|
||
<published>2024-04-16T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="c言語"></category>
|
||
|
||
<category term="c++"></category>
|
||
|
||
<category term="openbsd"></category>
|
||
|
||
<category term="freebsd"></category>
|
||
|
||
<category term="netbsd"></category>
|
||
|
||
<category term="linux"></category>
|
||
|
||
<category term="プログラミング"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/c-static-link.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<h2 id="heading">注意点</h2>
|
||
<p>もし貴方のLinuxディストリビューションがglibcライブラリを使用している場合、この投稿は恐らく動作しません。<br />
|
||
muslを使用したLinuxディストリビューションか、BSD OSをご検討下さい。<br />
|
||
muslを使用した人気のあるLinuxディストリビューションには、Void Linux、Gentoo、Alpine Linuxがあります。</p>
|
||
<h2 id="c">C言語でのソフトを静的リンクは可能!?</h2>
|
||
<p>はい、可能です。<br />
|
||
前述の通り、glibcでは恐らく不可能です。<br />
|
||
しかし、muslを使用したLinuxディストリビューションで静的リンクを行うと、glibcを使用したLinuxディストリビューションでも実行出来るという事です。<br />
|
||
必要なのは、リンクする全てのライブラリの 「.a」 バージョンです。<br />
|
||
コンパイルするコマンドは、動的リンクとは非常に異なる見た目になります。<br />
|
||
例として、自分の「sp」を取り上げましょう。</p>
|
||
<p>動的リンクでは、コマンドは次の様になります:</p>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>cc -L/usr/local/lib -I/usr/local/include -o sp *.c -lgpgme -lassuan
|
||
</span></span></code></pre><p>しかし、静的リンクでは、このコマンドは次の様になります(OpenBSDの場合):</p>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>cc -L/usr/local/lib -I/usr/local/include -o sp *.c -static -lgpgme -lcrypto -lc -lassuan -lgpg-error -lthr -lintl
|
||
</span></span></code></pre><h2 id="heading-1">必要なライブラリを受取方</h2>
|
||
<p>どのライブラリをリンクする必要があるかを知るには、まず動的リンクされたバイナリをコンパイルする必要があります。<br />
|
||
その後、<code lang="">ldd</code> コマンドを使用して必要なライブラリを調べる事が出来ます。</p>
|
||
<h3 id="openbsd">OpenBSD</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>sp:
|
||
</span></span><span style="display:flex;"><span> Start End Type Open Ref GrpRef Name
|
||
</span></span><span style="display:flex;"><span> 00000664e28c2000 00000664e28cd000 exe <span style="color:#666">1</span> <span style="color:#666">0</span> <span style="color:#666">0</span> sp
|
||
</span></span><span style="display:flex;"><span> 000006678e2b6000 000006678e317000 rlib <span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">0</span> /usr/local/lib/libgpgme.so.24.2
|
||
</span></span><span style="display:flex;"><span> 00000666f3610000 00000666f3824000 rlib <span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">0</span> /usr/lib/libcrypto.so.53.0
|
||
</span></span><span style="display:flex;"><span> 000006672dfe7000 000006672e0de000 rlib <span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">0</span> /usr/lib/libc.so.99.0
|
||
</span></span><span style="display:flex;"><span> 000006670aadd000 000006670aaf5000 rlib <span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">0</span> /usr/local/lib/libassuan.so.2.1
|
||
</span></span><span style="display:flex;"><span> 000006670b08d000 000006670b0b7000 rlib <span style="color:#666">0</span> <span style="color:#666">2</span> <span style="color:#666">0</span> /usr/local/lib/libgpg-error.so.3.26
|
||
</span></span><span style="display:flex;"><span> 0000066744e3e000 0000066744e62000 rlib <span style="color:#666">0</span> <span style="color:#666">3</span> <span style="color:#666">0</span> /usr/local/lib/libintl.so.8.0
|
||
</span></span><span style="display:flex;"><span> <span style="color:#666">0000066705496000</span> 00000667055a8000 rlib <span style="color:#666">0</span> <span style="color:#666">4</span> <span style="color:#666">0</span> /usr/local/lib/libiconv.so.7.1
|
||
</span></span><span style="display:flex;"><span> 00000667c6522000 00000667c6522000 ld.so <span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">0</span> /usr/libexec/ld.so
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB shared object, x86-64, version <span style="color:#666">1</span>
|
||
</span></span></code></pre><h3 id="freebsd">FreeBSD</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>./sp:
|
||
</span></span><span style="display:flex;"><span> libgpgme.so.43 <span style="color:#666">=</span>&gt; /usr/local/lib/libgpgme.so.43 <span style="color:#666">(</span>0x15272fd71000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libcrypto.so.30 <span style="color:#666">=</span>&gt; /lib/libcrypto.so.30 <span style="color:#666">(</span>0x15272e58e000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libc.so.7 <span style="color:#666">=</span>&gt; /lib/libc.so.7 <span style="color:#666">(</span>0x15273063b000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libassuan.so.8 <span style="color:#666">=</span>&gt; /usr/local/lib/libassuan.so.8 <span style="color:#666">(</span>0x15272ee04000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libgpg-error.so.0 <span style="color:#666">=</span>&gt; /usr/local/lib/libgpg-error.so.0 <span style="color:#666">(</span>0x152731580000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libthr.so.3 <span style="color:#666">=</span>&gt; /lib/libthr.so.3 <span style="color:#666">(</span>0x1527317bb000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libintl.so.8 <span style="color:#666">=</span>&gt; /usr/local/lib/libintl.so.8 <span style="color:#666">(</span>0x15273205b000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span>vdso<span style="color:#666">]</span> <span style="color:#666">(</span>0x15272e207000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB executable, x86-64, version <span style="color:#666">1</span> <span style="color:#666">(</span>FreeBSD<span style="color:#666">)</span>, dynamically linked, interpreter /libexec/ld-elf.so.1, <span style="color:#a2f;font-weight:bold">for</span> FreeBSD 14.0 <span style="color:#666">(</span>1400097<span style="color:#666">)</span>, FreeBSD-style, stripped
|
||
</span></span></code></pre><h3 id="netbsd">NetBSD</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ <span style="color:#a2f">export</span> <span style="color:#b8860b">LD_LIBRARY_PATH</span><span style="color:#666">=</span>/usr/pkg/lib:<span style="color:#b8860b">$LD_LIBRARY_PATH</span>
|
||
</span></span><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>./sp:
|
||
</span></span><span style="display:flex;"><span> -lgpgme.11 <span style="color:#666">=</span>&gt; /usr/pkg/lib/libgpgme.so.11
|
||
</span></span><span style="display:flex;"><span> -lassuan.0 <span style="color:#666">=</span>&gt; /usr/pkg/lib/libassuan.so.0
|
||
</span></span><span style="display:flex;"><span> -lgpg-error.0 <span style="color:#666">=</span>&gt; /usr/pkg/lib/libgpg-error.so.0
|
||
</span></span><span style="display:flex;"><span> -lintl.1 <span style="color:#666">=</span>&gt; /usr/lib/libintl.so.1
|
||
</span></span><span style="display:flex;"><span> -lc.12 <span style="color:#666">=</span>&gt; /usr/lib/libc.so.12
|
||
</span></span><span style="display:flex;"><span> -lcrypto.15 <span style="color:#666">=</span>&gt; /usr/lib/libcrypto.so.15
|
||
</span></span><span style="display:flex;"><span> -lcrypt.1 <span style="color:#666">=</span>&gt; /lib/libcrypt.so.1
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB executable, x86-64, version <span style="color:#666">1</span> <span style="color:#666">(</span>SYSV<span style="color:#666">)</span>, dynamically linked, interpreter /usr/libexec/ld.elf_so, <span style="color:#a2f;font-weight:bold">for</span> NetBSD 10.0, stripped
|
||
</span></span></code></pre><h3 id="void-linux">Void Linux</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span> /lib/ld-musl-x86_64.so.1 <span style="color:#666">(</span>0x7f7689c5a000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libgpgme.so.11 <span style="color:#666">=</span>&gt; /lib/libgpgme.so.11 <span style="color:#666">(</span>0x7f7689bfb000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libcrypto.so.3 <span style="color:#666">=</span>&gt; /lib/libcrypto.so.3 <span style="color:#666">(</span>0x7f7689600000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libc.so <span style="color:#666">=</span>&gt; /lib/ld-musl-x86_64.so.1 <span style="color:#666">(</span>0x7f7689c5a000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libassuan.so.0 <span style="color:#666">=</span>&gt; /lib/libassuan.so.0 <span style="color:#666">(</span>0x7f7689be6000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span> libgpg-error.so.0 <span style="color:#666">=</span>&gt; /lib/libgpg-error.so.0 <span style="color:#666">(</span>0x7f7689bbe000<span style="color:#666">)</span>
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB pie executable, x86-64, version <span style="color:#666">1</span> <span style="color:#666">(</span>SYSV<span style="color:#666">)</span>, dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, BuildID<span style="color:#666">[</span>sha1<span style="color:#666">]=()</span>, stripped
|
||
</span></span></code></pre><h2 id="heading-2">必要なライブラリをインストールする方法</h2>
|
||
<p>OpenBSDとNetBSDでは、リポジトリからgpgmeのみをインストールすると、必要な全ての「.a」ファイルが既に入手出来ます。<br />
|
||
流石ね、OppaiBSDとNyuuBSD!</p>
|
||
<p>FreeBSDとVoid Linuxでは、libassuan.a と libgpgme.a のみが不足しています。<br />
|
||
特にVoid Linuxでは、libgpg-error.a も不足しています。</p>
|
||
<p>しかし、ソースからコンパイルすれば簡単に取得出来るという事です。<br />
|
||
それではやってみましょう!<br />
|
||
手順はFreeBSDとVoid Linuxの両方で有効ですので、コマンドは1度だけ提供します。</p>
|
||
<h3 id="libgpgme-error">libgpgme-error</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>wget https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.48.tar.gz
|
||
</span></span><span style="display:flex;"><span>tar zxfv libgpg-error-1.48.tar.gz
|
||
</span></span><span style="display:flex;"><span><span style="color:#a2f">cd</span> libgpg-error-1.48
|
||
</span></span><span style="display:flex;"><span>./configure --enable-static
|
||
</span></span><span style="display:flex;"><span>make
|
||
</span></span><span style="display:flex;"><span>doas make install
|
||
</span></span></code></pre><p>Void Linuxのみ:</p>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>doas mv /usr/local/lib/libgpg-error.a /usr/lib
|
||
</span></span><span style="display:flex;"><span>doas mv /usr/local/lib/libgpg-error.la /usr/lib
|
||
</span></span></code></pre><h3 id="libassuan">libassuan</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>wget https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.5.7.tar.bz2
|
||
</span></span><span style="display:flex;"><span>bsdtar -xvf libassuan-2.5.7.tar.bz2
|
||
</span></span><span style="display:flex;"><span><span style="color:#a2f">cd</span> libassuan-2.5.7
|
||
</span></span><span style="display:flex;"><span>./configure --enable-static
|
||
</span></span><span style="display:flex;"><span>make
|
||
</span></span><span style="display:flex;"><span>doas make install
|
||
</span></span></code></pre><p>Void Linuxのみ:</p>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>doas mv /usr/local/lib/libassuan.a /usr/lib
|
||
</span></span><span style="display:flex;"><span>doas mv /usr/local/lib/libassuan.la /usr/lib
|
||
</span></span></code></pre><h3 id="libgpgme">libgpgme</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>wget https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-1.23.2.tar.bz2
|
||
</span></span><span style="display:flex;"><span>bsdtar -xvf gpgme-1.23.2.tar.bz2
|
||
</span></span><span style="display:flex;"><span>cd gpgme-1.23.2
|
||
</span></span><span style="display:flex;"><span>./autogen.sh
|
||
</span></span><span style="display:flex;"><span>mkdir build &amp;&amp; cd build
|
||
</span></span><span style="display:flex;"><span>../configure --enable-maintainer-mode --enable-static
|
||
</span></span><span style="display:flex;"><span>make
|
||
</span></span><span style="display:flex;"><span>doas make install
|
||
</span></span></code></pre><p>Void Linuxのみ:</p>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>doas mv /usr/local/lib/libgpgme.a /usr/lib
|
||
</span></span><span style="display:flex;"><span>doas mv /usr/local/lib/libgpgme.la /usr/lib
|
||
</span></span><span style="display:flex;"><span>doas mv /usr/local/lib/libgpgmepp.a /usr/lib
|
||
</span></span><span style="display:flex;"><span>doas mv /usr/local/lib/libgpgmepp.la /usr/lib
|
||
</span></span></code></pre><p>必要な全ての「.a」ファイルを取得したら、この投稿の冒頭で提供したコマンドを使用してコンパイルを開始出来ます。</p>
|
||
<h2 id="heading-3">結果</h2>
|
||
<h3 id="openbsd-1">OpenBSD</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>./sp:
|
||
</span></span><span style="display:flex;"><span> Start End Type Open Ref GrpRef Name
|
||
</span></span><span style="display:flex;"><span> 00000a9c31dc9000 00000a9c32131000 dlib <span style="color:#666">1</span> <span style="color:#666">0</span> <span style="color:#666">0</span> /home/suwako/dev/finish/sp/sp
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB shared object, x86-64, version <span style="color:#666">1</span>
|
||
</span></span></code></pre><h3 id="freebsd-1">FreeBSD</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>ldd: ./sp: not a dynamic ELF executable
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB executable, x86-64, version <span style="color:#666">1</span> <span style="color:#666">(</span>FreeBSD<span style="color:#666">)</span>, statically linked, <span style="color:#a2f;font-weight:bold">for</span> FreeBSD 14.0 <span style="color:#666">(</span>1400097<span style="color:#666">)</span>, FreeBSD-style, stripped
|
||
</span></span></code></pre><h3 id="netbsd-1">NetBSD</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ <span style="color:#a2f">export</span> <span style="color:#b8860b">LD_LIBRARY_PATH</span><span style="color:#666">=</span>/usr/pkg/lib:<span style="color:#b8860b">$LD_LIBRARY_PATH</span>
|
||
</span></span><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>ldd: /home/suwako/dev/finish/sp/./sp-: invalid ELF class 2; expected <span style="color:#666">1</span>
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB executable, x86-64, version <span style="color:#666">1</span> <span style="color:#666">(</span>SYSV<span style="color:#666">)</span>, statically linked, <span style="color:#a2f;font-weight:bold">for</span> NetBSD 10.0, stripped
|
||
</span></span></code></pre><h3 id="void-linux-1">Void Linux</h3>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ ldd ./sp
|
||
</span></span><span style="display:flex;"><span>ldd: ./sp: Not a valid dynamic program
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ file ./sp
|
||
</span></span><span style="display:flex;"><span>./sp: ELF 64-bit LSB executable, x86-64, version <span style="color:#666">1</span> <span style="color:#666">(</span>SYSV<span style="color:#666">)</span>, statically linked, BuildID<span style="color:#666">[</span>sha1<span style="color:#666">]=()</span>, stripped
|
||
</span></span></code></pre><h2 id="heading-4">ファイルサイズが大き過ぎ!!</h2>
|
||
<p>静的リンクを行うと、必要な全てのコードがバイナリに含まれる為、再コンパイルする必要なしに異なるコンピュータに単一のバイナリをコピー出来ます。<br />
|
||
その為、バイナリのサイズは、動的リンクされたバイナリよりもかなり大きくなります。<br />
|
||
動的リンクされたバイナリはシステム上のどこかにある「.so」ファイルを指すだけであり、システム間で異なる可能性があり、更に使用されているバージョンが異なる可能性がある為、バイナリは全く移植性がありません。<br />
|
||
ローリングリリースのLinuxディストリビューションを使用している方は、ある時点で自分のプログラムが突然機能しなくなった経験があるかもしれません。<br />
|
||
これは、「.so」ファイルが新しいバージョンに更新された為に発生しますが、プログラム自体は未だ同じバイナリです。<br />
|
||
これがあたしが静的リンクを好む理由です!</p>
|
||
<p>但し、コンパイル後に単純に <code lang="">strip</code> コマンドを使用する事で、バイナリサイズを大幅に削減できます。<br />
|
||
警告に気にしないで下さい。<br />
|
||
これはGNUの開発者の問題です(彼らはlibassuanとgpgmeを作成しました)。<br />
|
||
あたしの「sp」プログラムは100%のコードが正しいです。</p>
|
||
<pre style="background-color:#f8f8f8;; overflow-x: auto"><code lang=""><span style="display:flex;"><span>$ cc -Wall -Wextra -O3 -I/usr/local/include -L/usr/local/lib -o sp *.c -static -lgpgme -lcrypto -lc -lassuan -lgpg-error -lintl -liconv
|
||
</span></span><span style="display:flex;"><span>engine-assuan.c<span style="color:#666">(</span>engine-assuan.o:<span style="color:#666">(</span>llass_set_engine_flags<span style="color:#666">)</span> in archive /usr/local/lib/libgpgme.a<span style="color:#666">)</span>: warning: strcpy<span style="color:#666">()</span> is almost always misused, please use strlcpy<span style="color:#666">()</span>
|
||
</span></span><span style="display:flex;"><span>stringutils.c:107<span style="color:#666">(</span>libgpg_error_la-stringutils.o:<span style="color:#666">(</span>_gpgrt_vfnameconcat<span style="color:#666">)</span> in archive /usr/local/lib/libgpg-error.a<span style="color:#666">)</span>: warning: stpcpy<span style="color:#666">()</span> is dangerous; <span style="color:#a2f;font-weight:bold">do</span> not use it
|
||
</span></span><span style="display:flex;"><span>estream-printf.c:1114<span style="color:#666">(</span>libgpg_error_la-estream-printf.o:<span style="color:#666">(</span>do_format<span style="color:#666">)</span> in archive /usr/local/lib/libgpg-error.a<span style="color:#666">)</span>: warning: sprintf<span style="color:#666">()</span> is often misused, please use snprintf<span style="color:#666">()</span>
|
||
</span></span><span style="display:flex;"><span>assuan-handler.c<span style="color:#666">(</span>libassuan_la-assuan-handler.o:<span style="color:#666">(</span>assuan_write_status<span style="color:#666">)</span> in archive /usr/local/lib/libassuan.a<span style="color:#666">)</span>: warning: strcat<span style="color:#666">()</span> is almost always misused, please use strlcat<span style="color:#666">()</span>
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ ls -thal sp
|
||
</span></span><span style="display:flex;"><span>-rwxr-xr-x <span style="color:#666">1</span> suwako suwako 8.9M Apr <span style="color:#666">16</span> 14:37 sp
|
||
</span></span><span style="display:flex;"><span>
|
||
</span></span><span style="display:flex;"><span>$ strip sp
|
||
</span></span><span style="display:flex;"><span>$ ls -thal sp
|
||
</span></span><span style="display:flex;"><span>-rwxr-xr-x <span style="color:#666">1</span> suwako suwako 3.4M Apr <span style="color:#666">16</span> 14:39 sp
|
||
</span></span></code></pre><p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/hozonsite-130.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【076】保存サイト 1.3.0登場</title>
|
||
<published>2024-04-10T12:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="ウエブ開発"></category>
|
||
|
||
<category term="076"></category>
|
||
|
||
<category term="hozonsite"></category>
|
||
|
||
<category term="保存サイト"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/hozonsite-130.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<p>保存サイト は1.3.0にバージョンアップしました!!</p>
|
||
<h2 id="heading">保存サイトって何?</h2>
|
||
<p>世界初FOSS系ウエブアーカイバーです。</p>
|
||
<h2 id="heading-1">変更</h2>
|
||
<ul>
|
||
<li>BSD2clause→ISCライセンスに変更</li>
|
||
<li>変なエンコーディングの変換</li>
|
||
</ul>
|
||
<h2 id="heading-2">ソースコード</h2>
|
||
<p><a href="https://gitler.moe/suwako/hozonsite">Gitler</a></p>
|
||
<h2 id="heading-3">公式インスタンス</h2>
|
||
<p><a href="https://hozon.site/">https://hozon.site/</a></p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/digital-autonomy-linux-to-openbsd.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【デジタル自主】LinuxからOpenBSDに乗り換えた理由</title>
|
||
<published>2024-04-10T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="デジタル自主"></category>
|
||
|
||
<category term="linux"></category>
|
||
|
||
<category term="bsd"></category>
|
||
|
||
<category term="netbsd"></category>
|
||
|
||
<category term="openbsd"></category>
|
||
|
||
<category term="freebsd"></category>
|
||
|
||
<category term="openindiana"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/digital-autonomy-linux-to-openbsd.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<p>あたしのGit履歴を見たならば、GNU MakeをBSD Makeに徐々に置き換え、GPLv2を2条項BSDライセンスに置き換え、益々OpenBSDサポートを優先している事に気付いたかもしん。<br />
|
||
これは、最早Linuxを使用していない為で、今ではOpenBSDを使用しています。<br />
|
||
Steamでゲームをやる為にCRUXを搭載したSSDを未だ持っていますが、ゲームをやらない場合はOpenBSDを使用します。<br />
|
||
そして、Linuxであたしのソフトウェアが動作するかどうかをテストする為にThinkPad X200sにCRUXを持ち続きます。</p>
|
||
<h2 id="linux">Linuxを辞めた理由</h2>
|
||
<p>今日、Linuxはかつての物ではありません。<br />
|
||
そして、全ての変化は悪い方向に進んでいます。</p>
|
||
<p>Linuxの精神は、開発者による開発者の為のシステムであるという事でした。<br />
|
||
今では、精神的に不安定な人々(LGBT)による精神的に病んだ人々(LGBTQ)の為のシステムになったと感じます。<br />
|
||
過去10年間、XorgからGaylandへのオプション、そしてGaylandが必須になり、最終的には全ての人に強制されるまでになりました。<br />
|
||
過去10年間、ALSAからJACK、JACK2、PulseAudio、Pipewireへと移り、更に別のオーディオドライバが開発されていると確信していますが、これらのドライバは全て互いに機能する必要があります。<br />
|
||
過去10年間、systemd、Docker、Flatpak、Snap、PAM等の壊滅的な重いソフトを使用せずにLinuxを使用する事が益々難しくなっています。<br />
|
||
Linuxカーネルには現在、Cが不十分なかの様に、Rustコンパイラが組み込まれています。<br />
|
||
Linuxカーネルはあまりにも膨大になり過ぎており、2023年4月には45分でコンパイルされ、同じモジュールを備えて2024年4月には3時間かかりました。<br />
|
||
Linuxカーネルにはコードラインが多過ぎる為、10年前よりもセキュリティの脆弱性、バグ、又はその他の問題を隠すのが簡単になっています。<br />
|
||
Cloudflare、Red Hat、Intel、AMD、Google、特にMicrosoft等の大手企業が、Linuxに益々影響を与えており、誰もがその影響を受けています。<br />
|
||
Linus Torvaldsさんはカーネルのバグを非常によく知っており、修正を拒否し、修正するとユーザーランドが壊れる為、貴方を侮辱する事さえあります。<br />
|
||
GTKとQt、そしてそれぞれGnomeとKDEは、作業が非常に面倒になってしまったため、対処するのが非常に困難になりました。<br />
|
||
Gnomeはユーザーが望まない事を全て行い、KDEは現在、使用出来ない程膨張しています。</p>
|
||
<p>そして、あたしがコミュニティでこれらの問題を持ち出す度に、「これが未来だ」「私達は永遠に過去にとどまる事は出来ないぞ」「しょうがないね」「全ての変化は良い」と言われます。<br />
|
||
うーん&hellip;<br />
|
||
まあ、問題を修正する事が出来ないのであれば、代わりにUnixの本物の世界が選択肢です。<br />
|
||
今日、Unixには僅かな選択肢しかありません。<br />
|
||
FreeBSD、OpenBSD、NetBSD、Dragonfly BSD、OpenIndiana、macOS、IBM AIX、UnixWare、及びHP UXがあります。<br />
|
||
従って、あたしはそれらを4ヶ月間実験し、そして最も好きな物を選ぶ事にしました。</p>
|
||
<h2 id="openbsd">OpenBSDに乗り換えた理由</h2>
|
||
<p>LinuxからOpenBSDに変更しようと考える前に、あたしは既に1年半程OpenBSDを殆どのサーバーで実行していたので、それには既に慣れていました。<br />
|
||
OpenBSDは非常に馴染みがあり、デフォルトで非常に安全で、非常に安定しており、非常に開発者志向で、非常に保守的であり、全てが常に動作します。<br />
|
||
メーリングリストを読む事は出来ませんが、OpenBSDは常に悪いアイデアを拒否すると聞いていますし、他のBSDとは異なり、OpenBSDの開発者は実際に自分達のハードウェアでOpenBSDを使用していると聞いています。<br />
|
||
開発者達は自分達の為にOpenBSDを作っており、それは076で持っている考え方と同じです。<br />
|
||
何故なら、あたし達は自分達の為にソフトを作り、他から悪いアイデアを取り入れないからです。<br />
|
||
OpenBSDが持っているツールが本当に好きで、CRUXはOpenBSDのミニマリズムと非常に似ているので、変更は非常にスムーズでした。</p>
|
||
<p>そうして、可愛いは正義で、パフィーさんは可愛いだわー!<br />
|
||
<img src="https://ass.technicalsuwako.moe/oppaibsd-neofetch.png" alt="" /></p>
|
||
<h2 id="freebsdnetbsd">何故FreeBSDかNetBSDに乗り換えない?</h2>
|
||
<p>PeerTubeサーバーやMatrixサーバー、NASでは既にFreeBSDを使用しており、非常にうまく機能しています。<br />
|
||
しかし、デスクトップとしてはFreeBSDはあまり良くありません。<br />
|
||
バグが多過ぎる、AMD Radeon上のXorgの問題、メモリー使用量の統計が非常に奇妙、時々2番目のモニターが認識されなくなる、pkgがパッケージを更新する度にFcitx5を削除し続ける為、毎回Fcitx5を再インストールする必要があります。<br />
|
||
等、更に問題があります。<br />
|
||
最初にメインデスクトップにFreeBSDをインストールしましたが、LinuxulatorでSteamを実行出来ると聞いていましたが、結局の所、AMD Radeon GPUがある場合はLinuxulatorが全く機能しない為、ゲームをやりたい場合は引き続きLinuxに戻る必要があります。<br />
|
||
FreeBSDは別のSSDにインストールされており、ソフトウェアをテストする為にThinkPad L420にもインストールされています。</p>
|
||
<p>NetBSDについては、ThinkPad X250にインストールしましたが、結構良いです。<br />
|
||
ZSHに問題があり、時々pkginが正常に機能せず、SSL証明書が見つからないと言われる事がありますが、それ以外はNetBSDは本当に良いです。<br />
|
||
しかし、あたしはOpenBSDに決めました。<br />
|
||
それにはもっと馴染んでおり、安定しています。<br />
|
||
また、NetBSDではWiFiが機能しない様ですので、イーサネットを使用する必要があります。<br />
|
||
但し、このノートではソフトのテストに引き続きNetBSDを使用します。</p>
|
||
<h2 id="dragonfly-bsd">何故Dragonfly BSDに乗り換えない?</h2>
|
||
<p>起動出来なかったのですから。</p>
|
||
<h2 id="openindiana">何故OpenIndianaに乗り換えない?</h2>
|
||
<p>それが非常に遅いからです!<br />
|
||
ThinkPad X250にOpenIndianaをインストールしましたが、新しくインストールされたOSでパッケージを更新するだけでも5時間かかりました。<br />
|
||
光回線を使用しています。<br />
|
||
それだけでも受け入れがたいです!</p>
|
||
<h2 id="macos">何故macOSに乗り換えない?</h2>
|
||
<p>Appleが嫌いだからです。<br />
|
||
9年前に購入したMacBook Proに初めてmacOSをインストールしました(それまではLinuxでした)が、あたしはUnixが大好きなので。<br />
|
||
しかし、あたしにとっては、スマホの様なUIのFreeBSDの様に感じました。<br />
|
||
そして、macOSには非常に多くの迷惑があり、あたしはそれを使用出来ません。</p>
|
||
<h2 id="hp-uxibm-aixunixware">何故HP UX、IBM AIX、UnixWareに乗り換えない?</h2>
|
||
<p>対応しているハードと金がありません。<br />
|
||
そして殆どの人がそれを使用していませんので、それに切り替える事は意味がありません。</p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/hozonsite-120.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【076】保存サイト 1.2.0登場</title>
|
||
<published>2024-04-08T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="ウエブ開発"></category>
|
||
|
||
<category term="076"></category>
|
||
|
||
<category term="hozonsite"></category>
|
||
|
||
<category term="保存サイト"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/hozonsite-120.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<p>保存サイト は1.2.0にバージョンアップしました!!</p>
|
||
<h2 id="heading">保存サイトって何?</h2>
|
||
<p>世界初FOSS系ウエブアーカイバーです。</p>
|
||
<h2 id="heading-1">変更</h2>
|
||
<ul>
|
||
<li>静的ファイルの修正</li>
|
||
<li>新しいルールに従い</li>
|
||
<li>GNU MakeからBSD Makeに変更</li>
|
||
<li>GPLv2→BSD2clouseライセンスに変更</li>
|
||
</ul>
|
||
<h2 id="heading-2">ソースコード</h2>
|
||
<p><a href="https://gitler.moe/suwako/hozonsite">Gitler</a></p>
|
||
<h2 id="heading-3">公式インスタンス</h2>
|
||
<p><a href="https://hozon.site/">https://hozon.site/</a></p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/mivfx-040.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【076】mivfx 0.4.0登場</title>
|
||
<published>2024-04-07T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="ウエブ開発"></category>
|
||
|
||
<category term="076"></category>
|
||
|
||
<category term="mivfx"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/mivfx-040.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<h2 id="mivfx">mivfxって何?</h2>
|
||
<p>mivfxはミニマリストな画像ビューアーです。</p>
|
||
<h2 id="heading">変更</h2>
|
||
<ul>
|
||
<li>URLから画像ファイルを開ける様に</li>
|
||
<li>GPLv2→BSD2clouseライセンスに変更</li>
|
||
<li>画面アスペクト比ロック</li>
|
||
</ul>
|
||
<h2 id="heading-1">ソースコード</h2>
|
||
<p><a href="https://gitler.moe/suwako/mivfx">Gitler</a></p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
|
||
</feed>
|