日記

ももクロとエビ中を推している弱いパソコンオタクです

JCOM回線で自宅サーバ(Ubuntu)を建ててsshするまで(初心者向け)

現在マンションに住んでいるんですが, 家の構造上光回線が引けないらしく, やむなくJCOM回線を契約しています. JCOMは固定IPオプションが無いのでよくある自宅サーバを建てて外部に公開, みたいなことが出来ません.

以前から自宅サーバなるものをやってみたかったので今回はJCOM回線の人(に限らず固定IPが持てない人)向けのお手軽サーバ構築をやってみたいと思います.

ちなみに私はサーバやネットワークに関して完全素人なので多々間違っている記述がある可能性があります. 指摘があればコメントで教えてください.

対象読者

  • 固定IP持ってないけど自宅サーバをやってみたい人
  • Linuxコマンドが一通り分かる人

Linuxコマンドはググればいくらでも情報出てくるので, 分からなかったらググってください.

プラン

固定IPがないので他のやり方を探さないといけません. 選択肢は2つです.

  1. VPSからVPNを張って疑似固定IPゲット
    さくらやlightsailと言った適当なVPSを借りてVPNを張り, サーバを公開する方法です. しかしVPNサーバ建てるのはめんどくさそうだし, 第一余計に金が掛かるので却下(今非常に金欠). 今回は何か目的があってサーバを建てる訳でもないのでそこまでしたくはないです.

  2. DDNSを使う
    Dynamic DNSというやつです. 通常の家庭はプロバイダから動的にグローバルIPを振られている為, サーバを公開することが出来ない訳ですが, そのグローバルIPが変わるごとにDNSに通知をしてやればドメイン名でアクセスすることが可能になる訳です.
    DDNSの提供者は様々ありますが, 今回は老舗で有名所のmydns.jpを選択. 一定期間IPアドレスの通知が無いと接続出来なくなってしまいますが, DNSドメインも無料で使わせてくれます. ありがてぇ... (お金に余裕が出来たら寄付したい)

設定

サーバ側

方針が決まったのでさっそくサーバを建てていきます. 今回のサーバのスペックはこちら

化石みたいなマシンですが, 大したことしないのでこのスペックでも十分でしょう. ちなみにジャンク5000円で買いました. Win10のライセンスも付いてたのでとてもお得.

DDNSを使うやり方ではルータにポートフォワードの機能が付いている必要があります. だいたい本体裏に設定用のIPアドレスが書いてあるのでブラウザからアクセスして確認してください(ちなみにうちの機種では192.168.0.1でした)

まずUSBメモリUbuntu Serverを焼いていきます. ここは各自ググってください.

そしてインストールします. ここもググりましょう(は?). インストール時に「OpenSSHサーバを入れますか?」みたいな事を聞かれるのでそっちもインストールしておいてください.

インストールが終わったらまずLAN内でのIPを固定します. Ubuntu Serverの16.10以降は/etc/netplan以下にyamlを置くことで設定出来ます. 初期状態では00-installer-config.yamlとか/etc/netplan/50-cloud-init.yamlとか言うファイルが置いてあるようですが, これらは触らない方がいいらしい. 参考↓ qiita.com

99_config.yamlを作製して設定内容を記述します.
設定例:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.0.24/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

yamlなのでインデントはタブ文字だとアウトらしい. スペースでインデントしてください. あとファイルの最後に改行を入れとかないとエラーを吐きます.

magazine.rubyist.net

編集し終わったらsudo netplan applyで設定を反映させます.

DDNS

今度はDDNSの設定をやっていきます. まずmydns.jpを開いてユーザ登録をします. しばらくするとメールが届くのでそこに書いてあるIDとパスワードでログイン.

ドメインの設定

ログイン出来たら左側のメニューからDOMAIN INFOを選択.
Domainの欄に hogefuga.mydns.jp みたいな感じで使いたいドメイン名を入力します. mydnsでは無料で使えるドメインを発行していますが, 自分で用意することも出来ます. めんどくさいので今回は割愛.

MXの欄はメールサーバを建てる時に入力します. 今回はやらないのでスルー. 最後にHostname, レコードのタイプを入力します. 今回はHostnameに*, レコードはAを選択します. IPv4だけでいい人はAを, v6も使いたい人はAAAAを選択します.
一行下の欄ではHostnameにwww, レコードにCNAMEを設定します. こうすることで

hogefuga.mydns.jp

でも

www.hogefuga.mydns.jp

でもアクセス出来るようになります.

IPアドレスの設定

ドメインの設定が終わったら, 次はドメインIPアドレスの紐づけを行う必要があります. mydnsのサイト内でも出来ますが, 今回は手元のサーバから通知をしてみます. まずは自分のIPアドレスを確認します. ルータの裏側に書いてあるIPアドレスからルータの設定画面にログインします. IPアドレスが書かれてない場合は取説を読むかメーカーに問い合わせてください.

ルータの設定画面
こんな感じ, 諸々のアドレスはむちゃくちゃに書き換えてあります
WAN側のIPv4アドレスってやつが今回mydnsに通知するアドレスです.

あとは

qiita.com

この記事を参考にIPアドレスの通知と定期実行の設定をします(他力本願).

ルータの設定

最後にポートフォワードの設定をします. 先程のルータの設定画面からポートフォワードの設定画面を探します.
うちのルータではこんな感じでした.

ポートフォワードの設定画面
ポートフォワードの設定画面
開始ポートはルータのポート, 終了ポートはサーバ側のポートを指します. sshは基本的には22番ポートを使うので, ルータの22番に入ってきたやつをサーバの22番に流します.
ここまでやったらあとは

$ssh サーバのユーザ名@hogefuga.mydns.jp

ssh接続が出来るようになります. 出来ない場合はmydnsの設定の反映が追いついてない場合があるので, 15分程待ってから再度sshしてみてください.

ここでは最低限の設定しか紹介していないので, そのまま使うとセキュリティ的にヤバいと思います. 「ssh セキュリティ」とかでググれば死ぬほど情報出てくるので後は頑張ってください.

あとがき

固定IPをくれ(切実)

VSCode on Ubuntuがターミナルから起動出来ない時の対処法

以前は

$code hoge.txt

でターミナルからVScodeを起動出来てたが, どっかのアップデートでコマンドが変わってしまった模様.

以下は問題が起きたVSCodeの情報

Version: 1.53.2
Commit: 622cb03f7e070a9670c94bae1a45d78d7181fbd4
Date: 2021-02-11T11:48:44.518Z
Electron: 11.2.1
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
OS: Linux x64 5.8.0-7642-generic

ディストリはPop!_OS 20.10.

探してみると/usr/share/code/bin/以下にcodeというシェルスクリプトを発見. こいつを叩くとVSCodeが呼ばれるらしい.
/usr/share/code/codeという同名のバイナリがあるが, そいつを直接叩くとelectronがこんな感じのエラーを吐く.

 sioremon@Pop!_OS : ~ $ cd /usr/share/code/
 sioremon@Pop!_OS : code $ ./code
(electron) Sending uncompressed crash reports is deprecated and will be removed in a future version of Electron. Set { compress: true } to opt-in to the new behavior. Crash reports will be uploaded gzipped, which most crash reporting servers support.
[main 2021-02-18T10:53:55.241Z] update#setState idle
bash: 端末プロセスグループを設定できません (-1): デバイスに対する不適切なioctlです
bash: このシェルではジョブ制御が無効になっています
(node:15187) electron: The default of contextIsolation is deprecated and will be changing from false to true in a future release of Electron.  See https://github.com/electron/electron/issues/23506 for more information
(node:15187) electron: The default of contextIsolation is deprecated and will be changing from false to true in a future release of Electron.  See https://github.com/electron/electron/issues/23506 for more information
^C sioremon@Pop!_OS : code $ 

$which codeしても何も出てこないので内部でどんな風に呼ばれているかは分からんが, とりあえず

alias code='/usr/share/code/bin/code'

を.bashrcに追記した(アップデートでまた問題が起こりそうな予感).

texのコンパイルが参考文献のURLでコケる時の対処法

概要

タイトル通り, 備忘録なので雑です

こんな感じのソースがある時,

\begin{thebibliography}
\bibitem{shinyouju}
生物多様性センター:第2回自然環境保全基礎調査(植生調査) 現存植生図,
\urlj{https://www.biodic.go.jp/vg_map/one-to-fifty-thousand/332.jpg}%
\refdatej{2020-12-15}.
\end{thebibliography}

コンパイルがこんな感じでコケる.

<inserted text> 
                $
l.263 ....jp/vg_map/one-to-fifty-thousand/332.jpg}
                                                  %
? 

原因

URLに_が含まれているのが原因.

対処法

エスケープ文字である\を_の前に挿入すればおk. こんな感じ.

\begin{thebibliography}
\bibitem{shinyouju}
生物多様性センター:第2回自然環境保全基礎調査(植生調査) 現存植生図,
\urlj{https://www.biodic.go.jp/vg\_map/one-to-fifty-thousand/332.jpg}%
\refdatej{2020-12-15}.
\end{thebibliography}

これでコンパイルが通る.

ノートパソコン(Ubuntu)でUSB経由でトリプルモニター環境を作る

前回の続きです。

前回の記事で本体のType-CポートとHDMIポートを同時に映像出力に使うことが出来ないということが判明したので、USB Type-A to HDMIの変換アダプタを購入しました。

plugableのUSB to HDMIアダプタをmy new gear...をしている図
my new gear...

ドッキングステーションで有名なplugableの製品です。DisplayLink社のチップ(DL-3500 USB 3.0 グラフィックス・チップセットというやつらしい、Amazonの販売ページ)を積んでるのでDisplayLinkの公式ドライバで動きます。  

インストール手順

公式サイトからは.zipが降ってくるので任意のディレクトリで展開します。

展開後はdisplaylink-driver-5.3.x.x.runが生えてきますがreadとwriteしか許可されていないのでchmodで権限を変更します。

$ chmod 755 displaylink-driver-5.3.1.34.run

権限を変更したらrootで実行します。

sudo ./displaylink-driver-5.3.1.34.run

実行時はType-Cハブやドッキングステーションの類は取り外しておいてください(Xorgのセッションがアクティブだと上手くいかない)。

実行後はrebootして設定を反映します。

再起動後

起動が終わったらUSB3.0以上のポートにアダプタを刺します。後は何もしなくても(多分)映像が生えてきます。

ラップトップから外部モニタ2枚に映像を生やしている図
優勝している図

私の環境ではOS側で設定した輝度の変更や色味の変更(ナイトモードみたいなやつ)がplugableのアダプタを介したモニタには反映されませんでした。どうしても変更したい場合はモニタ本体の設定でどうにかする必要がありそうです。

Thinkpad P43s(Ubuntu)で3画面出力しようとしたら出来なかった話

大した話ではないですが、一応記録として残しておこうと思います。

環境:

  • Machine: Thinkpad P43s
  • OS: Pop!_OS 20.10
  • Kernel: 5.8.0-7625-generic

他に情報欲しかったらコメントかTwitterへどうぞ。

事の経緯

外部モニター2枚と本体のディスプレイの合計三枚でマルチディスプレイ環境を作ってウェイウェイしようと企んだ。一応どんな構成か書いておく。

  • 本体のディスプレイ
  • モニターA
  • モニターB
    外部モニターは両方LG製の24EA430Vです。

P43sにはType−Cポート(Thunderbolt 3)と普通のHDMIポートの2つの映像出力ポートがあります。 Type−CポートからHDMIを生やしてモニターAに繋ぎ、普通のHDMIポートからモニターBに接続しようと試みました。

結果

写りませんでした(タイトル通り)。
P43sはType-CポートとHDMIが排他で動くようです。両方同時に出力するというのは構造上出来ない模様。BIOSを見ると...

Thinkpad P43sのBIOSの画面。排他制御してますって書いてある。
Thinkpad P43sのBIOSの画面。排他制御してますって書いてある。
これに気づかず数時間を無駄にしました(しかしxrandrの使い方が勉強出来たのでよしとする)
Display Linkのチップが乗ったこちらの商品を購入したので、届き次第試して見ようと思います。

Windowsを入れてないので検証はしてませんが、恐らくWindowsでも同様の結果になると思います(ファームウェアレベルで制御されているので)。

ちなみに機種によっては排他制御じゃないやつもあるらしく、Thinkpad 25はドッキングステーション経由で特別な設定なしに同様の構成が実現出来ているようです。購入前にLenovoに仕様を確認した方が良いという良い教訓を得ました。

追記: 11/16

解決した話はこちら

LinuxでThinkpad Thunderbolt3 Dockが使えなくてAnkerの安物が快適に動いている話

COVIC-19の影響で大学が6月の中旬まで完全オンライン化することになりました。快適なデスクで受講出来るのは嬉しいっちゃ嬉しいんですが、確実にダレるのでその辺どうするか悩みどころです。環境を変えようにも基本的に外出はしないほうがいいですしね...

本題に入ります。

Pop!_OSをインスコしたP43sのためにThinkpad Thunderbolt3 Dockを買ったんですが見事に動きませんでした。

BIOSでThunderbolt Securityの項目を弄ってみたり、Bootの設定を変えてみたり15時間くらい溶かしましたがまるでダメです。

PCへの給電とDock側の電源ボタン以外は一切動作しません。

Pop!_OS on Thinkpad X1 ExtremeとThunderbolt 3 Dockの組み合わせで動いたみたいな報告もあるのでイケるかと思ったんですがねぇ...

UbuntuのLive起動でもダメだったのでP43sのファームウェア的に難しかったのかもしれません。これ以上深入りしたくなかったので詳細はよくわかりませんが...

結局今使っているのはAnkerこれです。

普通に全部動きます。ただハブが12W持っていくので純正の65W充電器を使うと給電のスピードは遅くなります。とは言っても内蔵グラフィックで写している間は特に問題なさそうです、別に高負荷の計算やらせる訳でもないしね。

ちなみに研究室に転がってたこいつでも問題なく動作しました。

機種(というかファームウェア?)によってはLinuxシステムでThunderbolt3ポートが正常に動作しない場合があるので、確実な動作報告が無い限りは大人しく普通のType-Cハブを使った方が良さそうです。

Thinkpad P43sに噂のPop!_OSをインストールしてみた

なんでPop!_OSなん??

割と初心者向けのディストリビューションと言えばUbuntuです(ほんまか?)。
Ubuntuも勿論いいですが、現在のUbuntuNVIDIAグラフィックを積んでるPCだとインストール時にドライバが当たっていないせいでブート関連で問題が起こることがしばしばあるそうです。そこで登場するのがPop!_OSという訳。
Pop!はUbuntuベースのメーカーディストリビューションです。
最近流行りの機械学習や深層学習などNVIDIA GPUが積まれたPC上でのユースケースを想定しているディストロの為、プロプラのNVIDIAグラフィックドライバが標準で含まれています。Quadroを積んでるP43sに初心者が、Linuxを導入するにはもってこいという訳です。

Live USBの作成

話が長くなりましたのでそろそろLive USBを焼いていきます。 X220の時はddコマンドで焼きましたが改めて調べてみるとベンダーのSystem76が簡単な方法を紹介してました。

今回はQuadroが載ってるのでnvidia版のisoイメージを選択します。あとはさっきのマニュアル通りに落としてきたisoイメージをUSBメモリーに焼きます。

いざインストール

P43sにUbuntuデスクトップをインストールするマニュアルLenovoが公開してくれているのでこれに沿ってインストールしていきます。

しかしBIOSの設定を進めていくとグラフィックの設定で躓きました。グラフィックの選択項目がありません。

ここの選択項目がない、画像はLenovoのマニュアルからの引用

色々確認したところ2020年3月5日現在ではver1.60が最新の物らしく、この場合グラフィックの選択項目が存在しないのが正解みたいです。

マニュアルは18.04以降を対象にしているのに最新のBIOSのリリースノートが16.04を対象にしているのが少し引っかかりますが今後のアップデートで更新される事を願って次に進みます。

あとはF10を押してBIOSから抜けたらF12を押してブートデバイスを選択してインストールをちゃちゃっと進めて行きましょう。

USキーなので英語(US)みたいなキー配列を選びます。他のキー配列はよくわからんキーマップになってたので多分選ばない方が良さげ

あとは言われた通りにポチポチしていきましょう。

環境構築

こんな感じのデスクトップ画面が出てきたら最低限の環境構築をしましょう。

  • まずやる事リスト
    • Tweaksのインストール
    • mozc設定ツールのインストール
    • mozcで日本語入力の設定(非JISキーユーザ向け)

GnomeユーザにTweaksは必須です。これが無いとパソコンが使い物にならないと言っても過言では無いのですぐに入れます。

Pop!_Shop(Ubuntuで言うソフトウェアセンター)でTweaksを検索してポチッとやるだけです。

今度はmozcの設定ツールを入れます。

Pop!の19.10では標準ではmozcの設定ツールがありません。JISキーユーザにはもしかしたら関係無いのかもしれませんがとりあえず入れておいて損は無いです。

設定ツールを入れたらここを見ながら日本語入力の設定をします。

ここまでやればとりあえずちゃんと使えるパソコンの出来上がりです。

後はお好みでemacsキーバインドを設定したりタッチパッドを無効化したりctrlとcaps lockを入れ替えたりしましょう。(タッチパッドemacsキーバインドはTweaksのキーボード設定のとこにトグルがあります。)

Linux on X1 Carbonではスリープ中に電源消費量がエグいことになるという問題が度々指摘されていました。 僕のX240やX220でも似たような症状が出ていた為もしかしたらThinkpadではありがちな問題なのかもしれません。 必要かどうかはイマイチ分かりませんがおまじない的に/etc/default/grubを編集しときます。

Gnome Shell Extension

Pop!_OSは標準でいくつかのGnome拡張が入っています。従ってGnome拡張の環境構築はgnome shell extensionのchrome拡張を追加すれば良いだけなので少し楽です。

System76がおすすめのGnome拡張リストを公開していたので紹介しておきます。

Pop!_OS Customization - System76 Support
個人的にDash to Dockは入れた方がいい拡張機能No.1です。素のPop!はいちいちSuperキーを押さないとDockが出てこないのでかなり不便です。

その他色々

Vivaldiブラウザはショートカットキーを自分で弄れるのでヘビーユーザーはChromeよりもVivaldiを使うと幸せになれます。ChromiumベースですがピュアなChromeよりも軽量なのでギークな皆さんはメモリ馬鹿喰いオバケChromeを捨ててVivaldiに移行しましょう。ブックマークの移行も忘れずに。
Tweaksでemacsキーバインドを設定した方はVivaldiの履歴を表示するctrl+hとキーバインドが衝突するのでVivaldiのショートカットキーを良きように変更しておいた方がいいかも知れません。