ポエム

ぽぽぽぽぽぽ

chromeOSで開発する準備(続き)

前記事の続き記事になります。
chromeOSでローカルにdocker環境を作る - ポエム

前回は、chromeOSにdocker環境を作るところにやりました。

今回は、chromeOS上のエディタでコンテナ上のファイルを編集する方法です。


エディタは、私の場合は、Caretというsublimeライクなエディタを使うことにしました。
VSCodeなどのIDEも使えるので、使いたい方は以下のURLから環境構築してもいいかもしれません。
reddit: the front page of the internet

ただ、VSCodeは不安定であるらしいという情報や日本語入力の準備や日本語キーバードだとキーバインドの設定とかややこしんじゃないかという不安や私の場合16GBしか容量がないということを考慮すると、
Caretというエディタで十分だと判断しました。

まずはCaretをインストールします。
chrome storeでcaretという検索してインストールしてください。

### 20190227 追記 ###

以下の内容ではSFTPでコンテナとchromeOSをmountしてますが、
そんあことしなくても
chrome://flagsを開き、Crostini Filesをenabledにすれば、File AppからLinux Appを開くことができることがわかりました。
そのため、以下内容は参考にしなくてもよいと思います。

###################

次に、chromeOS上のローカルのFile Appとコンテナ上をSFTPでつなぎます。
Caretのwikiページに書かれているSFTP Network folderというアプリを使います。
(Secure Shellとかでも代用可能らしいです。やったことないのでわかりませんが。)
remote file systemをSTFPプロトコルを通してchromeOSにmountすることができます。
Git SFTP Drive support · thomaswilburn/Caret Wiki · GitHub

まずは公開鍵・秘密鍵を生成しましょー。
コンテナ上で、

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys

上の操作、ssh-keygenで公開鍵と秘密鍵を生成して、
公開鍵をauthorized_keysというファイル名で作成しています。
以上ができましたら、秘密鍵をchromeOS上にもっていきましょー。
これは色々方法があると思いますが、私の場合は、

$ cp ~/.ssh/id_rsa ~/

としてFile AppのLinuxファイルからダウンロードにdragしてmoveしてきました。

以上が終わりましたら、
SFTP Network folderというアプリを開き、
私の場合ですと
Sever name : 100.115.92.203(コンテナのIP)
Port number : 22
Mount path : 100.115.92.203:22/home/tani
Display Name : penguin
Username : tani(ここは各々ユーザー名)
Authentication type : Public key
Private key : (上記のid_rsaをコピペ)

これでやってみた。
Server is not accessibleと表示されました。。

sshできるかどうかまず確認してみますかってことで。
croshタブからshellコマンドでたたき

$ ssh tani@100.115.92.203 -i id_rsa -p 22
ssh: connect to host 100.115.92.203 port 22: Connection refused

エラーだね。
そもそもコンテナ側のsshポートってどこ空いてんだ。
ssh動いてんのかってことでコンテナ側を見に行きます。

$ sudo systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

$ sudo systemctl start sshd.service
$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
Condition: start condition failed at Wed 2019-01-02 13:32:36 UTC; 4s ago
           └─ ConditionPathExists=!/etc/ssh/sshd_not_to_be_run was not met

/etc/ssh/sshd_not_to_be_runが邪魔らしいのでrenameしときます。
そんでrestartです。

$ sudo mv /etc/ssh/sshd_not_to_be_run /etc/ssh/sshd_not_to_be_run.bk
$ sudo systemctl restart sshd.service
$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-01-02 14:44:32 UTC; 2s ago
  Process: 1028 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 1029 (sshd)
    Tasks: 1 (limit: 4915)
   Memory: 1.1M
      CPU: 73ms
   CGroup: /system.slice/ssh.service
           └─1029 /usr/sbin/sshd -D

Jan 02 14:44:32 penguin systemd[1]: Starting OpenBSD Secure Shell server...
Jan 02 14:44:32 penguin sshd[1029]: Server listening on 0.0.0.0 port 22.
Jan 02 14:44:32 penguin sshd[1029]: Server listening on :: port 22.
Jan 02 14:44:32 penguin systemd[1]: Started OpenBSD Secure Shell server.

できました。

次は、/etc/ssh/sshd_configの設定です。

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
$ sudo vim /etc/ssh/sshd_config
Port 20
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
$ sudo systemctl restart sshd.service

に変更する。
これで
chromeOS上のshellから

$ ssh tani@100.115.92.203 -i ~/.ssh/id_rsa -p 22
Linux penguin 4.19.4-02480-gd44d301822f0 #1 SMP PREEMPT Thu Dec 6 17:48:31 PST 2018 aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
tani@penguin:~$

SSH接続できました。

あとはSFTPの前に記述している内容と同じ内容でmountすると成功します。

それでCaretからプロジェクト開けるようになります。晴れて開発スタートできまーす!

もちろんリモートで開発サーバー揃えて、そこにSFTP接続して開発でも良いと思います。

ちな、コンテナ上のプロセスみると、

root        92  0.0  0.1  10392  5252 ?        Ss   13:22   0:00 /usr/sbin/sshd -D -f /dev/.ssh/sshd_config

というものがあり、なんかSFTP用のsshdプロセス立ってるっぽい。
私は詳しくわかりませんが、これを使ってうまくできるかもです。


今回は以上となります。