ConoHaとArch LinuxではじめるLinux
windows
- TOP
- Old Archives
- ConoHaとArch LinuxではじめるLinux
ごあいさつ
Hi, there! はるかみです。
この記事はConoha Advent Calendar 2018の7日目として書かれたものだよ。 いままでChienomiを見たことある人もない人も楽しんでいってね。
基本的にChienomiはedgeな記事を書くことが多いけれど、Advent Calendarのときだけは初心者向けの記事を書いたりしているんだ。 Chienomiでは最近で最もアツかったのは高EQ AIに関する記事だよ!
本当はConoHa WINGに関する記事を書こうかと思ったけど、Advent Calendarで書くようなものじゃないと思ったんだ。 考えていたものは検証に5, 6日必要だとわかったから協賛でもしてもらわないと無理だとわかったんだよ。
それにConoHa WINGでConoHa Advent Calendarのハードルも下がって、今年はWINGに関する記事がたくさん載るだろうからね。え?毒が少ないって?さすがに同じAdvent Calendarの記事に毒を吐くのは来年にとっておくよ。
序
あなたはLinuxを使っているだろうか。
最近はLinuxというとドヤりツールになっていたり、あるいはミーハーなものになっていたりもする。 あとは、仕事のための箔付けだろうか。
それはLinuxのなんたるかがわかっていない…と思うのだが、ここではそんな話はおいて、とりあえずLinuxを触ってみたいという人のお手伝いをしよう。
この記事にかかれていることはかなりの部分、過去の記事や他で書いたことと重複してしまうのだが、Advent Calendarの記事ということでご容赦願いたい。
今回はLinuxを全く使ったことのないWindowser向けにエクスプレスで進めていく。 スキル不足が直接に迷惑になるサーバー構築ではなく、またデスクトップ用途でもない。
なお、Linuxそのものを体験して評したいのならばメインマシンにLinuxをインストールするよりない。 LinuxのUXはWindowsのそれよりはるかに優れているが、それはさすがにVPSでわかるようなものではない。
また、副次的に性能の低いコンピュータを使っている人の場合、月1000円から2000円程度で強力なコンピュータにオフロードできる、という面でも話していこうと思う。
SSHを用意する
Windows 10では2017 Fall Creator UpdateからOpenSSHが標準採用になっている。ちなみに、2018 Aprilではサーバーも入っている。 とりあえずまだWindows 10ですらない、という人のことはあまり考えたくないので、そこから話を進めよう。
まずはcmd
を検索、あるいは“プログラムを指定して実行”からcmd
ssh -V
でOpenSSHを確認。
C:\Users\Harukamy>ssh -V
OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4
ssh-keygen
で鍵を作成する。
Microsoftが提供するWindowsアプリでありながらUnixスタイルとWindowsスタイルが混在してとてもわかりづらいことになる。
OpenSSHが使うディレクトリは相変わらず%HOME%\.ssh
なのだが、Explorerでドットファイルが作れないのでコマンドライン上で行う。
>mkdir .ssh
その上でSSH鍵を生成する。
>ssh-keygen -f .ssh/conoha_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .ssh/conoha_rsa.
Your public key has been saved on .ssh/conoha_rsa.pub.
The key fingerprint is
SGA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX harukamy@HACKMAN
the key's randomart image is:
+---[RSA 2048]----+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+---[RSA 2048]----+
このパスフレーズは秘密鍵を暗号化しておき、使用するときに解除して使用するためのパスフレーズである。 システムが十分に安全かつ強固に保護され、運用されているのであれば(物理的に盗まれることも、ネットワークごしに盗まれることも、ディスクをコピーされたとしても使われることも)ないのであればパスフレーズはなくても構わないし、まず考えられない程度に強固なのであればほどほどに強固なパスフレーズでも構わないだろう。
これでホームディレクトリ以下.ssh/conoha_rsa
(秘密鍵)と.ssh/conoha_rsa.pub
(公開鍵)のペアが作成される。
Explorerではとてもホームディレクトリにアクセスしづらいので、そこをなんとかしておこう。
ExplorerでC:\Users\ユーザー名
に移動し、“クイックアクセス”を右クリックして“現在のフォルダーをクイック
アクセスにピン留め”を選択する。
あと、適切なエディタがないのも困るので、インストールしておくといい。 無難なのはみんな大好きNotepad++。
ConoHaでサーバーを立てる
ConoHaでの契約については公式のページをみてほしい。
それではConoHaにログインし、“サーバー追加”からサーバーを追加しよう。 練習用なら512MBで良いだろうし、パフォーマンスオフロードを期待するなら1GB以上にしよう。 OSはもちろん、Arch Linuxである。
Rootパスワードは本当に強固なものにすること。 ここはあまり心配のない部分だが、それでも24文字以上くらいにはして欲しいところだ。
オプションを開き、接続許可ポートを設定する。 IPv4/IPv6ともSSHのみを許可するように設定する。 IPv6のない環境からアクセスするのであればIPv4のみでも構わないし、IPv6でのアクセスが確実な接続形式をとっているのならIPv6のみのほうが良い。
そしてSSH Keyセクションは “キーを新規作成”
を選択し、“登録方法”に“インポート”を選択する。
そして“パブリックキー”のところに、作成した~/.ssh/conoha_rsa.pub
(.pubファイル!!!)の内容をコピペする。
この時点で鍵登録しておくとSSHのパスワード認証が無効化された状態でインスタンスが立つので安全な状態になる。
インスタンスを作成し、起動したら、ConoHaのサーバー一覧からサーバーを開くと“VPS設定”からI逆引きホスト名を知ることができる。
それでは例えばここがv0-0-0-0.a00a.tyo0.static.cnode.io
だと仮定しよう。
SSHでログインする
ではいよいよWindowsに戻ってログインしよう。
OpenSSHの-i
オプションに秘密鍵を指定する。引数はSSHのホストだが、その前にユーザーが必要だ。
>ssh -i .ssh/conoha_rsa root@v0-0-0-0.a00a.tyo0.static.cnode.io
ログインできたらexit
して一旦SSHを抜ける
# exit
もう少し楽にログインできるように設定をしておこう。
.ssh
ディレクトリにconfig
というテキストファイルを作成する。拡張子はない。
UTF-8+LFで編集してくれるエディタを使うのが良いかもしれない。
このファイルは次のような感じだ。
Host conoha-root
HostName v0-0-0-0.a00a.tyo0.static.cnode.io
Port 22
User root
IdentityFile .ssh\conoha_rsa
これで
>ssh conoha-root
とするだけでログインできるようになる。
OpenSSHが使えない場合
TeraTermを使う方法が公式で紹介されている。
TeraTermの使い方と公開鍵の使い方が紹介されている。
ユーザーを作成する
Windowsでは歴史的経緯から曖昧だが、rootユーザーというのは全権を持つ「神」であり、普段使うべきではない。 それどころか、rootのシェルプロセスがあるだけでも望ましくないくらいだ。
Archはインストール時にユーザーを作成しない。自ら作成する必要がある。
ではログインして作業しよう。
ユーザー作成コマンドはuseradd
だが、オプションとしては-U
(ユーザープライマリグループを作成する),
-G
(グループを指定する),
-m
(ホームディレクトリを作成する)を使用する。
このユーザーは管理ユーザーとなるのでwheel
グループに加えておこう。
# useradd -U -G users,wheel -m conohachan
ユーザーのパスワードを設定する。とても強固なものが良い。
# passwd conohachan
ユーザー用の鍵を登録しよう。ここではOpenSSHを前提に進める。
Windowsでもうひとつcmd
を立ち上げ、先程と同じ要領でキーを作る。
>ssh-keygen -f .ssh/conoha-user_rsa
configを追加する。今度は鍵とユーザーが異なる。
Host conoha
HostName v0-0-0-0.a00a.tyo0.static.cnode.io
Port 22
User conohachan
IdentityFile .ssh\conoha-user_rsa
鍵をアップロードする。まだrootでしかログインできないので、rootで送る。
>scp .ssh/conoha-user_rsa.pub conoha-root:.
これでConoHaのrootホームディレクトリにコピーされるので、これをSSHに戻ってセットアップする。
まずはユーザーの.ssh
ディレクトリを作る
# mkdir ~conohachan/.ssh
そして、authorized_keys
というファイルとして配置する。
# mv conoha-user_rsa.pub ~conohachan/.ssh/authorized_keys
このままだとrootユーザー所有ファイルになってしまうので、直しておく。
# chown -R conohachan:conohachan ~conohachan
.ssh
ディレクトリはオーナーのみアクセス可能であることが求められるため、パーミッションを修正する。
# chmod 700 ~conohachan/.ssh
これでユーザーとしてログイン可能になったはずだ。
>ssh conoha
初期設定
まだrootのセッションも閉じないでおこう。 この状態では管理作業ができるのはrootだけなので、conohachanにも許すようにしたいところだ。
/etc/sudoers
というファイルを編集するのだが、これは直接編集してはならない。
visudo
というコマンドを使う。エディタにVIが入っていないのでエディタも指定してあげる必要がある。
# EDITOR=nano visudo
下の方にこんな行がある。
# %wheel ALL=(ALL) ALL
このコメントアウトを外しておく。次のように。
%wheel ALL=(ALL) ALL
オーケー。Ctrl+Oして保存し、Ctrl+Xで終了しよう。
ConoHaでは最近、script側でアップデートするようなので不要に思えるけど、一応アップデートしよう。この作業は定期的にしなければならない。
# pacman -Syu
カーネルパッケージ(linux
というパッケージ)が更新対象に含まれていた場合は再起動する。SSHのセッションは切られる。
# reboot
もう少し使いやすく…
とりあえずここからはLinuxを長年使っている身として「それなりに使いやすい環境を整える」ところをやっておきたいと思う。 特にArch Linuxはミニマルなので足りないと感じるものは色々あるだろう。
パッケージを揃える
まずはユーザーログインする。
>ssh conoha
Enter passphrase for key 'C:\Users\harukamy\.ssh\conoha-user_rsa':
$
ちょっとrootでの作業が続くのでrootになる。
$ sudo bash -l
[sudo] password for conohachan:
#
サーバーなら必要ないのだけど、まずはユーザーで電源切ったり再起動したりできるようにしておこう。pacman
はArch
Linuxのパッケージ管理ソフトウェアであり、ソフトウェアをインストールしたりアンインストールしたりアップグレードしたりできる。
# pacman -S polkit
これでsystemctl poweroff
やsystemctl reboot
がユーザーでできるようになる。
VI, vim,
Zshはなくてはならないソフトウェアだ。あと、ターミナルデュプレクサも欲しいのでtmuxも入れておこう。
Zshはgrml-zsh-config
パッケージをインストールするとすごく使いやすくなる。
あと、このあとyayを入れる関係でgoとgitも入れておく。
# pacman -S vi vim vim-plugins zsh grml-zsh-config tmux go git
いい感じになってきた。ここで一旦rootを抜け、tmuxを起動する。
# exit
$ tmux
tmuxはプレフィックスキーを押したあとになにかキーを押すとtmuxに対する指示になるようになっている。
デフォルトのプレフィックスキーはCtrl+bで、?
を入力することによりキーバインドの一覧が表示される。
とりあえずc
が新しいウィンドウを作成するコマンドなので、Ctrl+b
Ctrl+cと入力しよう。
これでわかりにくいがふたつのウィンドウができた。n
コマンドによりこのウィンドウを行き来できる。
pacmanが扱うことができるのはArch Linuxの公式パッケージだけだ。 AURという、非公式の(しかし、運営自体は公式に行われている)パッケージも扱いたいので、yayというソフトウェアをインストールする。 手順は
- Gitを使ってyayのリポジトリをコピー
- yayディレクトリに移動
- makepkgでパッケージを作成
- pacmanで作成したパッケージをインストール
$ git clone 'https://aur.archlinux.org/yay.git'
$ cd yay
$ makepkg
$ sudo pacman -U *.pkg.tar.xz
これでAURのパッケージもインストールすることができる。 もし、yayに不満ならばついでにもうひとつのAURヘルパーであるtrizenもインストールしておこう。pacmanと違い、AURヘルパーはユーザーとして実行する。
$ yay -S trizen
yayやTrizenは公式のパッケージも扱うことができる。
見やすく、使いやすく
まずはすごく簡単な話として、Bashなど投げ捨ててZshにしよう。 Bashなんてゴミだ。
まずは.zshrc
を作っておく。
$ touch .zshrc
オーケー。Zshにしよう。
$ chsh
Changing shell for conohachan.
Password:
New shell [/bin/bash]
> /bin/zsh
chshはログインシェルを変更するだけなので、今のシェルは変更されない。 一刻も早くBashやZshに変えたいので、Zshでログインしよう。
$ zsh -l
%
Poifect!
grml-zsh-config
をインストールしているのでとても快適に仕上がっているはずだ。
とりあえず途中でわからなくなったら、わかるところまで打ってからTAB連打で切り抜けられる。オプションやオプション引数なんかもだ。
あと、f/b/b<TAB>
でfoo/bar/baz
に展開する、なんてこともできるようになる。
さらにZshを強化して、Zshから離れられない体にしてやろう。
$ yay -S zsh-completions zsh-syntax-highlighting
Syntax
Highlightを使用するため、.zshrc
に次のような記述を行う。
vimが使えるならvimを使えばいいし、ダメならnanoでもいい。
if [[ -f /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]]
then
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
fi
grml-zsh-configはヒストリを辿ったときに「既に第一ワードを入力している場合は第一ワードを確定として、途中の場合は第一ワードの検索開始時カーソル位置までを確定として辿り、カーソルは末尾に移動する」という挙動になっているのだが、「常にカーソル位置までを確定として履歴を辿る」という機能も欲しいのではないだろうか。
というわけで、PgUp/PgDownでそのような検索ができるように.zshrc
を追記する。
autoload -U history-search
bindkey -M emacs "\e[5~" history-beginning-search-backward
bindkey -M emacs "\e[6~" history-beginning-search-forward
うーん、beautiful!
さて、ここからはちょっと複雑なことをする。 わかりやすく美しいZshプロンプトのPowerlevel9kを使いたいと思うのだが、これはWindowsだとひと手間ふた手間ある感じだ。
とりあえずインストールだけはしておこう。
$ sudo pacman -S zsh-theme-powerlevel9k
ここからは一旦ログアウトして(各シェルのログアウトしたあとSSHからログアウトするのを忘れずに)Windowsだ。まずはGit for Windowsをインストールする。
これで様々な問題を解消できるようになる。別にMSYS2を入れてもらっても構わないのだが、Git Bashが各種設定を済ませてあるので話が早い。
そして、次にCicaフォントをインストールする。 完全なPowerlineグリフを持っているので話が一番てっとりばやい。このフォント、グリフが豊富で見やすく、制限された状況で本当に便利だ。
で、Git Bashを起動して、右クリックからのOptionsで、フォントをCicaにする。ここまでやっておかないと後で困る。 それではGit Bashからログインしてみよう。
$ ssh conoha
通常Git Bashでも.exe
は省略できないのだが、sshはGit
Bash側で定義されており、省略できる。
minttyになったことでだいぶ見やすくなったのではないだろうか。Cicaフォントだし。 で、powerlevel9kなのだけど、とりあえず私がサーバーで使っている設定を晒そう。
prompt off
POWERLEVEL9K_MODE=awesome-fontconfig
source /usr/share/zsh-theme-powerlevel9k/powerlevel9k.zsh-theme
zle-keymap-select() {
zle reset-prompt
zle -R
}
zle -N zle-keymap-select
POWERLEVEL9K_SHORTEN_STRATEGY=truncate_from_right
POWERLEVEL9K_SHORTEN_DIR_LENGTH=5
POWERLEVEL9K_SHORTEN_DELIMITER=".."
# Colorize
POWERLEVEL9K_OS_ICON_BACKGROUND="white"
POWERLEVEL9K_OS_ICON_FOREGROUND="blue"
#POWERLEVEL9K_DIR_HOME_FOREGROUND="white"
#POWERLEVEL9K_DIR_HOME_SUBFOLDER_FOREGROUND="white"
#POWERLEVEL9K_DIR_DEFAULT_FOREGROUND="white"
POWERLEVEL9K_USER_DEFAULT_BACKGROUND=white
POWERLEVEL9K_USER_DEFAULT_FOREGROUND=111
POWERLEVEL9K_USER_ROOT_BACKGROUND=red
POWERLEVEL9K_USER_ROOT_FOREGROUND=black
POWERLEVEL9K_USER_SUDO_BACKGROUND=051
POWERLEVEL9K_USER_SUDO_FOREGROUND=052
POWERLEVEL9K_USER_ICON="\uF415"
POWERLEVEL9K_ROOT_ICON="#"
POWERLEVEL9K_SUDO_ICON="\uF09C"
POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=051
POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=168
POWERLEVEL9K_VCS_CLEAN_BACKGROUND=147
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=174
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=139
POWERLEVEL9K_VCS_CLEAN_FOREGROUND=black
POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=black
POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=black
POWERLEVEL9K_HOST_REMOTE_FOREGROUND=162
POWERLEVEL9K_HOST_REMOTE_BACKGROUND=223
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon vi_mode user host dir newline)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs command_execution_time vcs)
これはVIモードで使うことを前提にしているので、一般化すると次のような感じか。
で、powerlevel9kなのだけど、とりあえず私がサーバーで使っている設定を晒そう。
prompt off
POWERLEVEL9K_MODE=awesome-fontconfig
source /usr/share/zsh-theme-powerlevel9k/powerlevel9k.zsh-theme
POWERLEVEL9K_SHORTEN_STRATEGY=truncate_from_right
POWERLEVEL9K_SHORTEN_DIR_LENGTH=8
POWERLEVEL9K_SHORTEN_DELIMITER=".."
# Colorize
POWERLEVEL9K_OS_ICON_BACKGROUND="white"
POWERLEVEL9K_OS_ICON_FOREGROUND="blue"
POWERLEVEL9K_USER_DEFAULT_BACKGROUND=white
POWERLEVEL9K_USER_DEFAULT_FOREGROUND=111
POWERLEVEL9K_USER_ROOT_BACKGROUND=red
POWERLEVEL9K_USER_ROOT_FOREGROUND=black
POWERLEVEL9K_USER_SUDO_BACKGROUND=051
POWERLEVEL9K_USER_SUDO_FOREGROUND=052
POWERLEVEL9K_USER_ICON="\uF415"
POWERLEVEL9K_ROOT_ICON="#"
POWERLEVEL9K_SUDO_ICON="\uF09C"
POWERLEVEL9K_VCS_CLEAN_BACKGROUND=147
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=174
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=139
POWERLEVEL9K_VCS_CLEAN_FOREGROUND=black
POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=black
POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=black
POWERLEVEL9K_HOST_REMOTE_FOREGROUND=162
POWERLEVEL9K_HOST_REMOTE_BACKGROUND=223
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon user host dir newline)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs command_execution_time vcs)
grml-zsh-configを使っている関係で先にprompt off
するのは必須。
FOREGROUNDとBACKGROUNDの色はお好みで、という感じだ。
Zsh上で(つまり、ログインしたConoha上で)
% for i in {000..255}; do print -P "$i %K{$i} %k"; done
とやれば、番号ごとにどんな色か把握できる。 もちろん、もっと好みに設定を変更しても構わないだろう。
これも.zshrc
に記述する。
この設定は作業中のミスをなくすために行っているもので、実のところ私は普段はPowerlevel9kを使っていない。 だが、SSHから入ったときだけPowerlevel9kになるようにしており、ホストごとに色を変えてある。このことにより、「ローカルホストかリモートホストかを間違える」事故を防止している。
実際、普段はgrmlデフォルト
このホストにSSHで入るとこうなる。
フォントが設定されていないcmd.exe
から入ると表示が乱れている。右側のウィジットが次行に表示されているので使えないこともないが…
Git Bashなら正しく表示される。
Powerlevel9kの利用は好みの問題だと思うけれど、Git Bash + Cicaという組み合わせはやって損がないのではないだろうか。
Powerlevel9kの利用は好みの問題だと思うけれど、Git Bash + Cicaという組み合わせはやって損がないのではないだろうか。
自動アップグレード
とりあえず毎日朝6時にアップグレードするようにしてみよう。 Arch LinuxのinitであるSystemdというものを利用する。SystemdにはSystemdタイマーというジョブスケジューラがあるので、これを使うのだが、説明はとても難しいのでとりあえず例示にとどめよう。
rootとして/etc/systemd/update.service
を作成する。
% sudo nano /etc/systemd/update.service
[Unit]
Description=update package
RefuseManualStart=no
RefuseManualStop=yes
[Service]
Type=oneshot
ExecStart=/bin/pacman -Syu --noconfirm
ExecStartPost=/bin/reboot
続いて/etc/systemd/update.timer
を作成する。
% sudo nano /etc/systemd/update.timer
[Unit]
Description=Automatic update packages
[Timer]
OnCalendar=*-*-* 06:00:00
Persistent=true
[Install]
WantedBy=timers.target
時は来たれり
バッチリだ。ここまで来れば、 サービスや他者に迷惑をかけない範囲であれば 君が学んだことを存分に発揮できる場が出来上がったはずだ。
例えばvimを練習したいのなら
% vim vim-training-file
とかやればいいし、Pythonでプログラムを書きたいなら
% vim myfirst.py
とかやればいい。
Linuxについて教えると話は無限に長くなるし、そもそもここまでの一連の作業でそれなりにLinuxに慣れる要素もあったので、Advent Calendarの記事としてはこれくらいで良いではないかと思っている。 この記事のソースファイルはこの行が606行目だし。
というわけで、世の中の人がちょっとでもLinuxに、そしてコンピュータに関心を持ってくれれば幸いだ。 ついでに、こんなふうに簡単にサーバーを立てて、練習やアウトソースにも使えるConoHaは素晴らしいサービスです!(おべっか)
Linuxについての突っ込んだ話はこのChienomiでしているから、関心がある人はぜひチェックして欲しい。 コンピュータやLinuxについて学びたい、教えて欲しいという人はぜひMimir Yokohamaへどうぞ。
それでは今年もこのへんで。はるかみ☆でした♪