<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://www.seirios.org/seirios/dokuwiki/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>ほほほのほ - tweet:2021</title>
        <description></description>
        <link>http://www.seirios.org/seirios/dokuwiki/</link>
        <lastBuildDate>Sat, 18 Apr 2026 22:48:46 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>http://www.seirios.org/seirios/dokuwiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>ほほほのほ</title>
            <link>http://www.seirios.org/seirios/dokuwiki/</link>
        </image>
        <item>
            <title>sshdでPublickeyをauthorized_keys以外から持ってくる</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0108_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;sshdでpublickeyをauthorized_keys以外から持ってくる&quot;&gt;sshdでPublickeyをauthorized_keys以外から持ってくる&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
ちょっと某所で sshd でのPublickey Authentication時のPublickeyを~/.ssh/authorized_keys以外から持ってくる設定について聞かれたので、ちょっと調べてみた。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;sshd\u3067Publickey\u3092authorized_keys\u4ee5\u5916\u304b\u3089\u6301\u3063\u3066\u304f\u308b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sshd\u3067publickey\u3092authorized_keys\u4ee5\u5916\u304b\u3089\u6301\u3063\u3066\u304f\u308b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-272&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;問題&quot;&gt;問題&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;AuthorizedKeysCommand&lt;/code&gt; に公開鍵を引っ張ってくるscriptを指定したんだけど、認証に失敗する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; sshd_configに以下の記述&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;AuthorizedKeysCommand /tmp/pubkey.sh&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;AuthorizedKeysCommandUser hogehoge&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; pubkey.shは以下の通り&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;http://www.seirios.org/seirios/dokuwiki/doku.php?do=export_code&amp;amp;id=tweet:2021:0108_01&amp;amp;codeblock=0&quot; title=&quot;この部分をダウンロード&quot; class=&quot;mediafile mf_sh&quot;&gt;pubkey.sh&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code&quot;&gt;#!/bin/bash -e
echo &amp;quot;ssh-rsa AAAA.........&amp;quot;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; ssh -v の結果&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;Permission denied (publickey,gssapi-keyex,gssapi-with-mic).&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u554f\u984c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u554f\u984c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;273-753&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;解決&quot;&gt;解決&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; sshdのlogを見ると、&lt;code&gt;error: Unsafe AuthorizedKeysCommand “/tmp/pubkey.sh”: bad ownership or modes for file /tmp/pubkey.sh&lt;/code&gt; が&lt;code&gt;/var/log/auth.log&lt;/code&gt;に出力されていた&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 色々調べてみると、以下が判明&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; sshdは以下の条件のうち一つでも満たすと、上記エラーを吐く&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 他人に書き換えられる可能性のあるDirectoryに設置されている(/tmpとかはやばい)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ownerがrootではない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; Owner以外が書き換えることができる(g+wとかo+wだとまずい)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; AuthorizedKeysCommandUser に指定されたUser Accountで実行できない&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; というわけで、以下のように修正&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Scriptを&lt;code&gt;/usr/local/bin/pubkey.sh&lt;/code&gt;に設置&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;AuthorizedKeysCommand /usr/local/bin/pubkey.sh&lt;/code&gt; として&lt;em class=&quot;u&quot;&gt;sshd_config&lt;/em&gt;に設定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;chmod 750 /usr/local/bin/pubkey.sh&lt;/code&gt; を実行&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;chown root:nobody /usr/local/bin/pubkey.sh&lt;/code&gt; を実行&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; sshdを再起動&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u89e3\u6c7a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u89e3\u6c7a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;754-1745&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;結論&quot;&gt;結論&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; この手法を使えば、LDAPでsshの公開鍵を引っ張ってくることができそうだ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; OpenSSHはSecurity的に相当細かくCheckしているので、ある程度はこの手法を利用しても安全性を確保できそうだ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 意外と問題の原因が分かりにくいので、追いかけるのが大変&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 俺はエスパーじゃないので、何をどうしたいのか説明してくれ&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u7d50\u8ad6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u7d50\u8ad6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1746-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Fri, 08 Jan 2021 07:15:01 +0000</pubDate>
        </item>
        <item>
            <title>OS-X BigSurにAlacrittyをinstall</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0207_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;os-x_bigsurにalacrittyをinstall&quot;&gt;OS-X BigSurにAlacrittyをinstall&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OS-X BigSur\u306bAlacritty\u3092install&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;os-x_bigsur\u306balacritty\u3092install&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-49&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit2&quot; id=&quot;install&quot;&gt;Install&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; HomeBrewからInstallする&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; `brew install alacritty`&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; man pageやterminfoが欲しい場合、以下を実施&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 準備&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level4&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;% cd some/where
% git clone https://github.com/jwilm/alacritty.git
% cd alacritty&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level3 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; man page&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level4&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;% gzip -c ./extra/alacritty.man | sudo tee /usr/local/share/man/man1/alacritty.1.gz &amp;gt; /dev/null&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level3 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Terminfo&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level4&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt;-Xの場合/usr配下は保護されているので、~/.terminfoに記述されることに注意&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level4&quot;&gt;&lt;div class=&quot;li&quot;&gt; 大量にUnknown Capabilityが出るが、とりあえず無視で良い&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level4&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;% tic -e alacritty,alacritty-direct ./extra/alacritty.info&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Install&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;install&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;50-747&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit3&quot; id=&quot;configuration&quot;&gt;Configuration&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
設定ファイルは
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; $HOME/.alacritty.yml&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; $XDG_CONFIG_HOME/alacritty/alacritty.yml&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; $XDG_CONFIG_HOME/alacritty.yml&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; $HOME/.config/alacritty/alacritty.yml&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
のいずれかに設置する。&lt;a href=&quot;https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html&quot; class=&quot;urlextern&quot; title=&quot;https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html&quot;&gt; XDG Base Directory Specificationに沿った以下の場所に配置する事も可能&lt;/a&gt;
今回は、すでに&lt;code&gt;~/.config&lt;/code&gt;が存在するので、&lt;code&gt;~/.config/alacritty/alacritty.yml&lt;/code&gt;に配置する。
&amp;lt;code&amp;gt;
% mkdir -p ~/.config/alacritty
% cd ~/.config/alacritty
% cp some/where/alacritty.yml .
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Configuration&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;configuration&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;748-1351&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit4&quot; id=&quot;結論&quot;&gt;結論&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
日本語のInline表示ができないので、今回はpass
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u7d50\u8ad6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u7d50\u8ad6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1352-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 07 Feb 2021 02:45:00 +0000</pubDate>
        </item>
        <item>
            <title>yash</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0317_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;yash&quot;&gt;yash&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Shell scriptで色々実行しようとしていると、余計な拡張の入ったshellは使いたくなくなる。拡張に依存してPOSIXを忘れてしまうと、マシンごとに異なるshell環境でどハマりをしてしまうからである。
&lt;/p&gt;

&lt;p&gt;
というわけで、POSIX準拠の比較的Primitiveなshellを探し求めてきたわけだが、結局選択できるshellは3種類に絞られてしまった。
; ash : NetBSDやFreeBSD に付属するshell で、Almquist shellを元にしたもの
;dash : Debian, Ubuntuで採用されているshellで、Almquist shellをdebian Projectで改変したもの
; yash : magicant(WATANABE Yuki)氏が開発したYet Another SHell。一部制限事項を除きPOSIX.1-2008 (IEEE Std 1003.1, 2016 Edition) を全てサポートしているshellで、日本語の情報も十分に提供されている。
&lt;/p&gt;

&lt;p&gt;
しかも、ashとdashは同じものからの派生なので、実質はそれほど変わらない。
&lt;/p&gt;

&lt;p&gt;
自分の場合、OS-X上で開発しているから、/bin/shはdashのようだが、これはcommand-line edit機能をオフにしてコンパイルされているから、login-shellで使うには自力compileするか、HomeBrewで導入する必要がある。
&lt;/p&gt;

&lt;p&gt;
色々探してて、yashがかなり良さそうなので試してみた。
&lt;/p&gt;

&lt;p&gt;
本記事では、この yash をMacOS-X BigSur上のtmuxで利用するためのDraftである。もう少し書きたいことはあるので、何回かに分けて書いた上でまとめたいという野望はある。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;yash&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yash&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-1568&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;yash1&quot;&gt;yash&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
yashの情報は以下を参照のこと
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/magicant/yash&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/magicant/yash&quot;&gt;GitHUB&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://yash.osdn.jp&quot; class=&quot;urlextern&quot; title=&quot;http://yash.osdn.jp&quot;&gt;日本語の情報&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://yash.osdn.jp/index.html.en&quot; class=&quot;urlextern&quot; title=&quot;http://yash.osdn.jp/index.html.en&quot;&gt;英語の情報&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
特徴は以下の通り
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 小さい&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; POSIX.1-2008準拠&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; コマンドライン補完やコマンドラインエディット機能を持つ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; LicenseはGPL… → 個人的には、ここだけ気に入らない。BSDライセンスなら…とも思うが、まぁ、仕方がない。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Software Development Utilities オプションと C-Language Development Utilities オプションを備えた任意の POSIX.1-2001 環境でビルド・実行できる&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; MacにはHomeBrewからInstallできる&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;yash&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yash1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1569-2295&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;yashの設定&quot;&gt;yashの設定&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
yashの環境としては、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; login shellとしては拡張の機能を使いたい&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; shell scriptを実行する環境としては、POSIX shellとして動いて欲しい&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
という２つの条件を満たすように設定する。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;yash\u306e\u8a2d\u5b9a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yash\u306e\u8a2d\u5b9a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2296-2561&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;yash_profile&quot;&gt;.yash_profile&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
login時に読み込まれるファイル。システムの標準設定を記載する。
&lt;/p&gt;

&lt;p&gt;
yashは、特に指定をしない限り、&lt;code&gt;/etc/profile&lt;/code&gt;や&lt;code&gt;~/.profile&lt;/code&gt;を&lt;strong&gt;読み込まない&lt;/strong&gt;。代わりに、&lt;code&gt;~/.yash_profile&lt;/code&gt;を読み込む。
&lt;/p&gt;

&lt;p&gt;
個人的にはこの挙動は気に入らないので、&lt;code&gt;ln -s ~/.profile ~/.yash_profile&lt;/code&gt;して共通にしている。
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;http://www.seirios.org/seirios/dokuwiki/doku.php?do=export_code&amp;amp;id=tweet:2021:0317_01&amp;amp;codeblock=0&quot; title=&quot;この部分をダウンロード&quot; class=&quot;mediafile mf_yash_profile&quot;&gt;.yash_profile&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;################################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Shell Configuration&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;################################################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;## Environment Variables&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# UNIX Standard Paths&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;PATH&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin&#039;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# System Specific Paths&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/usr/local/opt/openssl/bin&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;PATH&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;/usr/local/opt/openssl/bin:&lt;span class=&quot;es3&quot;&gt;${PATH}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Personal Paths&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${HOME}&lt;/span&gt;/bin&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;PATH&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${PATH}&lt;/span&gt;:&lt;span class=&quot;es3&quot;&gt;${HOME}&lt;/span&gt;/bin&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
ここでは、login時にどうしても設定しなければならない最小限の環境変数を設定する。こうすることで、shell scriptを実行する際に怪しい挙動を考えなくて良くなる。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /usr/local/opt/openssl/bin は、MacOS BigSurにおいて最新版のopensslをコマンドラインから実行するためにこのように設定している。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /sbin,/usr/sbin,/usr/local/sbin をPATHに入れずに、コマンド起動時に手入力する人もいるが、私は面倒なので、PATHに入れている。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/bin は人によって色々な異論があると思うが、個人的にはscriptが大量にある関係もあって、PATHに加えている。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;.yash_profile&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yash_profile&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2562-4193&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;yashrc&quot;&gt;.yashrc&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
.yashrcは、shellがInteractiveモードで起動された場合に実行される(読み込まれる)ファイル。ここに、生活に関係する大量の設定を投入する。
&lt;/p&gt;

&lt;p&gt;
注意点として
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; .yashrc は &lt;code&gt;ln -s ~/.login ~/.yashrc&lt;/code&gt;を実行して、全てのshellで共通にする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; yash/ash/dash/bash/zsh 固有の設定はshellの種類を判別して記述する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; yashにおいては、.yash_profileを読み込んだのち、(POSIX非互換モードの場合、)/usr/local/share/yash/initialization配下にあるファイル(特にcommon)を読み込む。その際にPS1を書き換えてしまうので、.yash_profileにPS1など幾つかの設定を記述しても無駄になる。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 迂闊な設定ミスをすると、Command-line completionやEditor利用中のCtrl-Zが効かなくなるなどの怪しい挙動を示すので注意が必要&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
などが挙げられる。
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;http://www.seirios.org/seirios/dokuwiki/doku.php?do=export_code&amp;amp;id=tweet:2021:0317_01&amp;amp;codeblock=1&quot; title=&quot;この部分をダウンロード&quot; class=&quot;mediafile mf_yashrc&quot;&gt;.yashrc&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;################################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Shell Configuration&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;################################################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;### Functions&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;## Common&lt;/span&gt;
hup&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; pid; &lt;span class=&quot;kw3&quot;&gt;kill&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-HUP&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$pid&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;/&lt;/span&gt;var&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;run&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;re4&quot;&gt;$1&lt;/span&gt;.pid; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
start_tmux&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;__TMUX_BIN__&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;which&lt;/span&gt; tmux&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_BIN__:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;RET&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt; __TMUX_BIN__ &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;return&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;__TMUX_SESS__&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;hostname&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;__TMUX_SESS__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__%%.*}&lt;/span&gt;&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_SESS__:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;__TMUX_SESS__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${TMUX:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${STY:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;re2&quot;&gt;__TMUX_OPTION__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_BIN__}&lt;/span&gt; has-session &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_SESS__}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; ; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
      &lt;span class=&quot;re2&quot;&gt;__TMUX_OPTION__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;attach -t &lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__}&lt;/span&gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
      &lt;span class=&quot;re2&quot;&gt;__TMUX_OPTION__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;new-session -s &lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__}&lt;/span&gt; ; split-window -h&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;${__TMUX_BIN__}&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_OPTION__}&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt; __TMUX_BIN__ __TMUX_SESS__ __TMUX_OPTION__
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;## for yash&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;yash &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;sh&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; yash &lt;span class=&quot;re5&quot;&gt;--posix&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;$@&amp;quot;&lt;/span&gt;; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;sh&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;sh&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;$@&amp;quot;&lt;/span&gt;; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;## Yash common configuration&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${YASH_VERSION}&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; ; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;co0&quot;&gt;# set -f      # -f すると&#039;*&#039;が展開されなくなる&lt;/span&gt;
  bindkey &lt;span class=&quot;re5&quot;&gt;--emacs&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;\^L&#039;&lt;/span&gt; clear-and-redraw-all &lt;span class=&quot;co0&quot;&gt;# for emacs mode&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;co0&quot;&gt;# POSIX collect modeでは、YASH拡張が使えなくなる&lt;/span&gt;
  &lt;span class=&quot;co0&quot;&gt;# set -o posixlycorrect&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;### Personal Environment Variables&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# for HomeBrew&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;HOMEBREW_GITHUB_API_TOKEN&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;37edea7e3d75b4a84fb2d913008af7ebef407033&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Shell Variables.&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;umask&lt;/span&gt; 022
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;## Environment Variables&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;EDITOR&lt;/span&gt;=&lt;span class=&quot;kw2&quot;&gt;vi&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; lv &lt;span class=&quot;kw2&quot;&gt;less&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;more&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;which&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;PAGER&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;which&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;## Aliases&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;h&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;fc -l&#039;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;j&lt;/span&gt;=&lt;span class=&quot;kw3&quot;&gt;jobs&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;ll&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;ls -laFo&#039;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;l&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;ls -l&#039;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;g&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;egrep -i&#039;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;man&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;LANG=C /usr/bin/man&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;nossh&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;ssh -o &amp;quot;UserKnownHostsFile /dev/null&amp;quot;&#039;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;noscp&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;scp -o &amp;quot;UserKnownHostsFile /dev/null&amp;quot;&#039;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;svn&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039;LANG=ja_JP.UTF-8 svn&#039;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;## Shell command line editing ***WARN***&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-o&lt;/span&gt; emacs
&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-o&lt;/span&gt; tabcomplete &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-o&lt;/span&gt; tabcomplete        &lt;span class=&quot;co0&quot;&gt;# for NetBSD /bin/sh&lt;/span&gt;
&amp;nbsp;
: &lt;span class=&quot;co1&quot;&gt;${__HOSTNAME__:=$(uname -n)}&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;PS1&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${__HOSTNAME__%%.*}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;id&lt;/span&gt; -u&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt;
  &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;PS1&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${PS1}&lt;/span&gt;# &amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
  &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;PS1&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${PS1}&lt;/span&gt;$ &amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;esac&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt; __HOSTNAME__
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;## Execute command&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;tset &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;eval&lt;/span&gt; $&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;tset &lt;span class=&quot;re5&quot;&gt;-sQrm&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;unknown:?unknown&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;goenv.sh &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; . &lt;span class=&quot;re1&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;goenv.sh
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;rbenv.sh &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; . &lt;span class=&quot;re1&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;rbenv.sh
&amp;nbsp;
start_tmux
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;################################################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# 予約環境変数&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# i                     : for counter&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# __HOSTNAME__          : hostname&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# __TMUX_BIN__          : tmux executable file&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# __TMUX_OPTION__       : tmux options&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# __TMUX_SESS_NAME__    : tmux session name&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# __PAGER__             : temporaly pager commands&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# This .profile is checked under following OSs.&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#   - MacOS-X BigSur&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# This .profile is checked under following shells.&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#   - zsh (5.8)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#   - yash (2.51)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#   - dash (from HomeBrew)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#   - ash (FreeBSD-12.2-p3)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ***** WARNINGS *****&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# - dash included in OS-X BigSur is compiled without commandline completion. Must use HomeBrew version.&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;
これで、個人的に必要になる設定は終わり。
&lt;/p&gt;

&lt;p&gt;
注意点は、start_tmux()。
&lt;/p&gt;
&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;http://www.seirios.org/seirios/dokuwiki/doku.php?do=export_code&amp;amp;id=tweet:2021:0317_01&amp;amp;codeblock=2&quot; title=&quot;この部分をダウンロード&quot; class=&quot;mediafile mf_&quot;&gt;start_tmux&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code bash&quot;&gt;start_tmux&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;__TMUX_BIN__&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;which&lt;/span&gt; tmux&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_BIN__:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;RET&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt; __TMUX_BIN__ &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;return&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;__TMUX_SESS__&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;hostname&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;__TMUX_SESS__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__%%.*}&lt;/span&gt;&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_SESS__:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;__TMUX_SESS__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${TMUX:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${STY:-&amp;quot;&amp;quot;}&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;re2&quot;&gt;__TMUX_OPTION__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_BIN__}&lt;/span&gt; has-session &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_SESS__}&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; ; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
      &lt;span class=&quot;re2&quot;&gt;__TMUX_OPTION__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;attach -t &lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__}&lt;/span&gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
      &lt;span class=&quot;re2&quot;&gt;__TMUX_OPTION__&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;new-session -s &lt;span class=&quot;es3&quot;&gt;${__TMUX_SESS__}&lt;/span&gt; ; split-window -h&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;${__TMUX_BIN__}&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;${__TMUX_OPTION__}&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;unset&lt;/span&gt; __TMUX_BIN__ __TMUX_SESS__ __TMUX_OPTION__
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; tmuxは、複数を重なって起動すると幸せにならないので、Hostnameなどを利用したtmux sessionを作成し、必要があればnew-session、なければ attach、それもなければ、tmuxをskipするようにしてある&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 一時利用した環境変数はちゃんと消去する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; どこかで間違って上書きされないように、被らない変数名をつけ、確実にunsetする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; localはPOSIXに存在しないので、利用しない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;.yashrc&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yashrc&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4194-9429&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;yashのdebugのために必要な幾つかのコマンド&quot;&gt;yashのDebugのために必要な幾つかのコマンド&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;set -o&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 現在の各種オプションの設定確認&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;set -o poisly-correct&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; POSIX互換モードに移行する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; set -o emacs&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; emacsモードでの行編集が可能になる&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;local&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; local変数を表示する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;typeset -f&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 定義されている関数を表示する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;yash\u306eDebug\u306e\u305f\u3081\u306b\u5fc5\u8981\u306a\u5e7e\u3064\u304b\u306e\u30b3\u30de\u30f3\u30c9&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yash\u306edebug\u306e\u305f\u3081\u306b\u5fc5\u8981\u306a\u5e7e\u3064\u304b\u306e\u30b3\u30de\u30f3\u30c9&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;9430-9823&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;終わりに&quot;&gt;終わりに&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
まだまだ書くべきことはたくさんあるが、ひとまずここまで。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u7d42\u308f\u308a\u306b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u7d42\u308f\u308a\u306b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;9824-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 19 May 2021 09:55:00 +0000</pubDate>
        </item>
        <item>
            <title>shell関連メモ</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0427_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;shell関連メモ&quot;&gt;shell関連メモ&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ash/yash/bash/zshで定義済み関数一覧を出力する &lt;code&gt;typeset -f&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ash/yash/bash/zshで関数名だけ抜き出す &lt;code&gt;typeset -f | grep &amp;#039;.*()[ ]*[{]*&amp;#039; | tr -d “() {”&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ash/yash/bash/zshで関数を消す &lt;code&gt;unset -f [funcname]&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;shell\u95a2\u9023\u30e1\u30e2&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;shell\u95a2\u9023\u30e1\u30e2&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-281&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;個人的なtmux_memo&quot;&gt;個人的なtmux memo&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
login時にtmuxを起動する(もし起動してたらattachする)ようにしているので、iTerm2でTab２枚目を作成すると問答無用でtmuxがattachされてしまう。
ちょっと困るので、自分の設定ベースだがメモ。
&lt;/p&gt;
&lt;dl class=&quot;plugin_definitionlist&quot;&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x^z&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Suspend the current client&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x^d&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Detach the current client&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x D&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Choose a client from a list&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x (&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Switch to previous client&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x (&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Switch to next client&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x c&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Create new Window&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x n&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Switch to next window&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x p&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Switch to previous window&lt;/dd&gt;
&lt;dt&gt;&lt;span class=&quot;term&quot;&gt; &lt;code&gt;^x w&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;Choose a window from a list&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;
tmuxは起動時に「tmux server」と「tmux client」を起動するので、psすると2つのprocessが見える。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u500b\u4eba\u7684\u306atmux memo&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u500b\u4eba\u7684\u306atmux_memo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;282-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 27 Apr 2021 15:15:00 +0000</pubDate>
        </item>
        <item>
            <title>LibreOffice for Mac 7.1.3.2</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0524_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;libreoffice_for_mac_7132&quot;&gt;LibreOffice for Mac 7.1.3.2&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Macで便利に使っているLibreOfficeだが、日本語化したあとMenuのToolTipが文字化けするのが非常に気に入らなかった。
&lt;/p&gt;

&lt;p&gt;
色々対策が出ているが、完全なものがなくイライラしていたのだが、どうやら解決したらしいのでメモ。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Terminal Appを利用する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;/Applications/LibreOffice.app/Contents/Resources/fonts&lt;/code&gt; 及び &lt;code&gt;/Applications/LibreOffice.app/Contents/Resources/resource/common/fonts&lt;/code&gt;に必要なFont Grif がないのが問題の根本の模様&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 以下を実行すれば良い&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;mv /Applications/LibreOffice.app/Contents/Resources/fonts /Applications/LibreOffice.app/Contents/Resources/fonts.bak
mv /Applications/LibreOffice.app/Contents/Resources/resource/common/fonts /Applications/LibreOffice.app/Contents/Resources/resource/common/fonts.bak&lt;/pre&gt;

&lt;p&gt;
これで文字化けのほとんど（今のところ、文字化けを見ることはない)が解消する
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 24 May 2021 11:25:00 +0000</pubDate>
        </item>
        <item>
            <title>FreeBSD EtherIP でトラブル(未解決)</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0530_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;freebsd_etherip_でトラブル_未解決&quot;&gt;FreeBSD EtherIP でトラブル(未解決)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
FreeBSD 12-RELEASE を利用して以下の環境を構築したところうまくいかなかった。
&lt;/p&gt;

&lt;p&gt;
以下は、症状を再現するための必要設定のみ記載している。
&lt;/p&gt;

&lt;p&gt;
試験環境: &lt;code&gt;FreeBSD rt12 12.2-RELEASE-p6 FreeBSD 12.2-RELEASE-p6 GENERIC  amd64&lt;/code&gt;
基盤：VMware 5.5 及び、XCP-ng 8.2.0
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Bridge0 -- gif0 -- em0 -- (network) -- em0 -- gif0 -- Bridge0
Node A   FreeBSD 12 -&amp;gt;|               |&amp;lt;- FreeBSD 12   Node B&lt;/pre&gt;

&lt;p&gt;
なお、試験環境は、VMware上で構築している。また、自明だと思うが、kernel側でv4 forwarding/v6 forwardingを1にして、Routerモードにしてある
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; NodeAで設定したのは以下の通り&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ifconfig em0 10.0.0.1/24
ifconfig gif0 create
ifconfig gif0 mtu 1500					# 記述ミス。追記
ifconfig gif0 tunnel inet 10.0.0.1 10.0.0.2
ifconfig gif0 inet 172.16.0.1/24 alias
route add -net 172.16.1.0/24 -iface gif0
ifconfig bridge0 create
ifconfig bridge0 mtu 1500				# 記述ミス。追記
ifconfig bridge0 addm gif0 -stp gif0&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; NodeBで設定したのは以下の通り&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ifconfig em0 10.0.0.2/24
ifconfig gif0 create
ifconfig gif0 mtu 1500					# 記述ミス。追記
ifconfig gif0 tunnel inet 10.0.0.2 10.0.0.1
ifconfig gif0 inet 172.16.1.1/24 alias
route add -net 172.16.0.0/24 -iface gif0
ifconfig bridge0 create
ifconfig bridge0 mtu 1500				# 記述ミス。追記
ifconfig bridge0 addm gif0 -stp gif0&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
以上のように設定したところ、通信ができなかった。(NodeAでping 172.16.1.1を実行した)
&lt;/p&gt;

&lt;p&gt;
tcpdumpでgif0の通信内容を見る(&lt;code&gt;tcpdump -ni gif0&lt;/code&gt;) と、&lt;code&gt;AF Unknown (18), length 46:&lt;/code&gt;が表示される。また、この時に&lt;code&gt;tcpdump -ni em0&lt;/code&gt;を見ると、&lt;code&gt;IP 10.0.0.1 &amp;gt; 10.0.0.2:  ip-proto-97 86&lt;/code&gt; のように、Packetは出て行っており、IPのProtocol番号97で通信しているようだが、pingは届かない。(parameter errorが出る)
&lt;/p&gt;

&lt;p&gt;
この問題は、IP AddressをIPv4からIPv6に置き換えても変わらなかった
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_box plugin_wrap&quot;&gt;
&lt;p&gt;
&lt;strong&gt;追記(記載忘れ。20210530)&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; いくつかのWeb Pageに、sysctlでkernelパラメータをいじるという記事があるので、実行したが変化なし&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;sysctl net.link.bridge.ipfw=0
sysctl net.link.bridge.pfil_bridge=0
sysctl net.link.bridge.pfil_member=0&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; bridge0 に物理I/Fを追加してみたが、これも効果なし&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code&quot;&gt;ifconfig bridge0 addm em1 -stf em1&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
問題を切り分けようと、bridge I/Fを削除すると、問題なくICMPが届くところを見ると、gifでの通信は正常にできていると考えられる。
&lt;/p&gt;

&lt;p&gt;
とすると、FreeBSDのbridge deviceがEtherIP関連でものすごく変なことをしているとしか考えられない…
と思って、&lt;code&gt;ifconfig bridge0 deletem gif0&lt;/code&gt; をNodeA/NodeBの両方で実行すると、問題なく通信できるようになる。
&lt;/p&gt;

&lt;p&gt;
よく見る（症状1）と、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; bridge0にgif0が所属していない時は、gif経由でいわゆるIPv4/IPv6パケットが流れた&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; bridge0にgif0が所属している時(addmした時)は、protocol number 97(EtherIP/on &lt;em class=&quot;u&quot;&gt;em0&lt;/em&gt;)/(parameter error/on &lt;em class=&quot;u&quot;&gt;gif0&lt;/em&gt;)の通信のように見える (tcpdumpのBinaryを解析する根性はなかった)。&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_box plugin_wrap&quot;&gt;
&lt;p&gt;
&lt;strong&gt; 追記(20210530) &lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
以前、佐藤先生から、中を解析するには、Protocol number=97を追いかけるしかない、というお話をいただいている。
&lt;/p&gt;

&lt;p&gt;
問題は、同一のFreeBSD同士でのgif+bridgeを用いたEtherIP通信が、IPv4でもIPv6でも失敗するところ。なお、NECのIX2000シリーズのEtherIPと繋ごうとしてもつなげないので、流石にFreeBSD側のBUGと考えるしかないが、問題はそのBUGが bridge(if_bridge.c) にあるのか gif(if_gif.c)にあるのかわからない…
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
なお、いくつか試験するにあたって、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; gifのみにIP Address(172.16.0.1/172.16.1.1)を割り当てた場合&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; bridgeのみにIP Address(172.16.0.1/172.16.0.2)を割り当てた場合 (BridgeはBridgeをDirectに繋いでいるので、同一Segmentである必要がある)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; lo9を作成してそこのみにIP Address(172.16.0.1/172.16.1.1)を割り当てた場合&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
の3パターンを試験したが、全て、上記の症状１が観測された。
&lt;/p&gt;

&lt;p&gt;
FreeBSD 9系列では動いているという報告はあるのだが、それもどこまで信用すれば…(いまさらFreeBSD 9-RELEASEを作る気にならなかった)
そして、FreeBSD 13で動くかわからないしなぁ。
&lt;/p&gt;

&lt;p&gt;
なんで俺はこんなに罠にハマるんだろう… しかも、なんで6時間もDebugにはまったんだろう… さて、どうすれば解決できることやら…
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 24 Jun 2021 01:25:00 +0000</pubDate>
        </item>
        <item>
            <title>FreeBSDのMulti-Fibとpacket送出について(駄文)</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0803_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;freebsdのmulti-fibとpacket送出について_駄文&quot;&gt;FreeBSDのMulti-Fibとpacket送出について(駄文)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
FreeBSDのMulti-FIBとIPパケット送出について、なんとなく色々考えていたら、少し問題がありそうなことに気がついたので考えてみた。
なお、実際のcodeは見ていないので、もしかすると大勘違いをしている可能性があります。
&lt;/p&gt;

&lt;p&gt;
そこそこ長いかもしれないので、興味のない人はスルーでお願いします。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;FreeBSD\u306eMulti-Fib\u3068packet\u9001\u51fa\u306b\u3064\u3044\u3066(\u99c4\u6587)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;freebsd\u306emulti-fib\u3068packet\u9001\u51fa\u306b\u3064\u3044\u3066_\u99c4\u6587&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-472&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;前提&quot;&gt;前提&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
想定している構成は以下の通り
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;                                    AS-A               addr(A)
            AS-C       +-------- ISP-A --- Router ---+
node --- ISP-C --- Internet                        Server
    addr(C)            +-------- ISP-B --- Router ---+
                                    AS-B               addr(B)&lt;/pre&gt;

&lt;p&gt;
上記構成において、仮にserverのnic0がaddr(A)を持ち、nic1がaddr(B)を持っているとする。
この仮定は今時の日本においては、それほど荒唐無稽なものではない。
&lt;/p&gt;

&lt;p&gt;
例えば、自宅にFlet&amp;#039;sを引き込み、Multi-Sessionを用いて上流ISPを２社と契約し、固定アドレスを割り当ててもらうような場合がこれに当たる。
まぁ、それほど多いとは思わないけど、こういう構成のサイトは企業も含めてそれなりにある。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u524d\u63d0&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u524d\u63d0&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;473-1373&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;考察&quot;&gt;考察&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
このようなサイトにおいて、あるnode(addr(C))からaddr(A)にパケットが来たとする。
&lt;/p&gt;

&lt;p&gt;
addr(A)を持つサーバー(Serv)のFIB次第で、返答のパケットが送り出されるNICが決まる現在のFreeBSDの実装だと、以下のような状況が発生する。
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; ServerのFIBに載っているaddr(C)へのBest経路がnic0側(ISP-A側)にあった場合&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; servは、Src: addr(A)、Dst: addr(C) 、Nexthop: nic0側の中継node&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; ServerのFIBに載っているaddr(C)へのBest経路がnic1側(ISP-B側)にあった場合&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; servは、Src: addr(A)、Dst: addr(C) 、Nexthop: nic1側の中継node&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
としてパケットを送出する
&lt;/p&gt;

&lt;p&gt;
現在FreeBSDのnetinet/netinet6の実装は、パケットを送り出す際に、送り出すパケットのsource IP Addressは考慮しておらず、FIBを見た上でベストなI/Fから送り出す。
つまり、FreeBSDのip送出ロジックは
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Dest Addrを確認&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; FIBからDest Addrをlookupしてnexthopを決定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; nexthopに対してもっとも近いnicを決定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 3で決定したnicからpacketを送出&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
となっていると考えられる。
&lt;/p&gt;

&lt;p&gt;
このような実装において、１の状況になってくれれば問題は発生しないが、もし２の状況になった場合、nic1側の中継nodeがaddr(A)がsrcのパケットを中継してくれるとは限らない。
(これを許すと困ったことになるのはISPで運用していれば理解できると思うので、ここでは詳述しない)
&lt;/p&gt;

&lt;p&gt;
この問題を解決するは、本質的には「全てのI/FにFIBを持たなければならない」と考えられる。なぜなら、入ってきたI/Fからパケットを出すためには、（本質的には）それぞれのI/Fにdest毎のnexthopを持たなければならないからである。
（ただし、FIBを共通化することができる可能性はあるし、そのようにNetworkを構成することができる場合も多いとは考えられる。）
&lt;/p&gt;

&lt;p&gt;
現状のFreeBSDの実装でこの問題を無理矢理にでも解決しようとした場合、pfやipfwを用いたpolicy routeで処理するしかない。
例えば、SRC ADDRがaddr(A)ならば、nic0側のnexthopにpacketを投げる。addr(B)ならnic1側のnexthopにpacketを投げるといった設定を投入ればよい。
&lt;/p&gt;

&lt;p&gt;
しかし、ここでPolicy Routeを利用せずに問題を解決しようとすると、解決策がない。突破口になりそうな機能としてはMulti-FIBがあるが、そこには下記のような問題がある。
&lt;/p&gt;

&lt;p&gt;
FreeBSDのMulti-FIBは、Process単位にFIBを選択可能である。
&lt;/p&gt;

&lt;p&gt;
問題は、Processに割り当てられるFIBを、起動時に１つ設定できる。(もちろん、FIBを選択できるようにApplicationを作成すれば問題にならないが、nginxやapacheなどにその修正を投入するのはそれほど簡単ではなく、現実的ではない)。逆に言えば、パケット送出時に必要なFIBを選択することは（あくまでProcessがそのように実装されていなければ）できない。
&lt;/p&gt;

&lt;p&gt;
つまり、Processレベルで見ると、上記パケット送出時の問題がそのまま残っていると言える。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u8003\u5bdf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u8003\u5bdf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1374-4647&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;結論&quot;&gt;結論&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
今のFreeBSDの実装においては、本問題を解決するためにはpolicy routeを利用するしか手がない。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u7d50\u8ad6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u7d50\u8ad6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;4648-4790&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;解決策の案&quot;&gt;解決策の案&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
まず、ほとんどの場合、現在の実装で問題はないと言える。想定した構成は、あくまで例外的な構成であり、構成変更できる場合はやりようがあるからである。
&lt;/p&gt;

&lt;p&gt;
例えば、Serverのnicを１つにまとめて、routerでNATするという手が考えられる。こうすることによって、serverはNATされたsource addressから通信を受け取るので、返答をrouterに送れば良くなる。ただし、この場合は、Routerの性能などが問題になる可能性がある。特にNATはstateを持つので、耐障害性などを考慮すると、故障箇所が増えたりdebugが面倒になるなどのデメリットはある。
&lt;/p&gt;

&lt;p&gt;
まぁ、文句ばかり言っても仕方がないので、もし実装を変えるならどうするべきかを考察してみる。
&lt;/p&gt;

&lt;p&gt;
問題の根本は、FreeBSDにおけるMulti-FIB実装が「Process単位でFIBを選択する」実装になっていることにある。これをI/F単位にFIB指定する(ProcessからはFIBは選択しない)形式に直すことで、本問題は解決できると思われる。ただし、いくつか制限が出てくる(本質的には不要かもしれない。まだそこまで考えたわけではないので）
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; NIC側の制限&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; (Physical/pseudo問わず)全てのNIC deviceに割り当てられるのは、Address１つのみに制限する&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 割り当てたAddress毎にFIBを設定するという手はあるのでこの制限は回避可能かもしれないが、管理がややこしいことになりそうな気がする&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 代わりに、全てのNICには「sub nic」を割り当てられるようにする (すでに不可能ではないはず)&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; en0.0 / en0.1 / en0.2…など&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 任意のNIC/sub NICにおいて、「同一のIPv(4|6)アドレス」を持ってはならない（prefixlenが違ってもアドレスが同じならだめ)&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; FIBの制限&lt;/div&gt;
&lt;ol&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 原則として、FIBは最低で1つ存在する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 原則として、FIBは複数作成できる&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; FIBには条件を指定したsub FIBを作成することが可能&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; 例えば、FIB0(=FIB0.0) / FIB0.1 / FIB0.2 / … / FIB1(=FIB1.0) / FIB2(=FIB2.0) / FIB2.1 / …&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 条件として設定できるのは、TCP/UDPのport番号など (ここは生煮え)&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; FIB0.0 : FIB0のdefault FIB / FIB1.0 : FIB1のdefault FIB / FIB1.1 : FIB1のsub FIBでTCP443/UDP443の場合にのみ利用する / ….など&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 1つのNIC/sub NICに割り当てられるのは、FIBのMajor番号が同じである一連のもののみ&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; nic0 : FIB0 / nic0.1 : FIB1.0, FIB1.1 / nic1 : FIB0 など&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
以上の制限を課した上で、ip_output.cで、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; source Addressを元にして output I/Fを決定する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; output I/Fが決まれば、FIB Baseが決まる&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; SubFIBが存在する場合、制限条件を確認し、sub FIBを決定する。制限条件がない場合、sub FIBは0になる (FIB1→FIB1.0やFIB1.1になるという意味)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 決定されたFIBから経路をlookupする。&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; nexthopを決定する。もしnexthopが決定できなかった場合、“DEST UNREACH”とする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; パケットを構成し、送出する&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
という処理を行う。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u89e3\u6c7a\u7b56\u306e\u6848&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u89e3\u6c7a\u7b56\u306e\u6848&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;4791-8079&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit6&quot; id=&quot;問題&quot;&gt;問題&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
上記実装の問題として、今思いつくのは、
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; pfやipfwなどのPolicy Routeと相性が悪そうな気がする&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 判断が多くなり遅くなる&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 変更が大きいため、Debug/安定化が遠い&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; Process単位でFIBを変えたい場合に対応が難しい&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; sub FIBを利用すれば解決できそうに見えるが、全ての場合を網羅できるかはわからない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
が考えられる。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u554f\u984c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u554f\u984c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;8080-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Mon, 02 Aug 2021 17:25:00 +0000</pubDate>
        </item>
        <item>
            <title>WireGuard for FreeBSD の(おそらく)BUG</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0805_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;wireguard_for_freebsd_の_おそらく_bug&quot;&gt;WireGuard for FreeBSD の(おそらく)BUG&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
大したBUGではないけど、見つけてしまったのだから仕方がない。
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;minira# diff -c wg-quick /usr/local/bin/wg-quick
*** wg-quick    Thu Aug  5 03:28:13 2021
--- /usr/local/bin/wg-quick     Mon Jul  5 06:18:56 2021
***************
*** 97,103 ****
                        SaveConfig) read_bool SAVE_CONFIG &amp;quot;$value&amp;quot;; continue ;;
                        esac
                fi
!               WG_CONFIG+=&amp;quot;$stripped&amp;quot;$&amp;#039;\n&amp;#039;
        done &amp;lt; &amp;quot;$CONFIG_FILE&amp;quot;
        shopt -u nocasematch
  }
--- 97,103 ----
                        SaveConfig) read_bool SAVE_CONFIG &amp;quot;$value&amp;quot;; continue ;;
                        esac
                fi
!               WG_CONFIG+=&amp;quot;$line&amp;quot;$&amp;#039;\n&amp;#039;
        done &amp;lt; &amp;quot;$CONFIG_FILE&amp;quot;
        shopt -u nocasematch
  }&lt;/pre&gt;

&lt;p&gt;
見ればわかるけど、本当に大した話じゃない…
&lt;/p&gt;

&lt;p&gt;
# しかし、空行を削除してもいい気はするし、しなくてもいい気もするなぁ。単にuniq通すだけだからまぁ、どっちでもいいんだけど。
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 04 Aug 2021 18:55:00 +0000</pubDate>
        </item>
        <item>
            <title>[FreeBSD] ZFS/XCP-ng Disk増加</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2021:0927_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;freebsd_zfs_xcp-ng_disk増加&quot;&gt;[FreeBSD] ZFS/XCP-ng Disk増加&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
XCP-ng上で動かしているFreeBSDのVMにおいて、zrootの容量を増やす方法
なお、&lt;code&gt;FreeBSD 11.2-RELEASE&lt;/code&gt;と&lt;code&gt;FreeBSD 13.0-RELEASE-p4&lt;/code&gt;で動作確認した。
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; FreeBSD VM(以下VM)をshutdownする&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; しなくてもいいのかもしれないが、block deviceを扱うので、止めておいた方が無難だろう&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; XCP-ng側で、Storageの容量を増やす&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 今回は20G追加して40Gにした&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; VMを起動する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; dmesgなどで、xvbdの容量を確認し容量が増えていることを確認する&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; 今回の対象Diskはada0に割り当てられている&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; 以下の作業を実行&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# dmesg&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;snip&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
xbd0: 40960MB &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;Virtual Block Device&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; at device&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;vbd&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;768&lt;/span&gt; on xenbusb_front0
xbd0: attaching &lt;span class=&quot;kw2&quot;&gt;as&lt;/span&gt; ada0
&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;snip&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
GEOM: ada0: the secondary GPT header is not &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; the &lt;span class=&quot;kw2&quot;&gt;last&lt;/span&gt; LBA.
&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;snip&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# zpool set autoexpand=on zroot&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# gpart show&lt;/span&gt;
=&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;41942960&lt;/span&gt;  ada0  GPT  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;40G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;CORRUPT&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
        &lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;  freebsd-boot  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;512K&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;nu0&quot;&gt;1064&lt;/span&gt;       &lt;span class=&quot;nu0&quot;&gt;984&lt;/span&gt;        - &lt;span class=&quot;kw2&quot;&gt;free&lt;/span&gt; -  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;492K&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;nu0&quot;&gt;2048&lt;/span&gt;   &lt;span class=&quot;nu0&quot;&gt;4194304&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;  freebsd-swap  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;2.0G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
   &lt;span class=&quot;nu0&quot;&gt;4196352&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;37744640&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;  freebsd-zfs  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;18G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;nu0&quot;&gt;41940992&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;2008&lt;/span&gt;        - &lt;span class=&quot;kw2&quot;&gt;free&lt;/span&gt; -  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;1.0M&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# gpart recover ada0&lt;/span&gt;
ada0 recovered
&lt;span class=&quot;co0&quot;&gt;# gpart show&lt;/span&gt;
=&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;83886000&lt;/span&gt;  ada0  GPT  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;40G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;  freebsd-boot  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;512K&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;nu0&quot;&gt;1064&lt;/span&gt;       &lt;span class=&quot;nu0&quot;&gt;984&lt;/span&gt;        - &lt;span class=&quot;kw2&quot;&gt;free&lt;/span&gt; -  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;492K&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;nu0&quot;&gt;2048&lt;/span&gt;   &lt;span class=&quot;nu0&quot;&gt;4194304&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;  freebsd-swap  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;2.0G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
   &lt;span class=&quot;nu0&quot;&gt;4196352&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;37744640&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;  freebsd-zfs  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;18G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;nu0&quot;&gt;41940992&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;41945048&lt;/span&gt;        - &lt;span class=&quot;kw2&quot;&gt;free&lt;/span&gt; -  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;20G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# gpart resize -i 3 ada0&lt;/span&gt;
ada0p3 resized
&lt;span class=&quot;co0&quot;&gt;# gpart show ada0&lt;/span&gt;
=&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;83886000&lt;/span&gt;  ada0  GPT  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;40G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;  freebsd-boot  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;512K&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;nu0&quot;&gt;1064&lt;/span&gt;       &lt;span class=&quot;nu0&quot;&gt;984&lt;/span&gt;        - &lt;span class=&quot;kw2&quot;&gt;free&lt;/span&gt; -  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;492K&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;nu0&quot;&gt;2048&lt;/span&gt;   &lt;span class=&quot;nu0&quot;&gt;4194304&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;  freebsd-swap  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;2.0G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
   &lt;span class=&quot;nu0&quot;&gt;4196352&lt;/span&gt;  &lt;span class=&quot;nu0&quot;&gt;79689688&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;  freebsd-zfs  &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;38G&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# zpool list&lt;/span&gt;
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zroot  37.5G   708M  36.8G        -         -     &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;  1.00x    ONLINE  -
&lt;span class=&quot;co0&quot;&gt;# zpool status&lt;/span&gt;
  pool: zroot
 state: ONLINE
config:
&amp;nbsp;
        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
          ada0p3    ONLINE       &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
&amp;nbsp;
errors: No known data errors
&lt;span class=&quot;co0&quot;&gt;# zpool set autoexpand=off zroot&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# zpool get autoexpand zroot&lt;/span&gt;
NAME   PROPERTY    VALUE   SOURCE
zroot  autoexpand  off     default
&lt;span class=&quot;co0&quot;&gt;#&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
これで終わり。
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 26 Sep 2021 17:05:00 +0000</pubDate>
        </item>
    </channel>
</rss>
