Chienomi

Manjaroの詳細な初期セットアップ手順紹介

Live With Linux::practical

Linuxでは「インストールする」の話はいっぱい出てくるけれど、「セットアップする」があまりなくて、インストールしたあとにつまずく人が多い、らしい。

私自身はセットアップについて何度か解説している1が、今回は手持ちのThinkPad X1 Carbonを再セットアップしたので、具体的に行ったことをかなり詳細に記載し、Gistにアップロードした。

Gistはシェルスクリプトの形式になっているが、あくまで解説なので、そのまま実行できるようなものではない。 (そもそも、環境固有のこともたくさんあるし、「今のバージョンだから」という内容もある。)

前提

私のThinkPad X1 Carbonはあくまで外出作業用であり、外出中はSNSをしたり、動画を見たり、音楽を聴いたりといったことはスマートフォンでやればいいという考えもあるため、かなり軽い構成になっている。

また、メイン環境に関しては私はそもそもマイグレーションするため、かなり特殊なセットアップを行うことから全く参考にならないと思われる。

今回のセットアップでも、ある程度メイン機からデータを引っ張ってきているものが多い。 また、作業内容や設定ファイルなどはmegasync経由でMercurial/Gitで共有しているため、ここらへんは私の運用方法に特有のやり方になっている。 (運用方法自体が参考になる面はあると思う。)

なお、ベースはManjaro Cinnamonであり、Manjaroであってもeditionが違う場合は入れるべきものが大きく変わってくる。

解説

パッケージキャッシュの共有

Pacmanでインストールされる(つまり、AURからビルドするものなどではない)パッケージは/var/cache/pacman/pkg以下に保存される。 このディレクトリは膨れ上がるので、定期的に掃除が必要。

で、Pacmanでのインストール/アップデートを行うとき、このキャッシュにパッケージがある場合、ダウンロードせずにそれを使う。 同じManjaro環境が複数ある場合、メイン機のキャッシュを共有するとかなり効率的になる。

このため、pacman -Syyでデータベースをアップデートしたあと、SSHFSだけをインストールしている。

フォント関係

まず、システムとしてインストールしているものは、次に分けられる。

  • 日本語フォント
  • コーディングフォント
  • Nerdフォント
  • Emoji

色々入れているのは、好みの問題もあるし、メイン機から設定を流用する関係で、メイン機の設定に含まれているフォントがないとちょっと困ってしまうという都合もある。 本当に最小限にするなら、

pacman -S otf-ipafont noto-fonts-emoji ttf-meslo-nerd-font-powerlevel10k

で事足りる(コーディングフォントはNerdフォントを使う前提)。 Powerline10kやPowerlevelを使わない場合は、Nerdフォントではなく、単なるコーディングフォントを入れても良い。 Liberation Monoとかでいいなら別に入れなくても良い。

~/.local/share/fonts以下に入れているのも同じような話。

なお、私はフォント倍率を1.2にしていて、ディスプレイのスケーリングは100%のままにしている。 これは14インチFHDのThinkPadの話であり、13.3インチのラップトップだとUIスケーリングしていたりする。

リポジトリまわり

前述のとおり、Megasync上にリポジトリを配置し、Megasyncを使ってファイルを共有した上で各マシンにcloneし、更新した場合はMegasyncのファイルに対してpushするようになっている。 メイン機に直接pushしないのは、その運用だとメイン機が落としづらく不便なため。

Megasyncは同期型のクラウドストレージだ。 そもそもLinuxに同期できるクライアントがあるかという問題から始まる話になるが、更新競合がある場合を含め、Linux上では圧倒的に「適切に」同期してくれる。 他の選択肢としてはDropboxくらいのもので、Dropboxは端末制限があるため、こういう運用には向かない。 その他にもかなり多くの理由があるが、私はMegasyncを愛用している。過去のことなど忘れた。

ちなみに、過去の経緯としては、Copy.comを最初に使っていて、Copy.comがなくなってしまったのでDropboxに移行し、Dropboxが端末制限を開始したのでMegasyncに移行した。 やっていることはとても単純なので、

megasync上のファイルはEncFSで暗号化されている。 open_encfs.zshkeyringを使ってEncFSをマウントするためのスクリプト。 ここらへんのスクリプトはMultimachines Utilsに置いてある。

open_encfs.zshkeyringを使うのだが、これは互換性があるのやないのや色々あったりする。 とりあえず、現状ではpython-keyringを使えばOK。 keyringはlibsecretのフロントエンドで、この環境だと間接的にGnome Keyringを使う。

id.onは極めて単純なスクリプトだ。

#!/bin/zsh

encfs -i 15 ~/MEGA/KeyManagement.encdroid ~/dsk/idinfo

設定ファイルも作業内容も、基本的に「非常にホットなもの」または「全ホストで共有したいもの」はMegasync+EncFS+Mercurial(or Git)になっている。

こういう使い方だと多くの場合GitよりMercurialに分があるが、MEGA上のリポジトリをbareリポジトリにする形でGitで運用するのも難しいことではない。 Gitの性能もかなり上がっているのでGitにしてもいいとは思うけれど、自分ひとりでの作業の場合、大抵はMercurialのほうが「楽」だ。

My Browser Profile Chooser

My Browser Profile Chooserは、ブラウザプロファイルの使い分けを容易にするためのスクリプトだ。 利用するサービスに特化したプロファイルを作れるため、即座に目的のサービスを利用できる最適な状態にできるほか、サービスにログインしたままの状態にしてもサービスごとにプロファイルを分離することでセキュリティリスクやプライバシーリスクが発生しにくい。 常時プライベートモードにするようなことも可能。 私にとっては不可欠なプログラムである。

この利用にあたって必要なのは

  • My Browser Profile Chooserのインストール
  • ベースとなるブラウザのインストール
  • (Firefoxの場合は) プロファイルの作成
  • browserprofiles.yamlを書く

である。 また、web.desktopを導入することで、My Browser Profile Chooserをデフォルトブラウザにして、特定のブラウザで開くことを強要される事態を回避することができる。

一連の作業はこれを目的としたものだが、_vivaldi_baseは、Vivaldiの場合、初期セットアップに必要な手順が非常に長いため、テンプレートとなるプロファイルを作ってあり、それを取り込んでいる。

私が主に使っているブラウザはFirefoxとVivaldi。 稀にChromiumを必要とすることがあるため、デフォルトはVivaldiが入っていることからFirefoxとChromiumを入れている。

最も、仕事上で色々のブラウザでのデモンストレーションを必要とすることがあるため、X1のブラウザはどんどん増えていく傾向にある。

My Browser Profile Chooserはこちら。

Zsh

Archlinuxの場合、grml-zsh-configを導入すれば基本的なZsh設定は整うため、これを使うのが定石となっている。 Manjaroの場合はmanajro-zsh-configというパッケージもあるのだが、こちらはかなりクセが強く、私はgrml-zsh-configベースで使っている。

私はZshの設定ファイルをMercurialで管理しており、各ホストで共有している。 それを取り込んでいるのだが、そこでZshのプラグインを使うため、利用するプラグインもインストールしている。

XDGディレクトリ周り

XDGディレクトリはデフォルトで日本語だが、めちゃくちゃ使いにくいので、短縮名にしている。 簡単な方法としては言語設定で英語にすることもできるが、それでも面倒なので私は非常に短い名前を採用している。

xdg-user-dirs-updateで反映できるが、XDGディレクトリの名前を変更するとNemoのブックマークが壊れるので手動で直す必要がある。 なお、Bluemanも壊れるから、そちらの修正も必要。

XDGディレクトリの設定はメイン機から流用している。

RedNotebook

さらっと流しているが、日記アプリである。 Megasync+EncFSで直接共有していて、どのマシンでも日記をつけられるようにしている。

SSH周り

私は家のプロバイダーはIPv6を通さないので、時間短縮のため

AddressFamily inet

を入れている。また、X1 Carbonには(というより大抵のPCには)AES-NIが入っているので、chacha20-poly1305@openssh.comを使わせないようにしている。

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com

AuthenticationMethods publickeyは安全性のための予防的な設定だが、これは「設定ミスのカバー用」であり、実際はDenyUsers *が入っているからログインできない。

Match Address 127.0.*.* 192.168.*.*により、ローカルネットからだけログインできるようにしている。 利便性の関係上、パスワードログインを許している。

ただ、ラップトップの場合は公共LANなどでローカルネットに信頼できないホストがいる可能性がある。 そのため、sshdを有効にすることはしておらず、必要なときに手動で有効にする形を取っている。 そもそもローカルネット向けのAuthenticaitonsMethodspasswordを許さない選択肢もある。

ssh-keygen -t ed25519

は鍵を生成しているのだが、これはローカルログイン用で、手間を減らすため。 サーバーなどへのログインは別のキーを使う形だが、ここではキーを作っていない。

なおもう少し複雑な話をすると、AuthorizedKeysFileは複数のファイルを列挙できるようになっている、というかそもそもデフォルトではauthorized_keysauthorized_keys2を読むようになっているものを、デフォルトの設定ファイルがauthorized_keysだけを読むように変更しているという状態になっている。 これを使ってローカルログイン用の認証ファイルを分けておき、共有するという方法でローカルログインを常にpublickeyで行うという運用もできる。

だが、ローカルログインでpasswordを切ると、結構面倒なので、私はデスクトップのローカルログインはpasswordを許している。 詳しい説明は省くが、セキュリティには配慮した運用にしている。このため、こうした手間はかけていない。

また、当然ながらSSH鍵を共有するようなことはしていない。

指紋

指紋認証はLinuxでは結構難しい事情が色々ある部分で、モデル固有の話がどうしても出てくる。

ThinkPad gen5の場合、python-validityを使えば動かせる。2 内容はこれに完全に依存しているが、普通にfprintdを使えば動く環境であれば、インストールと有効化するユニットだけの違いではある。

なお、cinnamon-screensaverに関しては、意図する挙動にするためには

auth include system-auth

を無効にして、その手前に置く必要がある。

ちなみに、この設定はシステム全域のLUKSにより、端末起動時は(長くて複雑な)パスフレーズが要求されることを前提として、「外出時にパスフレーズを入力することにより、ショルダーハッキングによるパスフレーズ流出リスクは、生体認証のリスクより高い」という判断から、外出中に行うログイン、sudo、ロック解除でパスフレーズを打たなくていいようにしている。

なお、ファイル内ではlightdm, sudo, cinnamon-screensaverで有効化しているが、私の意見としてはlightdmに対する設定はいらないと思う。 というのも、Lightdmでの認証を指紋にしても、Gnome Keyringのロック解除にパスフレーズ入力が必要で結局パスフレーズを入力してしまうため、家の中でログインまでやっておいて、外ではあくまでロックで運用するほうが安全だと考えるためだ。

おまけの話

今回はこの記録を作りながらだったため、普段よりもだいぶ時間がかかったが、それでも1時間ほどでセットアップを終えている。

Windowsだと(私はWindowsでインストールする対象が多い事情もあるが)一日作業になる、というかなんなら一日では終わらないことすらあるため、圧倒的に早い。 これに慣れているため、Windowsのセットアップは本当に面倒でイライラしてしまう。

だが、これに関してはLinux環境でもManjaroが突出して早い。 Linux環境でもディストリビューションによってセットアップの所要時間はかなり変わる。 当然ながら、流用なしの前提になるとGentooはかなり時間がかかる。

私がLinuxのセットアップを行う頻度はだいたい年に2〜3回程度。 マシンを購入するたびに発生するのと、環境構成変更などで初期化してセットアップし直すことがまあまああること、サーバーを立てる機会もそれなりにあること(この場合はArchlinuxだが)からそんなものである。

Manjaroくらいサクッとセットアップできると、環境がぐちゃったら気軽に再インストールに踏み切れて良い。 ただ、(Manjaroでのことではないけど)過去には私もバックアップミスとかもやっているので、本当にサクッとやれるようになるには場数が必要。 ホームディレクトリをずっと維持し続けているとものすごく汚れるので、イチから構築して同時に再編成できるようになる必要があるが、バックアップ&リストアでは経験値があまり増えないのも大きい。