NixOS
以前読んだヒラノ教授本を何冊か借りてきた。パワハラ、アカハラの実態が実名でバンバン 出て来る。そこまで言って委員会状態の本だ。なかなか面白い。
『工学部ヒラノ教授のアメリカ武者修行』なんてのに、アメリカのビジネススクールの話が 出てくる。MBAと言う金儲けの資格を取らせる大学の事ね。白熱教室で有名になった、ハーバード大学なんかが、その最たる所らしい。
著者のうがった見方では、あくどい金の亡者量産で、引け目を感じた大学が、正義を振り回して、世間を煙に巻く作戦に出たのではないかと。激同意。
金儲けの方法を教える学校なんで、いかにコストを切り詰めるかってのも重要なテーマになる。 その分野の有名な問題に、配送問題があるとか。大学の教授が書いた教科書には必ずこの問題が 取り上げてあるとか。(教科書を書いた教授は、毎年一定数売れるので、小遣いになる)
全国各地にビール工場があります。消費地は、全国津々浦々。輸送コストを減らすには、なるべく生産工場と消費地が近い方がよい。
とはいえ、キリンの生麦工場とサントリーの多摩川プラントで、東京の胃袋を満たす事は出来ないので、二番目もしくは三番目に近い所から供給する事になる。
生産工場が50か所、消費地が500か所ぐらいなら、力技でも解けるだろうけど、これが増えた場合、答えを出すのが非常に難しくなる。(同種なものには、サラリーマンの巡回問題が有る)
で、ヒラノ教授らが、一生懸命に研究して、単体法とかいう解決方法を提案する訳。でも、 大前提は、需要より供給が上回っているってのがある。十分に供給出来るから、後はどこから 持ってくれば良いか考えるだけ。
じゃ、供給より需要が多い場合の配送問題はどうするか? そんなの答え無しです、って済ませるわけにいかないのが、ビジネスの掟。
アメリカのビジネス・スクールでは、この問題を逆配送に置き換えて解決するそうな。すなわち、消費地から供給地へ配送するって事にして、問題を解く。答えが出たら、配送方向を逆にする。 スマートな方法だけど、これだと絶対にビールが飲めないへき地が出て来る。 アメリカでは、これでよしとするそうな。
これを教えたヒラノ教授は、どうも腑におちないので、この弱者切り捨てをどう思うって宿題を 出したそうな。
金の亡者予備軍の60%がこの方法を支持。他には、超過勤務で生産量を増やす、消費カットをお願いする、値上げする、ビールをアウトソーシング(クアーズのビールにバトワイザーのラベルを貼る)などの回答が有ったそうな。
日本の大学でこの宿題を出した所、第一にすべき事は、頑張って生産能力を上げるって事だった そうな。弱者切り捨てを良しと考える米国、機会平等を願う日本。国民性なんですかね。
ああ、長い枕になったわい。今読んでるH本に、こういうOR関係の例題は出てくるのかな? お茶大の先生が書いたocaml本には、地下鉄問題って事で取り上げてあるけどね。
Install NixOS
先週見つけておいた、関数型パッケージマネージャが動く、NixOSとやらを入れてみた。 入れたのはvBOXの方。だって、インストールの途中でconfigファイルを編集させられるんだ けど、VMWAREのコンソール画面が拡大出来ないので、年寄りには無理と言う情けない理由です。
詳細は上記を参照すると良い。
立ち上げると、いきなりrootでloginされる。 まずは、fdiskして領域を作れ、それをmkfs.ext4して整えろ。続いて、/mntにマウントしとけ。 それで準備完了。オイラーが作ったのは、32Gの / だけって言う、手抜きです。
そこまできたら、
nixos-generate-config --root /mnt
して、configファイルを発生させる。後は、それを編集してくれ。
boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
最初、コメントが付いているので、ここだけは外しておけ。そうしないと、どこに ローダーを入れるか不明って言われて、インストールでこけるぞ。
終わったら
nixos-install
ミニマムインストールなんで、10分ぐらいで完了。最後にrootのパスワードを聞かれるので 答えておしまい。インストール時には、変な事をせず、さっさと終了させるのがこつかな。
[sakae@nixos:~]$ df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 202636 0 202636 0% /dev tmpfs 2026324 0 2026324 0% /dev/shm tmpfs 1013164 3376 1009788 1% /run tmpfs 2026320 360 2025960 1% /run/wrappers /dev/sda1 32895760 1154276 30047432 4% / tmpfs 2026320 0 2026320 0% /sys/fs/cgroup tmpfs 405264 0 405264 0% /run/user/1000
初期インストール後の結果。1Gをちょいと超える状況ね。
再起動して、必要なパッケージを入れていく。どんなパッケージが有るかカタログを 取り寄せておけば、中元ののカタログギフトみたいに好きに出来るぞ。
に、細かい事が書いてある。
[sakae@nixos:~]$ nix-env -qaP '*' | tee CATLOG [sakae@nixos:~]$ wc CATLOG 12405 24810 1046998 CATLOG
これで、カタログを取り寄せ。
[root@nixos:~]# nix-env -iA nixos.emacs25-nox
関数型の禁を破り、その場しのぎで、インストール。
nix-build nix-install-package nixos-option nix-channel nix-instantiate nixos-rebuild nix-collect-garbage nix-log2xml nixos-version nix-copy-closure nixos-build-vms nix-prefetch-url nix-daemon nixos-container nix-pull nix-env nixos-generate-config nix-push nix-generate-patches nixos-help nix-shell nix-hash nixos-install nix-store
nixで始まるこのOS専用コマンドにどんなのが有るか調べてみたら、ガベコレなんののが出てた。ああ、ガベコレって和製英語か。正しくは、collect-gargageなんだな。
それはいいんだけど、その辺の使い方をまとめたhelpコマンドも有ったので、何気に叩いて みたら、見たいならブラウザーを入れろって言われたぞ。ブラウザーってw3m良いのでしょうか?
カタログを見たら、w3mがリストに載ってた。どうもmanの代わりになりそうなので、その場 しのぎのインストールは止めて、きちんとインストールしてみる。/etc/nixos/configuration.nixという設定ファイルに、パッケージ名を書くんだな。
environment.systemPackages = with pkgs; [ w3m-nox ];
頭に、nixosってのを付けるとエラーではじかれる。
nixos-rebuild switch
設定を有効にする為、上記のコマンドを叩く。これで、パッケージがDLされて、所定の場所に 収まって、普通に使えるようになる。
どうなってるの?
後は趣味で必要そうなのを root権限で入れた。どんなのが入ってるか確認するには
[sakae@nixos:~]$ sudo nix-env -q [sudo] password for sakae: emacs-nox-25.1 mlocate-0.26 nvi-1.79 sudo-1.8.20p1 tmux-2.3
root権限で入れたものは、平民もそのまま利用出来る。
[sakae@nixos:~]$ ps awx | grep openssh 514 ? Ss 0:00 /nix/store/vmisgqfbqywgsw9php70bbx90czr398i-openssh-7.4p1/bin/sshd -f /nix/store/9qv6c0ypqqh78ml3hfya111k7bmjd73v-sshd_config 880 ? Ss 0:00 /nix/store/vmisgqfbqywgsw9php70bbx90czr398i-openssh-7.4p1/bin/ssh-agent -a /run/user/1000/ssh-agent 1124 pts/1 S+ 0:00 grep openssh
重要なコマンドには署名が施されて、特別な場所に鎮座してるのかな? w3mはシステム扱いに したけど、何処に入ったかな?
[sakae@nixos:~]$ which w3m /run/current-system/sw/bin/w3m [sakae@nixos:~]$ ls -l `which w3m` lrwxrwxrwx 1 root root 73 Jan 1 1970 /run/current-system/sw/bin/w3m -> /nix/store/nkgnwkd5yrhgndxf70lrk68vpcigyljp-w3m-0.5.3+git20161120/bin/w3m
珍しい場所だな。それじゃ、アドホックな方法で入れたやつは?
[sakae@nixos:~]$ which emacs /nix/var/nix/profiles/default/bin/emacs [sakae@nixos:~]$ ls -l `which emacs` lrwxrwxrwx 1 root root 64 Jan 1 1970 /nix/var/nix/profiles/default/bin/emacs -> /nix/store/05555inr2h6x6psrcwr68z0y7qf7407l-emacs-25.1/bin/emacs
普通のコマンドも、普段見慣れないような場所に置いてある。しかもそいつの実態は、やはり 署名されてて、倉庫とおぼしき場所に置いてあるなあ。
[sakae@nixos:~]$ ldd `which emacs` linux-vdso.so.1 (0x00007ffd05b7b000) librt.so.1 => /nix/store/kjwbqnh13dxh6w4pk2gb3ddmhpiaihqg-glibc-2.25/lib /librt.so.1 (0x00007f445d2df000) libdbus-1.so.3 => /nix/store/0bs7m91wfkx6a90y1py1x5fsxz1h7wcj-dbus-1.10. 16-lib/lib/libdbus-1.so.3 (0x00007f445d08f000) :
中身のライブラリィーまで、書名付きで倉庫にある。徹底してるな。そして、=> て、記号が 一瞬Haskellで使われてる記号に見えてきたぞ。もうHaskell病にかかった証拠ですかね。
後、気になるのは、
[sakae@nixos:~]$ echo $PATH /home/sakae/bin :/run/wrappers/bin :/run/wrappers/bin :/home/sakae/.nix-profile/bin :/home/sakae/.nix-profile/sbin :/home/sakae/.nix-profile/lib/kde4/libexec :/nix/var/nix/profiles/default/bin :/nix/var/nix/profiles/default/sbin :/nix/var/nix/profiles/default/lib/kde4/libexec :/run/current-system/sw/bin :/run/current-system/sw/sbin :/run/current-system/sw/lib/kde4/libexec
思わず、Haskell風に、PATHを整理しちゃったけど、本当にびっくりするぐらい変な所が 列挙されてますなあ。これが関数型パッケージマネージャの正体?
[sakae@nixos:~]$ grep hugs CATLOG nixos.hugs hugs98-200609 [sakae@nixos:~]$ nix-env -iA nixos.hugs installing ‘hugs98-200609’ these paths will be fetched (0.70 MiB download, 4.53 MiB unpacked): /nix/store/ahj84k77ynvcjplrvi9c0ca30pfixd9f-hugs98-200609 fetching path ‘/nix/store/ahj84k77ynvcjplrvi9c0ca30pfixd9f-hugs98-200609’... *** Downloading ‘https://cache.nixos.org/nar/1sckvb73cx5jnsxxdn34y2618i0s1i501vprlx28g9by3i23i5lf.nar.xz’ (signed by ‘cache.nixos.org-1’) to ‘/nix/store/ahj84k77ynvcjplrvi9c0ca30pfixd9f-hugs98-200609’... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 714k 100 714k 0 0 361k 0 0:00:01 0:00:01 --:--:-- 361k building path(s) ‘/nix/store/5vaxm5rfjwdrd251jcank82x5kasqf6m-user-environment’ created 3 symlinks in user environment [sakae@nixos:~]$ ls -l `which hugs` -r-xr-xr-x 1 root root 682104 Jan 1 1970 /home/sakae/.nix-profile/bin/hugs
ユーザーのエリアにもインストール出来るとな。そしてインストール日時はunixが日付を刻み 始めた時ってのが、意味深だなあ。
[sakae@nixos:~]$ locate Prelude.hs /nix/store/ahj84k77ynvcjplrvi9c0ca30pfixd9f-hugs98-200609/lib/hugs/oldlib/EdisonPrelude.hs /nix/store/ahj84k77ynvcjplrvi9c0ca30pfixd9f-hugs98-200609/lib/hugs/packages/base/Prelude.hs /nix/store/ahj84k77ynvcjplrvi9c0ca30pfixd9f-hugs98-200609/lib/hugs/packages/hugsbase/Hugs/Prelude.hs
どうやら、何でも倉庫の中へ放り込む方針みたいだな。
tmpfs /tmp tmpfs rw,nosuid,nodev
RAMDISKもどきを作ろうと思って、/etc/fstabを編集しようとしたら、こやつは読み出し専用だ から、そんな不届きな事は許しませんと言われた。 実体を調べてみると、
[root@nixos:~]# ls -l /etc/fstab lrwxrwxrwx 1 root root 17 Aug 12 14:44 /etc/fstab -> /etc/static/fstab [root@nixos:~]# ls -l /etc/static/fstab lrwxrwxrwx 1 root root 53 Jan 1 1970 /etc/static/fstab -> /nix/store/z4q4smyp69hq44cpbnpd3lflf5gd35qm-etc-fstab [root@nixos:~]# ls -l /nix/store/z4q4smyp69hq44cpbnpd3lflf5gd35qm-etc-fstab -r--r--r-- 1 root root 269 Jan 1 1970 /nix/store/z4q4smyp69hq44cpbnpd3lflf5gd35qm-etc-fstab
なかなか、リンクが好きな人達だ。リンクと言えば、LispとかHaskellのリストを思い出すな。 開発者達は、リンク大好き人間なんだな。と、いう冗談は兎も角、元ネタを書き込み可に しようとすると、
[root@nixos:~]# chmod 644 /nix/store/z4q4smyp69hq44cpbnpd3lflf5gd35qm-etc-fstab chmod: changing permissions of '/nix/store/z4q4smyp69hq44cpbnpd3lflf5gd35qm-etc-fstab': Read-only file system
あろう事か Read-only になってました。悔し紛れに
[root@nixos:~]# mount | grep /nix/store /dev/sda1 on /nix/store type ext4 (ro,relatime,data=ordered)
mount情報をみると、やはりロックがかかってましたよ。暴走してもデータは保護するって言う 強い意志が伺えますよ。
で、ちまちまと取り扱い説明書を見ていたら、付録の A. Configuration Options に オイラーの要求を満たすぴったりなのが出てた。
boot.tmpOnTmpfs Whether to mount a tmpfs on /tmp during boot. Type: boolean Default: false Declared by: <nixpkgs/nixos/modules/system/boot/tmp.nix>
これをヒントに、設定ファイルに下記を書いてrebuild
boot.tmpOnTmpfs = true;
[sakae@nixos:/tmp]$ df -t tmpfs Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 2026324 0 2026324 0% /dev/shm tmpfs 1013164 3392 1009772 1% /run tmpfs 2026320 360 2025960 1% /run/wrappers tmpfs 2026320 0 2026320 0% /sys/fs/cgroup tmpfs 405264 0 405264 0% /run/user/1000 tmpfs 2026320 64 2026256 1% /tmp
これにて、目的達成!
改めて、/etc/fstabに /tmpのマウント情報が反映されてるか調べてみたら、否かでした。 おまけに、このファイルは、自動作成されてるんで、編集不可って但し書きされてた。 なんか、裏でこそこそやられているみたいで、プチ気持ち悪いな。
久々の init.el
emacsが事の他、さっと立ち上がってくるので、そのスピードを削がないように、余計な ものを取り除いて、さっぱり、すっきりさせた。
auto-save-buffers-enhancedは、頻繁にsaveしてくれるというもの。 使うか使いまいか、迷っている。また、パッケージのリフレッシュを有効にしておくと 起動スピードがガタ落ちになるんで、殺してる。
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (package-initialize) ;;(package-refresh-contents) ;(require 'auto-save-buffers-enhanced) ;(auto-save-buffers-enhanced t) (setq auto-save-default nil) (setq make-backup-files nil) (menu-bar-mode -1) (column-number-mode t) (global-set-key "\M-," 'pop-tag-mark) ;; replace M-* (define-key mode-specific-map "v" 'view-mode) ;; C-c v to toggle view-mode (defun other-window-or-split () (interactive) (if (one-window-p) (progn (split-window-vertically) (shrink-window 9)) (progn (other-window 1) (balance-windows) (enlarge-window 9)))) (global-set-key (kbd "C-z") 'other-window-or-split)
これに、色々追加してくんだろうね。