前から作業用PCのOSをLinuxにしたかったのですが、MicrosoftのOfficeが必要なことが多いとか、トラブル時に相談できる人が(ラボ内に)居なくて寂しいとか(あと単純にめんどいとか)で、保留にしてました。
今年度になって、Linux触れる人がラボに何人は入ったので、幸せな研究生活のために、Linuxの導入に踏み切りました。
この記事は、私のラボPCにおけるUbuntuのインストールから日ごろの作業のためのセットアップまでを記録したものです。
特に目新しいことはないですし、ググれば出てくる、あるいは各公式に記載されていることばかりだとは思いますが、ブログ執筆欲が高まったので、数ヵ月ぶりのウォーミングアップも兼ねて、書いていきます。
適当なので、書いてある内容が間違っている可能性があります。また、あくまで私が使うPCのセットアップ手順ですので、ご了承ください。
入れるOSは Ubuntu 16.04.02 です[ref]Ubuntu 17.04が導入当時の4日前ぐらいにリリースしていたのですが、LTSではなく、またその後のセットアップで何度も躓いたので止めました。[/ref]。
クライアント用なので、セキュリティは適当です。
あんまり面倒なことはしたくないので、できるだけ楽に使えるツールを選択したり、適当な設定をしたりしています。
OSインストール
まずは、公式から Ubuntu 16.04.02 フリー版のisoイメージをダウンロードしてきて、DVDに焼きます。焼くのに何かツールが必要なのかな?、と思いましたが、何も要らなかった気がします(記憶が曖昧)。
対象のPCにDVDを突っ込んで再起動し、DVDを起動します[ref]必要ならBIOSの設定を適当に変更します。[/ref]。
後は以下の手順でインストールします。
- 言語設定はEnglishを選びます。日本語を打つのは面倒ですし、ホーム配下のディレクトリが「ドキュメント」とか「デスクトップ」って名前だと辛い(後で変えられるけど)ので。その後、「Install Ubuntu」を選択して、インストーラーを起動します[ref]本当はLive Installで一度起動し、動作確認してからInstallしたほうが良いのかな?[/ref]。
- ネットワークに接続します。
- Wifiやグラフィックのソフトウェアは、とりあえず入れておきます。
- パーティションは適当にやってほしいので、Erase disk and install Ubuntuを選択します。暗号化は要らないのでEncryptはチェックせず、Use LVMはなんとなくチェックしときます。
- OSを入れるドライブを選択します。
- 日本ならTokyoを選択します。
- 普通の日本語配列なら Japanese/Japanese を選択します。
- ユーザを設定します。
- インストールを開始します。
インストール後の再起動時に変なエラーが出て何も操作できなくなったら、電源ボタン長押しで強制終了後、もう一度起動すると普通に起動できました(ヤバい)。
初期設定
初回起動時に Keyboard Shortcuts が出てきます。何も考えずに消してしまった後、やっぱり見たくなったら、Super キー (Windows キー) を長押ししましょう。押下中、ショートカット一覧が表示されます。Windowsとキーが異なるショートカットが多いので、ちょくちょく開いて確認してます。
さて、まずはランチャーを綺麗にします。
全部要らないので、右クリック -> Unlock from Launcher で消します。一番上のランチャー(Dash)は消せません。Filesぐらいは残しておいてもいいかもしれません。
アプリケーションは、 Super または Super + A でDashを開き、適当な文字列を入力し検索すると出てきます。
次に、 Ctrl + Alt + T でTerminalを開き、
sudo apt-get -y update && sudo apt-get -y dist-upgrade
でパッケージを更新します。
ついでに、 vim ぐらいは最初に入れておきます。
標準vimだと辛いことがあるので vim-gnome を入れます。
sudo apt-get -y install vim-gnome
後は、Settingsウィンドウを開き、明るさ、自動ロック、モニターなどの設定を弄ります。
日本語の設定
表示言語の設定
Language Supportウィンドウから設定します。
Languageタブを開き、”日本語”をD&Dで一番上まで持ってきた後、Apply System Wideみたいなボタン(記憶が曖昧)をクリックして、変更内容を適用します。
その後、コンピュータを再起動すると、表示言語が日本語になっているはずです。
再起動時に、「標準フォルダーの名前を言語に合わせて更新しますか?」と聞かれますが、英語のままのほうが嬉しいので、「次回から表示しない」にチェック後、「古い名前のままにする」を選択します。
日本語入力
ubuntuで日本語入力を行う - Qiita を参考に mozc を入れます。
sudo apt-get install -y ibus-mozc
でmozcをインストールします。killall ibus-daemon && ibus-daemon -d -x &
でmozcを再起動します。- テキスト入力ウィンドウを開きます。
- 「使用する入力ソース」でMozcを追加し、一番上に持ってきます。
- ついでに英語を消します。
- 「次のソースへ切り替え」で全角/半角キーを登録します。
上の記事に書いてありますが、mozcモードでも全角入力にならないので、タスクバー > Mosc > 入力モード > ひらがな を選択する必要があります(起動後初回のみ)。
Shell
デフォルトはbashですが、 zsh のほうが補完とかいろいろ便利らしいので、入れます。
sudo apt-get install -y zsh
zsh
コマンドでzshを起動します。
初回起動時は.zshrcなどの設定ファイルをどうするか聞かれるので、2 を選択し、適当に作ってもらいます。
私はデフォルトのzshのプロンプトがあまり好きではないので、 ~/.zshrc
L5あたりを prompt redhat
に書き換えました[ref]redhatテーマも微妙なので、たぶんまた後で変えます。[/ref]。
zshrcを編集したら、 source ~/.zshrc
で適用します。
後は、which zsh
でzshの実行ファイルの場所を確認後、chsh
コマンドでそれを指定し、デフォルトのシェルをzshに変更します。
再起動 or リログすれば適用されます。
Terminal
デフォルトのターミナルだと、複数のターミナルを並べて操作したい場合、並べたい数だけターミナルを開いて配置しなければならず、非常に不便です。
いくつもの便利なターミナルソフトがありますが、 terminator が便利かつ楽そうなので、これを使うことにしました。
まずはインストールします。
sudo apt-get install -y terminator
以降、ショートカットでターミナルを開くとterminatorが開くようになります。
若干使いづらいので、設定からプロファイルを以下のように弄ります。
- フォント: Ubuntu Mono 12
- タイトルバー表示のチェックを外す
- カーソル Shape: I型
- 文字と背景の既定の設定: Ambience
ブラウザ
デフォルトでFireFoxは入っていますが、 Chrome を使いたいので入れます。
FireFoxでChrome公式サイトにアクセスし、.debファイルをDLし適当な場所に保存します。
インストールはターミナルから行います。
# DL先のディレクトリに移動
cd ~/Downloads
# インストール
sudo dpkg -i google-chrome-stable_current_amd64.deb || sudo apt-get install -f -y
Chromeを起動できたら、Googleアカウントでログインして同期しておきます。
ツール全般
開発ツールは後述します。
ここではそれ以外のツールを入れます。
ここからだんだん書くのが面倒になってきて、説明が適当になります。
TeamViewer
リモートデスクトップ用のソフトウェアを入れておきます。
Linux専用ならもっと良いのがあるのかもしれませんが、Windowsからも使いますし、使い慣れている TeamViewer を採用します。
wget https://download.teamviewer.com/download/teamviewer_i386.deb
sudo dpkg -i teamviewer_i386.deb || sudo apt-get install -f -y
後は、GUIアプリケーションを起動し、適当に設定します。
Sign in時に端末の認証が必要なことに注意してください。
Google Drive (保留)
Google DriveをUbuntu上で使う歩法としては、 google-drive-ocamlfuse や gnome-control-center を使う方法があるようですが、どちらも動作が安定しなかったため、保留とします。
Dropbox
Dropbox は公式でUbuntu Clientを配布しており、こちらは動作がかなり安定しています。
PileMdの同期ディレクトリなど、同期ファイルを直接頻繁に弄りたい場合は、こちらを使うほうが良さそうです。
wget "https://www.dropbox.com/download?dl=packages/ubuntu/dropbox_2015.10.28_amd64.deb" -O dropbox_2015.10.28_amd64.deb
sudo dpkg dropbox_2015.10.28_amd64.deb
あとは、インストールとかログインとか適当にします。
PileMd
メモやドキュメント用に、Markdown ディターの PileMd を入れます。
# DL & 解凍
wget https://s3-ap-northeast-1.amazonaws.com/pile-md-dist/pilemd.linux-x64.0.9.0.zip
unzip pilemd.linux-x64.0.9.0.zip
# iconをDL
wget https://raw.githubusercontent.com/hirokiky/pilemd/master/icons/pilemd.iconset/icon_32x32%402x.png -O PileMd-linux-x64/icon_32x32_2x.png
# グローバルに移動
sudo mv PileMd-linux-x64 /opt/pilemd
sudo chmod 777 -R /opt/pilemd
# ランチャーに登録
sudo cat << EOS > pilemd.desktop
[Desktop Entry]
Name=PileMd
Categories=GNOME;Office;
Exec=/opt/pilemd/PileMd %U
Icon=/opt/pilemd/icon_32x32_2x.png
Terminal=false
Type=Application
MineType=text/x-markdown;text/plain/asdas/dkwodw;
EOS
sudo mv pilemd.desktop /usr/share/applications/pilemd.desktop
あとは、DashからPileMdを起動し、File > Open Existing SyncFolder から同期ディレクトリを設定しておきます。
開発用のいろいろ
開発用にいろいろ入れたり設定したりします。
準備
# xsel: 出力をクリップボードへコピーするのに使う
sudo apt-get install -y xsel
SSH
sshのconfigの設定をします。
鍵は既にあって、xxx.xxx.xxx.xxx に接続する設定をするとします。
ホスト名は hoge とします。
ssh-agentの永続化の設定もしたいですが、よくわからないので保留します。
# 鍵を生成(パスフレーズは自由に)
mv /path/to/id_rsa_hoge ~/.ssh/id_rsa_hoge
# ssh config の設定
echo "ServerAliveInterval 60" > ~/.ssh/config
# ホストの設定
cat << EOS >> ~/.ssh/config
Host hoge
User git
Hostname xxx.xxx.xxx.xxx
Port 22
IdentityFile ~/.ssh/id_rsa_hoge
EOS
Git
Git を入れます。
# git をインストール
sudo apt-get install -y git
# ユーザ設定
git config --global --add user.name "GitHubのアカウント名"
git config --global --add user.email "GitHubのEmailアドレス"
GitHub とのSSHの設定をします。
SSHは他にも使うので、その設定もしておきます。
参考: [Git][GitHub][Linux/Windows] 初回SSH設定の簡略化(wget,curl + bashで自動設定) - Qiita
# 鍵を生成(パスフレーズは自由に)
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_github
# configの追記
cat << EOS >> ~/.ssh/config
Host github github.com
User git
Hostname github.com
Port 22
IdentityFile ~/.ssh/id_rsa_github
EOS
# 公開鍵をクリップボードにコピー
cat ~/ssh/id_rsa_github.pub | xsel --clipboard --input
# GitHubに鍵を登録
xdg-open https://github.com/settings/keys
# New SSH key で鍵をGitHubに登録する
# 接続の確認
ssh -T git@github.com
プログラミング言語
C, C++, Node.js, Python, Ruby あたりを使えるようにしておきます。
バージョン管理はめんどいのでそのまま入れます。
Pythonはnumpy, scipy, matplotlibを入れるのが面倒そうなので、 Anacondaで一括で入れちゃいます。
## C, C++
sudo apt-get install -y gcc g++
# Node.js
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
# Python (Anaconda)
wget https://repo.continuum.io/archive/Anaconda3-4.3.1-Linux-x86_64.sh
sudo bash Anaconda3-4.3.1-Linux-x86_64.sh
# Prefix には /opt/anaconda3 を指定する
echo export PATH="/opt/anaconda3/bin:$PATH" >> ~/.zshrc
echo export PATH="/opt/anaconda3/bin:$PATH" >> ~/.bashrc
# Ruby
sudo apt-get install -y ruby
データベース
とりあえず MySQL(MariaDB) を入れます。
他は必要な時に必要なだけ。
# MariaDBをインストール
sudo apt-get install -y mariadb-server
# 設定の変更
sudo sed -i -E 's/utf8mb4(_general_ci)?/utf8/' /etc/mysql/mariadb.cnf.d/50-server.cnf
sudo sed -i -E 's/utf8mb4/utf8/' /etc/mysql/mariadb.cnf.d/50-client.cnf
sudo sed -i -E 's/utf8mb4/utf8/' /etc/mysql/mariadb.cnf.d/50-mysql-clients.cnf
# セットアップ
sudo mysql_secure_installation
Vim
C++ は競プロで使うので、普通に使える程度には vim の設定を弄ります。
vimrc初心者なので、適当にググった結果、最低限必要っぽい設定を指定しています。
cat << EOS >> ~/.vimrc
set fenc=utf-8
set showcmd
set number
set virtualedit=onemore
set cindent
set showmatch
set laststatus=2
set wildmode=list:longest
nnoremap j gj
nnoremap k gk
set expandtab
set tabstop=4
set shiftwidth=4
set incsearch
set wrapscan
set hlsearch
nmap <Esc><Esc> :nohlsearch<CR><Esc>
set clipboard=unnamedplus
EOS
IDE (Intellij IDEA)
IDE は Intellij IDEA を使います。
IntelliJ IDEA :: Download Latest Version of IntelliJ IDEAを参考にインストールします。
wget https://download.jetbrains.com/idea/ideaIU-2017.1.2.tar.gz
sudo tar zxvf ideaIU-2017.1.2.tar.gz -C /opt/
cd /opt/idea-IU-171.4249.39/bin/
./idea.sh
初回起動時に、設定の読み込み、ライセンスの確認、テーマの決定、ショートカットの作成、一部プラグインの選択などができます。
他のプラグインは起動後に入れます。
競プロの設定
完全に自分用。
# ホームにワークディレクトリのシンボリックリンクを貼る。
ln -s ~/Dropbox/bp ~/bp
# alias
# もうちょっと色々設定しておきたい
cat << EOS >> ~/.zshrc
alias g+++='g++ -O2 -std=c++11 -Wall -Wshadow -Wextra -D__NO_INLINE__ '
alias g+++2='g++ -O2 -std=c++11 -Wall -Wshadow -Wextra -D__NO_INLINE__ -Wl,-stack,1048576000 '
EOS
その他
Apache, PHP, Docker あたりは使いそうですが、直近で使う用事は無いので、今は無視します。
Rぐらいは入れておきたいですが、面倒になりました。
むすび
幸せなラボ生活を送りたい。