pig's diary

何でも忘れるので万年初心者ね

Arch LinuxをUSBからインストールほか

安い中古PCを何台か買って、LANに繋いで遊んでみた。コモディティマシンで分散で何か。Intel Core2Duo が1800円で買えたので(送料1500円)いつもどおり Arch Linux を入れる。もちろん問題が起きる。メモをする。

USBフラッシュメモリをインストールメディアに使う

いつもはDVDだったのだけど、買ったマシンはDVDドライブが使えない。USBにarchlinux-*.iso を書き込んで、起動時に使う。

BIOSでブートデバイスの順番を変更。中古PCとか始めててドキドキだったけど、BIOSちゃんと動いてよかった。そういえばHDDで起動したとき「This HDD was erased」とかばーんってモニタに出たけど、これどうやって出してるんだろう?消されたこと、何で覚えてるんだろう。

初め Mac OSdd したら失敗、「Isolinux.bin missing or corrupt」とか言われMacをやめて別の動いてる Arch Linuxdd したらすぐに動いた。リンク先のとおり、うまく行くマシンと行かないマシンがある、という同じ結論。

というか手元のLinuxから挿してるUSBが見れない

lsblk は物理ディスクの一覧を出すコマンドだが、USBを挿してもそれらしい物が出てこない。dmesg -w して抜き挿しすると、反応がある。

この [SOLVED] Unable to mount USB, not showing up in lsblk / Newbie Corner / Arch Linux Forums は「もしかして最近 pacman -Syu したままrebootしてないとか?」「あーそれだわ」ってあって、同じ結論だった。再起動したら lsblk にちゃんと出てきた。

isoを書き込む

推奨方法の dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx && sync とほぼ同じに書き込む。やる前に bs オプションについてちょっと調べ、一度に読み書きするバッファの量だそう。試しに bs=256M とかやっても動いた。それで俺が得をしたのかどうかは調べてない。

起動

電源投入、USBが起動デバイスとして認識され、Arch Linux ってちゃんと出てくる。ほっ。

ネットワークインターフェースデバイスが出てこない、LANケーブルでネットできない

俺は Network Interface Card が壊れた中古マシンをつかまされたのか?無保証って書いてあったぞ?これが中古クオリティなのか?部品とかそいうのも買わないとなのか、俺箱の中身まで面倒見るの超面倒だぞ?どうする?

この最後の彼が言う通り rmmod tg3 ; modprobe broadcom ; modprobe tg3 でモジュールをロードし直すと解決した。lspciを見ると tg3 だけっぽいのに・・。

$ lspci
(...)
01:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01)
        Subsystem: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at a0400000 (64-bit, prefetchable) [size=64K]
        Memory at a0410000 (64-bit, prefetchable) [size=64K]
        Capabilities: <access denied>
        Kernel driver in use: tg3
        Kernel modules: tg3
(...)

あとはいつも通り

SWAPパーティションは必要なのかな?といつも思ってたんだが、RAMが1GBより少ない人に推奨、他は自由 とあったので今回は無しにしてみる。bootとrootだけ。

こんどGistに、シェルスクリプトのfdiskとかpacstrapとか全部やってくれる君を書こう。インストールメディアでネットに繋がった時点で落として実行。こうして人はAnsibleを学ぶ機会を逃すんだね。

というわけで

またも全ての問題はarchlinuxドメインに解決策が載っていたのだった。平和は保たれた、めでたし。

Elixirプロセス基礎

Processes - Elixir

  • OTPの軽量プロセスはLinuxのプロセスとは違う、数百が同時に稼働するのも普通
  • プロセス同士の通信は sendreceive で行われる send すると、対象のプロセスの"Mailbox"にメッセージが蓄えられる matchするとメッセージが消化される
  • 例外が起きると、そのプロセスが死ぬだけ。デフォルトでは他のプロセスに影響を与えない エラーを伝搬させたい時は明示的にLinkさせる必要がある。 プロセスに問題が起きたら死なせ、Supervisorにハンドルさせるのがパターン

DHCPのLAN内で固定IPにする2つの方法

の覚書

クライアント側で設定する場合

クライアント側のインターフェースでDHCPでなく特定のIPを持つように設定する。サブネットマスク(255.255.255.0 や /24 など)、ゲートウェイDNSIPアドレスが必要になる。

サーバへの作業が不要で楽だが、LAN内でIPが重複すると問題なので結局LAN内で足並みを合わせる必要がある。Aさんは172.168.0.200、Bさんは・・とか。

サーバ側で設定

ルーター or dhcpdが動いているサーバに、MACアドレス指定でIPを指定する。あとはクライアント側でDHCPでIPを引くと、指定した通りのものになるので楽。

インターフェースごとのMACアドレスは変わることもあるので、OSの設定で変化しないようにする。Arch Linux の systemd-networkd ではデフォルトでそうなってる。 /usr/lib/systemd/network/99-default.linkMAC アドレスを固定にしてる。普通そうなってると思う systemd-networkd - ArchWiki

Linux DHCP サーバでの設定 http://www.atmarkit.co.jp/flinux/rensai/linuxtips/944dhcpfixedip.html

Air Mac の場合はGUIから f:id:piglovesyou:20170104105338p:plain

systemd-networkd + wpa_supplicant でワイヤレスネットワーク接続

netctl で繋いでいたが、別のマシンで systemd-networkd での接続が比較的スムーズに行ったので、母艦の ArchLinux も systemd-networkd で管理することにした。netctl で接続したときはツールがいろいろ出てきて(wifi-menu, wpa_supplicant)、正直どうやって繋がっているのか分かっておらず、接続が切れたときにパニックに陥りすぐ復旧できなかったというのも systemd-networkd に揃える目的の一つ。

基本的に systemd-networkd - ArchWiki に従って進めることでうまくいった。

2010年くらいの Mac miniパーティションを切って Arch Linux を入れている。Wi-Fi インターフェース(手元だと wlp2s0b1)は認識されているのが前提。

$ ip link
...
2: wlp2s0b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
...

まず netctl 時代に作った設定ファイルを消す。systemd-networkd が netctl で作った設定ファイルを使うことも可能のようだが、前述の理由と、Arch Wiki にある方法が最小設定だろうということで、wpa_supplicant に置き換えていく。以下で全部だったと思うが確証はなく、実際は find /etc/systemd/ してネットワーク接続に関係しそうなサービスを全て消していった。

# rm /etc/netctl/wlp2s0*
# systemctl disable netctl-auto@wlp2s0
# systemctl disable 'netctl@wlp2s0b1\x2dSSID.service'

再起動してネットに繋がらないことを確認。次に WPA supplicant - ArchWiki に沿って Wi-Fi 接続設定ファイルを作る。

# cat /etc/wpa_supplicant/wpa_supplicant-wlp2s0b1.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

update_config=1 を追加すると wpa_cli による example.conf への変更が保存されるようになります。

とのこと。このあと wpa_supplicant-wlp2s0b1.conf に Wi-Fi SSID とパスコードが保存される。

# wpa_cli

ここでやることは Wiki にある内容とほぼ同じだったので割愛する。こちらを参照のこと。

WPA supplicant - ArchWiki

しかし私の場合初めに list_networks するとこれから繋ぐ SSID が登録されてあった。netctl も中で同じことをしていたのだろうか? 全て消し、 add_network set_network 0 ssid "MYSSID" set_network 0 psk "passphrase" enable_network 0 しなおした。save_config すると先ほどの wpa_supplicant-wlp2s0b1.conf に保存される。続いて起動時に接続を確立するようサービスを設定。

# systemctl start wpa_supplicant@wlp2s0b1.service
# systemctl enable wpa_supplicant@wlp2s0b1.service

Wi-Fi が利用できる状態になったところで、systemd-networkd がそれを利用しネット接続するための設定をする。Match さえすればファイル名はなんでも良いよう。

$ cat /etc/systemd/network/wlp2s0b1.network
[Match]
Name=wlp2s0b1

[Network]
DHCP=ipv4

全てのオプションは man systemd.network で見られる。

私の場合は再起動が必要だった。ネットに繋がれば成功。

IndexedDB調査

IndexedDBの動きを見てみた。特徴とおぼしき点を列挙する。

  • DBバージョンとマイグレーションのための機構を提供
  • JSONで表現できる型しか保存できない
    • functionが生えてるとこける
  • 主キー、もしくはマイグレーション(onupgradeneeded)で予めindexを作っておいたフィールドでしか検索できない
  • 検索は範囲(range)という形式でのみ行える
  • getAll でレコードの配列を取得する方法と、openCursorで1件1件取得する方法がある
  • offsetで取れない
    • cursor.advance(n)で何とかするしかなさそう

以下は半年後全部忘れちゃった自分がすぐに思い出せる用gist:

gist.github.com

参考 developer.mozilla.org

`pointer-events:none;` で作る視覚効果

知らなかった。こういうのがある。

  pointer-events:none;

stackoverflow.com

IE11+。全ブラウザが実装してる。使えそうだ。

Can I use... Support tables for HTML5, CSS3, etc

これとSVGを組み合わせると、ユーザーの操作を邪魔せずに、ユーザーの注意をコントロールする視覚効果を作れる。新規ユーザーへのチュートリアルや、入力補助、ヘルプなどに使えそう。

Result タブを選んでみてほしい。ユーザーを注目させるための視覚効果としてスポットを動かしている。