はじめに
前回の記事でzsh
のフレームワークとなるprezto
を改めて触っていたらLinux
やEC2
でも一般ユーザ・root問わずに使えたら便利だなと思いやってみました。
インストール手順の整理
以下公式の手順だと実行ユーザーのホームディレクトリにgit clone
でソースをダウンロードしてシンボリックリンクを設定するやり方となっていますが、その場合、ユーザを作成するごとに毎回git clone
で持ってくることになるため、同じソースが散乱し精神衛生上よろしくありません。
そのため、1つのソースを共有しユーザが増えたとしても対応できるようにインストール手順を変更しようと思います。
元々公式の手順で行っていることは単純なので以下の流れで全ユーザ対応を行います。
今回はAmazon Linux 2
のEC2インスタンスにインストールする場合を紹介するので、他のLinux
にインストールする場合は適宜読み替えて対応してください。
EC2事前作業
Amazon Linux 2
のEC2インスタンスにインストールする場合、zsh
もgit
もインストールされていないので、インストールします。
sudo yum -y install zsh
sudo yum -y install git
preztoのダウンロード
prezto
のソースをgit clone
でダウンロードしてきます。
公式ページの手順だとzsh
に変更してから行っていますが、今回は特に変更する必要はありません。
ダウンロード場所は、ユーザのホームディレクトリではなく、全ユーザと共有するので、/usr/local/bin
にでもダウンロードしておきます。
また、元ソースとなるprezto
は隠しファイルにする必要も無いので、「.(ドット)」も外しています。
sudo git clone --recursive https://github.com/sorin-ionescu/prezto.git "/usr/local/bin/zprezto"
新規ユーザ用設定
新規ユーザが追加されたとしてもprezto
が有効になるように以下作業を実施していきます。
必要ファイルのコピー
新規作成ユーザもすぐにprezto
を使えるようにするため、必要なファイルを/etc/skel
にコピーしておきます。
本来はユーザのホームディレクトリ配下にprezto
のソースをダウンロードして、ダウンロードソースにシンボリックリンクを作成する方法となりますが、今回はprezto
のソースを共有しているため、prezto
の設定に関わる各種ファイルは個々のユーザごとに変更できるよう、設定ファイルをそのままコピーしておきます。
zsh
インストールにより、/etc/skel/.zshrc
が作成されているかと思われますが、上書きコピーしてください。
sudo cp /usr/local/bin/zprezto/runcoms/zlogin /etc/skel/.zlogin
sudo cp /usr/local/bin/zprezto/runcoms/zlogout /etc/skel/.zlogout
sudo cp /usr/local/bin/zprezto/runcoms/zpreztorc /etc/skel/.zpreztorc
sudo cp /usr/local/bin/zprezto/runcoms/zprofile /etc/skel/.zprofile
sudo cp /usr/local/bin/zprezto/runcoms/zshenv /etc/skel/.zshenv
sudo cp /usr/local/bin/zprezto/runcoms/zshrc /etc/skel/.zshrc
シンボリックリンクの作成
prezto
のソースディレクトリへのシンボリックリンクを作成します。
sudo ln -s /usr/local/bin/zprezto /etc/skel/.zprezto
テスト用ユーザの作成とプロンプト確認
上記で作業を行った/etc/skel
に各種ファイルの格納とシンボリックリンクを作成しておくことで、新規ユーザ作成時に/etc/skel
に格納されているファイルが新規ユーザのホームディレクトリにコピーされるので、テスト用のユーザを作成し、prezto
が使える状態になっているか確認します。
sudo useradd -s /bin/zsh testuser
テスト用ユーザ作成後、テスト用ユーザにログインしてみて、prezto
のデフォルトプロンプトが表示されればOKです。
sudo su - testuser
終わったらテスト用ユーザは削除しておきましょう。
sudo userdel -r testuser
現行ユーザ用設定
すでに作成済みの現行ユーザもprezto
を有効にするために以下作業を実施していきます。
現行ユーザへの必要ファイルのコピー
上記までの手順で新規ユーザに対してはprezto
対応することができましたが、既存のユーザに対しては対応できていないため、先程と同等の作業を現行ユーザに対しても行います。
sudo cp /usr/local/bin/zprezto/runcoms/zlogin /home/ec2-user/.zlogin
sudo cp /usr/local/bin/zprezto/runcoms/zlogout /home/ec2-user/.zlogout
sudo cp /usr/local/bin/zprezto/runcoms/zpreztorc /home/ec2-user/.zpreztorc
sudo cp /usr/local/bin/zprezto/runcoms/zprofile /home/ec2-user/.zprofile
sudo cp /usr/local/bin/zprezto/runcoms/zshenv /home/ec2-user/.zshenv
sudo cp /usr/local/bin/zprezto/runcoms/zshrc /home/ec2-user/.zshrc
cp /usr/local/bin/zprezto/runcoms/zlogin /root/.zlogin
cp /usr/local/bin/zprezto/runcoms/zlogout /root/.zlogout
cp /usr/local/bin/zprezto/runcoms/zpreztorc /root/.zpreztorc
cp /usr/local/bin/zprezto/runcoms/zprofile /root/.zprofile
cp /usr/local/bin/zprezto/runcoms/zshenv /root/.zshenv
cp /usr/local/bin/zprezto/runcoms/zshrc /root/.zshrc
現行ユーザへのシンボリックリンクの作成
現行ユーザに対してもシンボリックリンクの作成を行います。
ln -s /usr/local/bin/zprezto /home/ec2-user/.zprezto
sudo ln -s /usr/local/bin/zprezto /root/.zprezto
現行ユーザのログインシェル変更
設定が終わったので、root
とec2-user
のログインシェルをbash
からzsh
に変えておこうと思います。
Amazon Linux 2
のEC2にはprezto
の公式ページに書かれているchsh
コマンドが無いので、usermod
でログインシェルを変更します。
sudo usermod -s /bin/zsh ec2-user
sudo usermod -s /bin/zsh root
変更したら/etc/passwd
のログインシェル欄が/bin/zsh
に書き換わっているか確認します。
egrep "^root|^ec2-user" /etc/passwd
root:x:0:0:root:/root:/bin/zsh
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/zsh
現行ユーザのプロンプト確認
上記までの作業で現行ユーザもprezto
が使えるようになっているので、プロンプトが変わるかを確認します。
zsh
と入力し、prezto
のデフォルトプロンプトが表示されればOKです。
zsh
root
ユーザにも切り替えてprezto
のデフォルトプロンプトが表示されればOKです。
sudo su -
おわりに
今回はprezto
の設定と言うよりはLinux
の知識となりましたが、.zpreztorc
等の設定ファイルをユーザごとに分けているため、あるユーザはデフォルトのsolin
テーマを使用し、あるユーザはagnoster
テーマを使用するといったことができるようになりました。
ただし、テーマ自体の設定ファイルは共有ディレクトリ内のファイルとなるため、前回の記事で実施したテーマ自体の書き換えを各ユーザごとに行いたいといった場合はさすがに個別にprezto
をダウンロードする必要がありますが、そのようなレアケースでなければ今回の手順で十分かと思います。