generalistからspecialistへ

一点集中化計画

外出先から自宅debian PCに接続する

以前の会社からの習慣で、外で仕事する癖がついてしまっています

いつもmacbookなので問題なかったんですが、 今はdesktop PCにdebian入れてしまったので、外にいけなくなりました

かといって、彼らのようにdesktopを外に持ち出すぐらいの強さは自分にはありません

main-qimg-34f0c318588762025d9fc5f6d10b5773.jpeg image.png

thumb.jpg

なので、素直に「外で自宅のPCにmacbookから接続する」方法をさがすことにします


ssh接続してみる

  • これを実現するには「ssh接続」というのをすればいいらしい
  • SSH/Debianへのインストールを参考にsshをinstall
  • Mac OS Xでsshでサーバーへ接続を参考にssh接続してみる
  • 自宅PCのdebianのipadressをcheckしてみる
    • $ ifconfig ってやってみて、wlp3s0 って書いてる所が該当箇所かな?(以前の日報の、無線デバイス名の確認より)
    • 192.168.11.48と表示されている。これっぽい。
    • mac側で$ ssh -l root 192.168.11.48と打ってみる。おお。入れた。
      • pwdとかlsしてみて、ちゃんとつながったっぽいのを確認。
      • この状態で、debianのPCをshutdownしてみる。すると、mac側でConnection to 192.168.11.48 closed.と表示され、自動で接続切れた。そりゃそうだよね^^ リアルタイムなんだ
      • debian PCを再起動しても、ipaddressの192.168.11.48 は変わってなかった。あれ、変わるんじゃないの?この辺の理解がまだ浅い。後日学習。

違うネットワークでssh接続してみる

  • 上記では同じwifi内でssh接続したが、違うネットワークでもssh接続できるか確認。
    • maciPhoneテザリングdebian PCは自宅のwifiにつなげた状態で、mac側からdebian PCにssh接続してみる。
      • すると、ssh: connect to host 192.168.11.48 port 22: Operation timed outの表示。
      • 自宅のルータにテザリングからの接続許可設定をしないといけないのかな?

自宅のルータ設定

  • 違うネットワークから自宅のwifiにつながってるPCに接続する場合、自宅のルータで 「ポート解放」 という設定をするらしい
    • 自分が使ってるルータで設定方法を確認
    • 参考: https://www.buffalo.jp/support/faq/detail/8346.html
      • なるほどわからん 「解放」っていう単語がセキュリティ的になんかやばそう。でもやってみる。
      • ブラウザからルータ設定する時は、URLは大体http://192.168.11.1/からしい。ルータによって違うから要確認。マニュアルに沿って一通りやってみる。
      • image.png

やってみると、、、 つながった!

ここまでで、 - テザリングにつなげたmacから - 自宅のwifiにつながったdebian PCに - $ ssh sdk@xxx.xxx.xxx.xxxssh接続できるようになった。(xxx..はグローバルIP

、、、


というか、この後のプラクティスで「sshの基本を理解する」ってのがあるのに今気付いた。ssh接続はそれやってからでもよかったかも、、

上記まででssh接続はできてるっぽいけど、セキュリティ的になんか危ない気がするので、

ここからは、プラクティスの「sshの基本を理解する」を読みながら、ssh接続の続きをやっていく。

キーペア登録

  • .pubが付いた方が公開鍵。publicの略かな。
  • ついてない方が秘密鍵
  • evalとは何か
  • macはキーチェーンにキーペア登録できるみたい

    • 登録してみて、キーチェーンに入ったのを確認↓
      • image.png
  • パスワードでのログインを無効にする設定。秘密鍵を持っていないとログインできないようにする為。PasswordAuthentication no

    • image.png
  • 今までログインできてた$ ssh sdk@xxx.xxx.xxx.xxxで、今もログインするか確認

    • はじかれた(正しい挙動)
  • 鍵を使った$ ssh -i ~/.ssh/debian_rsa sdk@xxx.xxx.xxx.xxxでログインできるか確認
    • ログインできた(望んでいる挙動)
      • image.png

localeがおかしい

  • なんか、ssh接続した時に、localeがなんちゃら、って出てくる

image.png

  • 参考:https://qiita.com/kazuhei/items/23c1a0b4122c03f122b5

  • ローカルのPCがlocaleをja_JP.UTF-8で上書きしようとしているが、サーバー側がそれを受け付けない」
    が原因みたい。

  • 上記URLを参考に対処。お、出なくなった。

    • けど、これ変更して大丈夫だろうか。。。何か起こったらその時対処しよう。

ssh接続port変更

  • portを変更した、最終的なコマンドはこれ↓ 666番で繋ぐことにした。オーメン
    • $ ssh -i ~/.ssh/debian_rsa sdk@xxx.xxx.xxx.xxx -p 666
    • 22番で繋ぐとはじくのを確認
    • image.png

これですべて完了! やった!

これでdesktop PCを持ち出さなくて良くなったぞ!

sshで不正なアクセス来てるかな

  • debianはログは/var/log/syslogにあるのかな?
    • 内容多いのでテキストエディタで見たい。一回書き出す。$ cat /var/log/syslog > test.txt
    • scpで自分のPCに持ってくる。$ scp -i ~/.ssh/debian_rsa sdk@xxx.xxx.xxx.xxx:/var/log/test.txt ~/
      • うーむ不正は見当たらん。どこにあるんかな。まだ来てない? また今度見よう。

CUIのPCを無線LANに接続する

debian(CUI) を installしたPCの無線LAN

  • おおまかな流れです。

参考URL


ポイント

  • 初期設定のまま、どんなpackageでもinstallできるわけではない。package内容によってはレポジトリ作る必要(non-freeとか)
  • 自分のPCの無線LANバイスの名前を確認する
  • ネット上で紹介されている希望のpackageが、今も存在するか確認する。なければ代わりを探す
  • source.listの反映にはコマンド流す
  • 事象が起こるたび問題の切り分けを。

以下は迷走履歴。。一応書いておく。

手動設定開始

そもそもそのpackage存在する?

無線LANのデバイス名取得

無線接続確認

PCのデバイス一覧表示

iwconfigコマンドを使いたい

  • でも、結局 $ iwconfig ってコマンド使わないことには無線設定できないっぽい
  • iwconfig 使いたいがwlan-toolsがもうない。どうするか
    • wireless-toolsならいけた。これが代わりっぽい。参考: debian -- iwconfigを使用したい。
      • install成功。$ iwconfig してみる
      • 結局、自分のPCの無線も受信機のデバイス名は、Debian (Stretch) で無線 LAN の設定と同じ、wlp3s0 だった。
      • /etc/network/interfaces.d/enp1s0って名前で作ってあったファイル名と内容を編集して、再起動
      • 無事、無線つながった。
      • 「a alert job is running for raise network interfaces」 の文字が表示されて、起動がやたら遅い。
        この問題も解消されていた。起動の速さは以前に戻った。

完了!

リビングから引っ張ってきてた有線LANがなくなって、転んでた相方もごきげんになりました

PCにdebianをinstallする

debian install

  • PCにdebianをinstallするまでのおおまかな流れです。

まず isoイメージ本体をDLしてみる

  • 手元にUSBメモリはあるが、CDがない。USBメモリを使ってできないか。。
  • 押入れから外付けHDD引っ張り出してくる。 と、思ったらそのHDDはmac用にフォーマットしてあるので、windowsに挿しても反応しなかった、、
    • windows用にフォーマットするのもなんだかな、と思ったが、このHDD、仮想DVD-RWという機能がついていた、、すごい、、
      • つまり、既存のデータは残したままで、DVD-RW(的な挙動をする機能)を別に使えると。便利や!
      • image.png

      • って思って実行したけど無理だった。

        • USB HDDだけど、DVDの振る舞いをする、というのがPCに理解できなかった。=> USB HDD差してBIOS立ち上げてもそのUSB HDDの中にDVDが入ってる体なので認識しなかった。
        • 結局USB HDD内を消去(+パーティション)する事に。=>なんだけど、HDD内のデータ大事なので消せない、、NASに移そうとしたら、移行予想時間が2日とか出る、、これはないわ。
        • =>結局、相方の余ってるUSBを拝借してそこからinstallする事に。

  • Graphical install
  • Install
  • Advanced options
  • Accessible dark contrast installer menu
  • Install with speech synthesis

が出てきた。 Installを選択。

image.png

設定進むと、DHCPの設定が失敗すると出てくる。

image.png

有線のLANケーブルを繋げばいいのかな?と思ってリトライ。 以前使った10m LANケーブル、持っててよかった、、

DHCP構築成功、次に進む。

debianをどこに保存するか。 SDカードの余り(32GB)を差して、それを指定した。(後述しますが、SDカードはやめたほうがいいです

image.png

プロキシを設定せよとダイアログが出る。

image.png

httpプロキシとは?: webブラウザのパシリ的存在らしい。ブラウザがプロキシに命令=>プロキシがサーバーに要求=>サーバーがプロキシに返却=>プロキシがブラウザに返却 らしい。

なので、HTTPプロキシを設定するという事は、 「ブラウザにフィルターを掛けてウイルスはじいたり、リクエストのサイズ制限をしたりする設定」っぽい。

自宅のネット環境に、プロキシ設定がされてるかなんてわからないので、ブラウザからプロキシ設定を見てみる。

image.png

自分のにはプロキシが設定されていない、事が分かった。

image.png

と思ったら、ガリア戦記のコラムの方に書いてあった。 https://www.garunimo.com/program/linux/column-linux17.php

よって、さきほどのdebianのプロキシ設定は「しない」で進む。

debian本体は入ったが、それ以外はいれるか?と聞かれる。

デフォルトではデスクトップ環境も入るようだけど 今回の課題は「GUI禁止」っていうのを思い出して、 デスクトップ環境ってGUIなの?って思いながら、一応その選択外して、標準環境だけにして進む。 それって、wifi接続設定もCUIでやる事になるんじゃ、、と思いながらも進む。

image.png

しかしここまで来て、、 installが済んだので再起動しても、debianが立ち上がらない。

調べると、自分のPCのbiosSDカードで起動という項目がない、、

=> やりなおし、、 素直にHDDにinstallする事に。

同じことをもう一回やって、、

totalで4時間後、、debianをinstallできた!

image.png


その他

適当に触ってみた。

$ man ls とかやってみると、 interrupt to abort と出て、処理が止まらなくなった。いきなりかい。

止めようと思ってcontrol + Cとかするけど全然効かない。

数分後、、ずっとcaps + Cしてるのに気付いた。ctrl + Cするとちゃんと止まった。 windowsキーボードなつかしすぎる。おぼえてない。

試しに rootユーザーに切り替える。 su - 「パスワード入れて」の文字が文字化けしてる。 まず日本語対応させよう、、

adduserとかした時に1◆◆◆◆ 2◆◆◆◆◆◆... とか返ってきて、何聞かれているか分からんし。。。

ってか初期設定周りも何もしてなかった。 まず aptitude入れる。 root userで $ apt-get install aptitude

他にもいろいろ調べる。 http://izumii19.hatenablog.com/entry/2018/11/15/225313

2時間ほど格闘。 結局文字化けの原因は分からず。

次進もう、、日本語表記できない事が致命的になった時にやる

追記: やっぱり気になって、せめて返却される文字だけでも知りたいから、 結局.bashrcに「export LANG=en_US.UTF-8」ってやったら文字化け直った(英語で表示された)

ああ、adduserは引数がいるって言ってたのか。 http://linux.derkeiler.com/Mailing-Lists/Debian/2007-06/msg01777.html

viコマンド & 1人レトロ

昨日のvim学習gameはおもしろかった。 ああいうの作る人ってほんとセンスありますね、、、

image.png

わたしはもっぱらゲームはプレイする方です。

以前darksoul3にはまって抜け出せなくなったので、最終奥義「PS4本体を売る」で、緊急脱出した経験があります。

メルカリで2万で売れました。

viコマンド学習

qiitaを参考にする

  • bで戻るが、geでも戻れる。eとgeの連打で行ったり戻ったり!

  • z + enterで現在カーソル位置を画面基準値にできる!

  • control + f / b / e / yで画面を上下に行ったり来たり。

  • %でカッコ、閉じカッコ({}, [], ())へ一気に移動!
    • という事は、rubyとかプログラム自体はviで書くということ? 通はすごい、、
    • 応用すると、ggVGで全選択
  • ciwcwでもいい。1単語を削除してinsertモードに
  • I / Aで行の先頭 / 末尾からinsert
    • S / Cで1行削除後、現在地から末尾まで削除後にinsert
  • o / Oで現在地の上、下に行を追加してinsert
  • f + 任意の文字でその行の指定した文字へ移動
  • J / gJで行の連結(visualモードで複数選択後)(スペースで区切り入れる / 入れないで連結)
  • control + vで矩形選択
  • >> / <<でインデント!
  • r / Rでinsertモードに入らずにrewrite.
    • 日本語では効かない??
  • u / Uで大文字小文字化。~で反転。
  • control + P / Nで単語補完

特殊

  • 数字インクリメントcontrol + a / xで増やしたり減らしたり
  • control + w s / w vでwindow分割
    • control + w wでwindow移動
    • :qでwindow閉じる
  • z fで折りたたみ(vで選択後)
    • spaceで戻す

カーソル位置

  • control + o / iで、以前、後のカーソル位置へ移動

検索

  • /で検索
    • 検索後* / #で、次 / 後の該当箇所へ
      • いきなり* / #で、現在カーソル上にある単語で次 / 後検索。連打でどんどん移動
      • このときg* / g#とすると、部分一致で検索できる(userならuser_nameも当てられる)
    • AAA\|aaaなら、AAAまたはaaa
    • ^\dで数字から始まる単語検索
    • ne\+dでneedヒット
      • v\ne+dでもneed当てられる。頭に\v付ければ該当箇所に\いらず。\vgo+gleとか。

置換

  • :s/old/new/gで、その行全てを置換
    • :%s/old/new/gで、そのファイル全体。gcなら確認を取りながら置換
    • :100,200s/old/new/gで、100~200行目を置換対象にする

viは合わせ技が得意

  • ywで1単語コピー(pで貼り付け)
  • gg/Gでファイルの一番上、下に移動だから、ggvGで全選択 みたいな。

検索設定周り

  • 検索してたら必要になった。:set number / nonumberで表示、非表示
    • 数字 + Gでその行へ移動
  • :set icで大文字小文字無視検索(ignore case)。戻すのはnoic
    • 単純に毎回検索時に/ignore\cでも同じ事
  • :set hls isで、全検索ワードハイライト(hign light search)
    • 解除は:nohlsearch

コマンド

  • :!lsなどで、viを起動しながらコマンド打てる
  • :e + control deで始まるコマンド候補を紹介してくれる

保存

  • :w ファイル名で、現在ファイルを別名で保存
  • vで選択後、:押して、w ファイル名で、選択部分をファイル保存できる
    • :r ファイル名(TEST)で、現在のファイルに外部ファイル(TEST)のテキストを読み込む

vimtutor

  • 一通り読んだあと、macvimtutorの続きをやる。最後まで完了。

vimプラグインをいじる

https://qiita.com/jnchito/items/5141b3b01bced9f7f48f#2-6

  • vimrcファイル => run commandの略らしい
  • vimプラグイン管理ツール NeoBundle をinstall

    • NeoBundleに出てくるshコマンドってなんだ。。ここを参考に読み解く。
      • curl でファイル落としてきて、そのファイルをshで実行するわけだな。
      • と、ここまでして、まず一番最初に簡単なvimプラグインを入れる事を体験すべきと思いなおす。フォルダをツリー構造で表示するvimプラグインを入れてみよう。
      • 伊藤さんのvim プラグイン設定解説にはPlug 'scrooloose/nerdtree'って書いてあるから、そう書いたらPlugって何?Pluginじゃない?ってエラー出る。
    • 違いは何だろうと調べると、プラグインマネージャというのがあって、Pluginって書き方はVundle.vimで、Plugって書き方はvim-plugというマネージャらしい。今回はVundle.vimなのでPluginで書く。
    • .vimrcに書いて、vim +PluginInstall +qallで適用。

    • お、いけた。

      • image.png
  • ここで、neobundlevim plugって どっちがいいんだろう?と疑問が湧く。調べてみると、vim plugの方がかなりスターが多かったので、これを使うことにする。

    • vim plug install方法を参考にvim plugを入れた。
    • :PlugInstallでinstall
    • :PlugStatusプラグインの状態の確認
    • :PlugDiffで前回からのアップデートとの変更点を表示
    • vim plugは記述が少ないのが、個人的にイケてるおもた。

vimrcをgitで管理

  • シンボリックリンク設定 を参考に、gitでのvimrc管理を学習。
    • mvコマンドってmoveだけじゃなかった。。renameの意味もあるらしい。mv ~/.vimrc ~/dotfiles/_vimrc
    • lnコマンドシンボリックリンク設定か。なるほど。ln -s ~/dotfiles/_vimrc ~/.vimrcこれってファイルの実体はどこにあるのかな?~/.vimrcにアクセス来たら~/dotfiles/_vimrcにファイルの実体あるからそっち行ってね、って飛ばしてくれる感じかな。
  • おお、リンクができたぞ。vimプラグインもちゃんと起動した! image.png

Rails向けのvim プラグイン

UNIXLinux について知る

、、、

今日はここまで、明日は続きを。 というか、この「UNIXLinux について知る」の回、めちゃ長い気がする、、 本だけでも400ページあるがな、、 2~3週間を目処にじっくりやろう

というかこのプラクティスの課題で上がってる、「新しいLinuxの教科書 」 「なか見!」で400ページほぼ全部読めますね。

image.png


編集後記:

podcastrebuildっていうエンジニアの好きな番組があるんですけど、 その中のひろしまさんっていうぼやき担当(個人的に好き)の人がいて、この人が

「作りたいのがないのにプログラミングやりたいとか意味わからない」 って発言してたんですよね。

このフレーズ、ずーっと今までいろんなとこで聞いてきたんですけど、 自分は特に作りたいのないんですよね、、

いや、厳密にいうとあるんですけど、作ろうと思って調べると、すでに世の中にあるんですよ。

「ああ、もうあるのか」ってわかると、途端に作る気がなくなるんですよ、、 そういう人いません?

こういう時、なんとかオリジナル感出そうとしていろいろ考えるんですけど、 作るコスト考えたら、既存のサービス使ったらすぐに目的達成できるやんって思っちゃうんすよ。。

こないだも、会社のサーバーが攻撃食らったって話を聞いたから 「サーバー攻撃がいまどこで起こってるか知れるみたいなサービスがあったらおもろいな。なんなら世界中で!」

なんて思いついて、こういう場合、作るにはなにが必要なのかな〜、 そういう情報発信してるサイトがあって、apiとか提供してないかな〜

なんてワクワクするんですけど、ネットを探すと

すでにあるんすよ。しかも予想をはるかに上回る質で、すでに。

これトラウマで、毎回「何か作ってみたい」って調べると、ほぼ全てすでにあります。

作りたいって感情よりも、「すでにあるなら、それを使えばええがな」「その方が時短やがな」って考えるのは、生粋のエンジニアにはなれないのではないか、、

「特に作りたいのがない」のは、エンジニアになる資格がないのではないか、、

私はずっと悩んでおります。

今日これで悩んで半日おわった(:3 」∠)

追記: 会社が「こういう仕組み欲しい!」って言ってきた時は一気にテンション上がってやる気になります。 問題解決が第一なんですよね。その一点にフォーカスしてます。 ただ、目的を達成するのが目的で、作る過程を楽しむとかじゃないです。達成できたら楽しく思えますけど。

だけど、一緒に仕事してたプログラマの先輩は全く逆でした。過程が楽しくて、結果はあまり気にしてませんでした。

わたし個人としては、この先輩の方がエンジニアに向いてる気がしてならないのです

、、、

なんて、今まで何度も考えてきた事を、ひろしまさんの発言聞いて思い出しました。

もう気持ちの整理はついてるんですけどね(:3 」∠)