ENECHANGE Developer Blog

ENECHANGE開発者ブログ

Debian 10 で環境再構築したときの記録

ENECHANGE チーフエンジニアの cuzic こと、川西です。

今回は Debian 10 で環境構築をやりなおしたので、その内容を共有します。

はじめに

さて、最近、パソコンが新しくなって、それにともないそれまで Debian 8 を使っていたのを、もろもろ新しくしようと思って Debian 10 に移行しました。

自分用のメモとしてその記録の内容を共有しておきます。

私は、Debian + XMonad (Haskell製のタイル型ウィンイドウマネージャ)という環境を使っており、あまりネット上に参考になる記事が多くないという理由もあります。

構築の方針

私は、ホストは Windows で、VirtualBox を使って、ゲストOS として Debian を動かしています。

Windows から VirtualBox 上の Debian を利用する理由。

Windows でしか動作しないソフトウェアもまだまだ多いですし、Mac よりも Windows の方が同じ値段で性能面で優れたパソコンが手に入ります。VirtualBox を使うとパソコン買い換え時の移行の手間を軽減できるメリットもあり、昔からずっと VirtualBox を使っています。

私は親指シフトキーボード という日本語配列を使っています。Windows では親指シフトキーボードのエミュレートシステムはいくつかあり、導入も簡単ですが、Linux ではカンタンではありません(少なくとも以前検証した時カンタンではありませんでした)。そのため、日本語を書くときは Windows 上で行い、 Linux ではローマ字入力であまり日本語の長文を書かないという運用をしています。

Mac と違い、Windows のパソコンには「変換」キーと「無変換」キーがあります。親指シフトユーザーとして、これらのキーの存在はとても便利です。 Mac にも「英数」や「かな」キーで代用する設定ができますが、私は Windows の方が親指シフトキーボードを利用しやすいと感じています。

XMonad を使う経緯

私は XMonad というウィンドウマネージャを使っています。

昔、私もどんな環境が使いやすいか試行錯誤していた時期があります。タブに対応したエディタ。タブに対応したターミナルエミュレータ。 GNU screentmux を使った切り替え。vim のエディタ機能を活用したスクリーンの水平分割や垂直分割。さまざまな方法を試してきました。 これらは問題の一部を解決するものであるのですが、これらを使っていた時、あの作業の途中の状態はどこにあったのかと、迷子になって探すことなどが多くありました。

あるとき友人の Debian ユーザから、 関数型プログラミング言語 Haskell 製のウィンドウマネージャ XMonad を勧められました。 Xmonad を使うことで、ウィンドウマネージャのレイヤで仮想デスクトップの切り替え、ウィンドウの分割が実現できます。 脳への負担を減らすためには、やらないことを決めることが大切です。 私は XMonad に移行するにあたって、エディタやターミナルエミュレータの機能を用いた複数タブの利用、ウィンドウ内の水平分割、垂直分割などは一切使わない作業スタイルへと移行しました。XMonad の仮想デスクトップの切り替え、ウィンドウ分割機能のみを使うということです。それにより、迷子になることが減り、脳への負担が激減しました。ウィンドウマネージャのレベルで実現されているためエディタの画面でもそうでなくても同じ操作です。仮想デスクトップを切り替えれば、すべての画面を確認できます。開発生産性が高まったと感じています。

Debian を使って、軽量な環境を構築

また以前は、Ubuntu をインストールしてその上に XMonad をインストールし、それから日本語入力等の設定を残したまま、ウィンドウマネージャを XMonad に変更していました。 しかしながら、Ubuntu でインストールされる多くのソフトウェアを利用することはほぼありません。ほとんどずっとターミナルエミュレータの画面を表示しており、git や ruby やエディタなど決まったソフトウェアしか使わないからです。Ubuntu は起動が遅くなったり、容量が増えてしまったりして、ムダが多いと感じるようになりました。

そういう背景もあり、今回は Linux の勉強も兼ねて、X ウィンドウ・デスクトップ環境をバンドルインストールせずに Debian をインストールして、それから自分で X 環境を構築し、XMonad をインストールする流れで進めることにしました。 これで、不要なパッケージが多数インストールされることがなくなり、より環境をコンパクトにすることができます。

さらに、さまざまなプロジェクトで開発を行う関係上、Ruby、Python、Node、PostgreSQL、MySQL のそれぞれ最新バージョンを利用できるようにしておく必要があり、合わせて実施しました。

具体的な環境構築手順

Debian のインストール

VirtualBox 経由ですが、まずは debian のページ で ISO を取得して それを使って、インストールします。

インストールの流れの中で、本来 GNOME が標準インストールされる、Debian Desktop Environment の選択肢をチェックせず、インストールしないようにすることがポイントです。

この初期インストールの中で、ユーザ cuzic を作成しています。

sudo できるようにする

まずは、sudo ができるようにならないと、何かと不便です。

sudo というユーザグループに所属すれば、sudo が使えるようになります。 下記のコマンドで 自分のアカウントを sudo グループに所属させます。

$ sudo su -
$ usermod -G sudo cuzic

xmonad、nodm、x-window-system などをインストールする

sudo できるようになったら、次にデスクトップ環境を構築します。 デスクトップ環境を構築し、 VBoxGuestAddition を導入すれば、 Windows(ホスト)側とクリップボードの共有など、便利な機能が 使えます。作業効率が改善します。

下記のコマンドで X 関係で必要になるパッケージを導入します。

$ sudo apt install xmonad x-window-system urxvt vim

xmonad の設定

XMonad を利用するためには最低限の設定が必要です。

とりあえず、こちらのサイト を参考に下記の設定をしました。

$ mkdir -p ~/.xmonad
$ vim ~/.xmonad/xmonad.hs
import XMonad
import XMonad.Config.Desktop

main = xmonad desktopConfig
    { terminal    = "urxvt"
    , modMask     = mod4Mask
    }

XMonad は Haskell で作られているので、設定ファイルも Haskell で記述します。

$ xmonad --recompile

を実行して、この設定が正しく動作するかを確認します。

問題なければ、startx を実行して、問題なく X が起動できるかの確認します。

VirtualBox Guest Addition の導入

X が起動できれば、VIrtualBox Guest Addition を導入します。

依存関係にあるパッケージをインストールします。

$ sudo apt install linux-headers-$(uname -r)

次に、VirtualBox のメニューから Guest Addition のイメージを 挿入した上で、

$ sudo mount /media/cdrom
$ sudo bash /media/cdrom/VBoxLinuxAdditions.run

を実行します。

下記のように表示されれば成功です。

Successfully installed the VirtualBox Guest Additions.
You must restart your guest system in order to complete the installation.

正常に完了できれば

$ sudo reboot

と実行して、 Guest Addition に関する設定を反映させます。

ディスプレイマネージャ nodm の導入、構築

ディスプレイマネージャとは、ログインするユーザや パスワードの入力が求められる画面を表示する機能を 実現するためのソフトウェアです。

今回の環境構築では利便性を優先し、 nodm というログイン画面をスキップできる ディスプレイマネージャを採用します。

まずは nodm と vim をインストールして

$ sudo apt install nodm vim

そして、nodm の設定ファイルを編集します。

$ sudo vim /etc/default/nodm

NODM_USER という環境変数に対して、ログインユーザを設定します。

NODM_USER=cuzic

ほかの設定はデフォルトのままで問題ありません。

GUIで起動するようにする

下記のコマンドを実行して、 GUI で起動するように変更します。

$ sudo systemctl enable graphical.target
$ sudo systemctl set-default graphical.target

再起動

設定できれば、再起動してログインなしで X が正常に立ち上がるかを 確認します。

$ sudo reboot

これでダメだった場合は、

$ sudo systemctl set-default multi-user.target

で、GUI から CUI に戻すことができます。

日本語環境の構築

このままでは、日本語が使えません。 日本語環境は ibus-mozc を使って構築します。

ibus 、 mozc のインストール

ibus-mozc のパッケージをインストールします。 zenity や dbus-x11 は、後ほど実行する im-config や ibus-setup で必要となるパッケージです。

$ sudo apt install ibus-mozc zenity dbus-x11

im-config の設定

im-config で ibus を使うように設定します。

$ im-config -c

ibus を利用するように設定します。

ibus-setup の設定

ibus-setup の設定では、「入力メソッド」のタブが重要です。

いろんなやり方があるのですが、私は入力メソッドを「日本語 - Mozc」だけに した上で Mozc 側で半角英数入力と、日本語入力を切り替えるような形に設定しています。

ibus-setup の入力メソッドタブ
ibus-setup の入力メソッドタブ、Mozc だけになっている

この設定は、Windows と操作感が似ており、脳の負担が少なくて済みます。

mozc の設定

さらにこの画面から Mozc の設定を行うことができます。

デフォルトの mozc の設定では 半角全角のボタンで IME を有効化することができます。 好みにカスタマイズしましょう。

これで、日本語入力環境の設定は完了です。

Ruby、Python 、Node のインストール

Ruby のインストール

Ruby はいろんなプロジェクトでいろんな Ruby のバージョンを利用することがあるので、 rbenv 経由でインストールします。

必要なパッケージのインストール

ここでは build-dep というのを使って、依存関係にあるパッケージを一気にインストールします。 ほかにも必要となるパッケージもまとめてインストールしておきます。

$ sudo apt build-dep ruby
$ sudo apt install libssl-dev libreadline-dev libxml2-dev libgdbm-dev

rbenv のインストール

次に rbenv をインストールします。

合わせて、 ruby-build も同時にインストールします。

$ git clone git://github.com/sstephenson/rbenv.git $HOME/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> $HOME/.bashrc
$ echo 'eval "$(rbenv init -)"' >> $HOME/.bash_profile
$ source $HOME/.bash_profile
$ mkdir -p "$(rbenv root)"/plugins
$ git clone git://github.com/sstephenson/ruby-build.git "$(rbenv root)"/plugins/ruby-build

ruby のインストール

インストール可能なバージョンを確認します。

$ rbenv install -l

ここでは 2.6.5 をインストールします。

$ rbenv install 2.6.5

Python のインストール

次に Python をインストールします。 Python は pyenv で インストールします。

pyenv のインストール

$ sudo apt build-dep python # 依存関係のインストール

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> $HOME/.bashrc
$ echo 'eval "$(pyenv init -)"' >> $HOME/.bash_profile

python のインストール

$ pyenv install -l

インストール可能なバージョンを確認します。

今回は 3.7.6 をインストールします。

$ pyenv install 3.7.6

Node のインストール

Node も同様に nodenv 経由でインストールします。

$ git clone https://github.com/nodenv/nodenv.git ~/.nodenv
$ echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> $HOME/.bashrc
$ echo 'eval "$(nodenv init -)"' >> $HOME/.bashrc
$ source ~/.bashrc

$ mkdir -p "$(nodenv root)"/plugins
$ git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build
$ nodenv install -l
$ nodenv install 13.7.0

PostgreSQL 、MySQL のインストール

次に PostgreSQL や MySQL をインストールします。

PostgreSQL のインストール

PostgreSQL も複数バージョンを使うことがありえますので、 postgresql.org がホストしている apt レポを使って、インストールします。

依存関係のパッケージのインストール

依存関係のパッケージをインストールします。

$ sudo apt-get install curl ca-certificates gnupg
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

PostgreSQL の apt repository を追加

pgdg.list という名前で apt repository のファイルを作成します。

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

追加した apt repository のパッケージ情報を反映します。

$ sudo apt update

PostgreSQL のインストール

今回は PostgreSQL 11 をインストールします。

$ sudo apt-get install postgresql-11 pgadmin4 libpq-dev

PostgreSQL のユーザの作成

私はいつも PostgreSQL 用に別にユーザを作成しています。

そのため、ユーザを作成します。

$ sudo su - postgres

psql
create user username with superuser password 'very-complex-password';

MySQL のインストール

MySQL は Oracle 社が提供している apt repo を使ってインストールします。

$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb

$ sudo apt install ./mysql-apt-config_0.8.14-1_all.deb
$ sudo apt update
$ sudo apt install mysql-server mysql-client libmysqlclient-dev

おわりに

これで、一通りの環境構築は完了です。

まとめとしては下記のような環境を構築しました。

  • OS
    • Debian 10
  • ディスプレイマネージャ
    • nodm
  • ウィンドウマネージャ
    • XMonad
  • 日本語入力
    • ibus-mozc
  • Ruby, Python, Node
    • rbenv, pyenv, nodenv 経由
  • PostgreSQL
    • PGDG の repo で最新版をインストール
  • MySQL
    • Oracle 提供の repo で最新版をインストール

みなさまの参考になりましたら、幸いです。