わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

Ubuntu環境を自分が前に持ってたMac環境に近づける

kimikimi714.hatenablog.com

の続き。

windows PCの名前変更

121ware.com > サービス&サポート > Q&A > Q&A番号 017895

これの通りに実行するだけ。

.bashrc を流用する

一からbashなりを構築するのはさすがに面倒なので、もともと持っていたMac用dotfilesを何とかUbuntuにも使えないかと考えた。もともと持っていたMac用dotfilesのリポジトリは以下。

github.com

この中の以下のコミットが現時点の最新 .bashrc

config/.bashrc at e30a1fa9fde780b8011ab9ed413b77c8ef77a412 · kimikimi714/config · GitHub

Macっぽいオプションはちょっと修正するとしてUbuntuで使えないことはなさそう。HomebrewはUbuntuでは(今はまだ)使えないので、 brew コマンドは使わない方向でちょっといじってみる。いじった結果がこれ。

-# 実行時オプションとかショートカットaliasの設定
-alias ls='ls -G'
-alias grep='grep --color'
-alias pass='mono ~/Downloads/KeePass-2.26/KeePass.exe'
+# alias
+alias ls="ls --color=auto"

 # gitコマンドラインの見せ方設定
-source $(brew --prefix)/etc/bash_completion.d/git-prompt.sh
-source $(brew --prefix)/etc/bash_completion.d/git-completion.bash
+source /etc/profile.d/bash_completion.sh
+source /usr/share/bash-completion/completions/git
 GIT_PS1_SHOWDIRTYSTATE=true
 export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
-
-# homebrewでインストールしたものが/usr/binより先に読み込まれるようにするための設定
-export PATH="/usr/local/bin:$PATH"

Ubuntuにもともと入っている bash_completion を利用してターミナルの色付けを行うようにした。 git コマンドの自動補完も効くようについでに修正。今の見た目はこんな感じ。

f:id:kimikimi714:20200315152240p:plain

他、MacのコマンドのオプションはMac仕様だったりするので取り急ぎ ls コマンドは常に色づきになるようにした。

Ubuntubash_completion については以下の記事

www.cyberciti.biz

git コマンドの自動補完については以下の記事

qiita.com

を参照した。

Linuxbrew をインストールする

BrewfileUbuntuに使えたりしないかなーと思って調べたらLinuxbrewというものがあることを知った。正直なところMacで使ってた Brewfile をそのまんまUbuntuに使うのは気が引けるのだが、コマンド体系が同じになるとMacUbuntu間でやってる作業が統一できる点で便利なので、これは入れることに決定。

インストール作業

インストール方法は以下の記事を参照しつつ、実際の作業を記載する。

qiita.com

公式サイト の方に書いてある通りにコマンドを叩く。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

こんな感じで本当に入れるか確認される。

f:id:kimikimi714:20200315152321p:plain

普通に入れると /home/linuxbrew/.linuxbrew/bin/brewbrew コマンドが入るので、ここで入ったLinuxbrewがUbuntu再ログイン時にも走るように .profile もしくは .bash_profile を修正する。私は元の .bash_profile に大したものが入ってないことを確認したので、そっちは削除して .profile ファイルの行末に追加することにした。

+# linuxbrew setting
+eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)

これでUbuntuの再ログイン時もLinuxbrewの設定がオートロードされるようになる。

ちなみに今回入ったLinuxbrewは以下のバージョンになる。

$ brew -v
Homebrew 2.2.10
Homebrew/linuxbrew-core (git revision 27c4a; last commit 2020-03-14)

GoをLinuxbrewを使って入れなおす

ここで書いた通りなんだが、前回入れた Go がただの go コマンドでは打てなくなってて .bashrc の方に設定を入れ忘れたことに気が付いたので、いっそLinuxbrewで入れなおすことにした。前回のGoは /usr/local/go に入ってたので、こっちは削除することにした。

では早速 brewgo コマンド使えるようにする。

$ brew install go
==> Installing dependencies for go: patchelf
==> Installing go dependency: patchelf
==> Downloading https://linuxbrew.bintray.com/bottles/patchelf-0.10.x86_64_linux.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/98/988b224305ff3fecadf9bbf5fbe1b18061077be6c896935b2cef29298526f5b8?__gd
######################################################################## 100.0%
==> Pouring patchelf-0.10.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/patchelf/0.10: 8 files, 921.5KB
==> Installing go
==> Downloading https://linuxbrew.bintray.com/bottles/go-1.14.x86_64_linux.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/c4/c455f4f3cd29212dc03082815ed8a2a2ee483d54ec58d92f2e1660900f0a7569?__gd
######################################################################## 100.0%
==> Pouring go-1.14.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/go/1.14: 9,431 files, 422.8MB
$ type go
go is /home/linuxbrew/.linuxbrew/bin/go
$ go version
go version go1.14 linux/amd64
$ go env GOPATH
/home/kimikimi714/go

これでOK。ほぼHomebrewと変わらない。

ghq / peco をLinuxbrewで入れる

ghqpeco もいっそLinuxbrewから入れようと思って $GOPATH/bin 下のghqは削除しつつLinuxbrewで入れなおす。

$ brew install ghq
(略)
$ brew install peco
(略)
$ brew ls
ghq  go  patchelf  peco

Brewfile を dump する

今のところ Brewfile を使わないといけない理由はないが、使いたくなったら使えるようにするかと思ってhelpを参照しようとしたところインストールが始まった。

$ brew bundle --help
==> Tapping homebrew/bundle
Cloning into '/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-bundle'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (43/43), done.
(略)

今はデフォルトでは入ってないんだな。Brewfileを落としておこう。

$ brew bundle dump

あとで Brewfile の変更差分を見るとだいぶすっきりしたことがわかった。

ghq + peco の関数を bash でも使えるようにする

kimikimi714.hatenablog.com

の通りの関数を .bashrc に足す。

 source /usr/share/bash-completion/completions/git
 GIT_PS1_SHOWDIRTYSTATE=true
 export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
+
+function repo {
+  local dir="$( ghq list -p | peco )"
+  if [ ! -z "$dir" ] ; then
+    cd "$dir"
+  fi
+}

動作確認済み。

f:id:kimikimi714:20200315152401p:plain

Windows本体とUbuntuとの間でフォルダ、ファイルの共有をする

全部を共有する必要はなくて作った repo コマンドで参照するディレクトリがWindowsと共有される状態を作りたい。理由は単純で、持ってるIntelliJがここで使えないのはもったいないからだ。UbuntuGUIを無理やり入れるのはやりたくない。かつ、作られるファイルのパーミッションLinuxに合わせたものがよく、Windowsで作ったものが 777 になったり、あるいはUbuntuで作ったものをWindowsでも見れるようにしたときに 777 になる状態を避けたい。

と思っていろいろ調べていたらやっと記事を見つけた。

www.clear-code.com

この中の「Windowsファイルシステム上のファイルのパーミッションが妥当な形で見えるようにする(2019年4月10日追記)」が私のやりたかったことで、Ubuntu側に以下の内容で /etc/wsl.conf を置く。

[automount]
options = "metadata,umask=22,fmask=111"

以下の公式の記事にも方法は実は書いてあるが

docs.microsoft.com

いまいち設定の仕方がわからなくて(もう一個先の記事の結構下の方までいって、よく読んだらやっとわかるレベル)、ずっと探していた。ちなみに umask はファイルとディレクトリ両方、 fmask はファイルのみに適応される。実際の挙動をいろいろ確かめるとまだ個人的にはいけてないなと思う部分があったのだけど使用には耐えうる感じになったので一旦OK。例えばWindowsからIntelliJを立ち上げてファイルのひな型を突っ込むとUbuntuからはパーミッションが755とかになってる気がするが、まだここは試してない。Ubuntu側からファイルを作ったときにWindows側で勝手にパーミッションがいじられたりしないところが今時点での到達点になってる。

これで前の記事でやりたかったことは一応全部完了

実運用に乗せてみるとまだほかにも粗が出てきそうだが、一旦目的としていた環境は手に入ったので満足。

vimの設定がまだだなーと気が付いたが、それはまた今度。