よもやま話β版

よもやま話を書きます。内容はぺらぺら。自由に書く。

できるだけ身軽になりたかった(サブマシンとしてのSurfaceGo)

愛用しているMacBookProが、 「バッテリーの交換修理のアラートがでる」 「tのキーのツメが割れて打てない時がある」 「そもそもキーボード交換修理プログラムの対象モデル」 という問題揃い踏み状態となっていた。 幸いAppleCareの期間内でもあったので、2020の年始に修理に出すことにした。 しかしながらバリバリ仕事で使っているものなので、修理中、トラブルシューティングに対して無防備になるのは避けたい。

そこで、以前買っていたSurfaceGoをサブマシンとしてしたてて、しばらくの間はこれで乗り切れるようにした。 また、簡易の対処マシンとして、お出かけの際に重宝できるだろうという目論見もあった。

どんな感じに仕立てたのか、備忘録として記録しておく。 ただ、仕立てる決意をしたのが秋で、一気に仕上げたのが最近なので、その間に対応した細かい設定を忘れてしまった...。 いつの間にかgit-bash.exeが入っていたけど、どんな経緯で入れたのか覚えていない...。

Dropboxに.kdbxのファイルを置いておく

まず自分の生活に欠かせないのがパスワード管理ツール。 二段階認証しているとはいえ、Githubへのログインにもまずパスワードが必要となる。 自分はKeePassXを使っているので、.kdbxのファイルをDropboxに入れておき、MacBookPro/SurfaceGo どちらからでも参照できるようにした。片方使っているときは.lockが追加されたり削除されたりの通知が出てくるので、うっかりlockしたまま片方のPCを閉じてしまったりしないように一応気を付けた。

Railsが動く環境を整える

RailsGirlsのページが一番詳しいと自分は思っている。都度メンテナンスもされているのでありがたい。 https://railsgirls.jp/install#setup_for_windows

開発周辺の状況

git clone ができない

betachelsea@pcname:/mnt/c/projects$ git clone git@github.com:betachelsea/piyopiyo
Cloning into 'piyopiyo'...
Warning: Permanently added the RSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

SurfaceGoにまだ鍵を準備していなかった!

ref: GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
ref: SSH keyを4096bitで作成する - Qiita

$ ssh-keygen -t rsa -b 4096
$ cat ~/.ssh/id_rsa.pub

表示された鍵を https://github.com/settings/keys に登録すると、git cloneができるようになった。

任意のRubyをいれる

すでにRailsGirlsのチュートリアルでrbenv, Rubyは入っていたが、最新化して任意のバージョンをいれられるようにした。

# rbenv 最新化
$ cd ~/.rbenv
$ git pull

# ruby-buildも新しくする
$ cd ~/.rbenv/plugin/ruby-build
$ git pull

$ rbenv install 2.6.5

$ rbenv versions
* 2.6.3 (set by /home/betachelsea/.rbenv/version)
  2.6.5

bundlerを入れる

Rubyを入れたばかりだとbundlerもないのでまずbundler入れる。

$ gem install bundler

# もしバージョン指定が必要なら(Gemfile.lockの都合とか)
$ gem install bundler -v 2.0.2

環境変数を設定

必要なものがあれば ~/.bashrc に書いておく。

$ vim ~/.bashrc

export SECRET_TOKEN="xxxx...."

再読み込みも忘れずに。

$ source ~/.bashrc

postgresql をインストール

posgresqlを動かせるようにする。
ref: Ubuntu16.04にPostgreSQLをインストール - Qiita
ref: PostgreSQL 11.1をUbuntu 18.04へインストールし、外部から接続する - Symfoware

$ sudo apt-get update
$ sudo apt-get install postgresql

psql コマンドが動かない

betachelsea@pcname:~$ psql
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

ref: PostgreSQL で psql コマンド を実行したら could not connect to database postgres: could not connect to server: No such file or directory と出る場合 - 約束の地
上記記事を参考にしてclusterをスタートさせてみる。

$ pg_ctlcluster 10 main start

betachelsea@pcname:~$ psql
psql: FATAL:  role "betachelsea" does not exist
# FATALではあるが、通ってはいるのでOK

接続用DBユーザ作成

betachelsea@pcname:~$ sudo su - postgres

# config/database.ymlに書いておいてあるusernameとパスワードのユーザを作る。

postgres@pcname:~$ createuser -d -U postgres -P dbuser
Enter password for new role: パスワードを入力
Enter it again: パスワードを入力

# ユーザーが追加された。

postgres@pcname:~$ psql
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 dbuser    | Create DB                                                  | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

rake db:create でDB作成

デフォルトではDBへの接続はPeer認証になっていて、ログインユーザからの $bundle exec rake db:create は失敗してしまう。 そのため、pg_hba.conf を変更する。

ref: PostgreSQLのDBに接続しようとしたら、エラーで接続できない
ref: PostgreSQLのPeer認証と他の認証方法への変更 | Web Memorandum
ref: [Ubuntu 16.04] PostgreSQLのリモート接続設定 - Qiita
ref: [備忘録]WSL(Ubuntu)でPostgresを試す - Qiita

betachelsea@pcname:~$ sudo vi /etc/postgresql/10/main/pg_hba.conf

# "local" is for Unix domain socket connections only
local   all             all                                     peer

# ↓ 次のように変更

local   all             all                                     md5


# 再起動する
betachelsea@pcname:~$ sudo service postgresql restart
 * Restarting PostgreSQL 10 database server                [ OK ]

改めてdbをつくってmigrationする

betachelsea@pcname:/mnt/c/projects/piyopiyo$ bundle exec rails db:create
betachelsea@pcname:/mnt/c/projects/piyopiyo$ bundle exec rails db:migrate

Redisいれる

$ rails s して localhost:3000 にアクセスしてみると、次のエラーが出た。

This results in IO::EINPROGRESSWaitWritable Operation now in progress - connect(2) would block

ref: Ruby on Rails: Operation now in progress - connect(2) would block - Stack Overflow
ref: redis - System has not been booted with systemd as init system (PID 1). Can't operate - Stack Overflow

そういえばRedisを使っていた。

$ sudo apt install redis-server
$ sudo service redis-server start

bundle install のエラーはapt-getで解決

結構世の中にはbrew(Homebrew)でinstallして解決とか書かれているが、あれはMacOSのパッケージマネージャーなので、apt-getで対応する。 ほかにはリポジトリによって多種多様だと思うので、各自頑張るしかなさそう。 まずエラーを読んでググればとりあえずなんとかなる。

サーバにsshできるようにしておく

必要なサーバにsshできるように設定しておく。 sshしたいサーバを事前にリストアップして設定、疎通確認しておくのが肝要。

deployが権限的にできない

capistranoでデプロイしようとしたところ、Could not open a connection to your authentication agent. と出て出来なかった。 ssh-add するといいらしい。次の記事を参考にして解決した。

ref: ssh-addできなかったときへの対処 - Qiita

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

MacBookProを修理に出す

無事、SurfaceGoでなんとかいつも通り仕事ができるだろうという感触を得られたため、AppleStoreに予約をして修理をお願いした。 年末年始、工場が動いていないので結局修理期間は平日に食い込むことになった。 また、AppleCareに加入してなければ¥53,000の修理費がかかったようだ。入っててよかったAppleCare...。

  • 12月30日(日) 昼頃に修理依頼、預ける
  • 1月4日(土) Apple修理センターに到着(メールが届く)
  • 1月5日(日) 修理開始の連絡メールが届く
  • 1月6日(月) 製品をお渡しする準備ができましたのメールが届く、引き取りに向かう

実質2~3日での修理だった。年末年始じゃなくて平日金曜とかに出した方がよかったのかもしれない...。 何はともあれ無事仕事の相棒は戻ってきたし、簡易お出かけの軽いSurfaceGoの整備もできた。

よかったよかった。 2020年もやっていくぞ。