brew 環境下で nokogiri をインストールできないとき
以下の二つのエラーが出た。
zlib is missing; necessary for building libxml2
xslt is missing. Please locate mkmf.log to investigate how it is failing.
解決法
- libxslt, libxml2 をインストール
- brew でインストールされている libxml2 のパスを指定
brew install libxslt libxml2
bundle config build.nokogiri --use-system-libraries --with-xml2-include=$(brew --prefix libxml2)/include/libxml2
参考サイト
Windows の OpenSSH で Permission denied が出る原因
- パスワードでのログインは可能 (ただし、設定で無効化している)
- 公開鍵認証で
Permission denied
が出る
実際に localhost:22
に接続すると、
hikari@localhost: Permission denied (publickey,keyboard-interactive).
とエラーが出る。
原因
Administrators
グループ、つまり「管理者ユーザー」はデフォルトで、C:\ProgramData\ssh\administrators_authorized_keys
の公開鍵を
参照して認証しているようだ。
これを、$env:userprofile\.ssh\authorized_keys
に変更する。
解決法
管理者権限で C:\ProgramData\ssh\sshd_config
を開き、以下のように下の二行をコメントする。
- Match Group administrators
- AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
+ #Match Group administrators
+ # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
保存が終わったら、サービスを再起動する。
Restart-Service sshd
termux に powerline をインストールする
pkg install golang
powerline のインストール
あとは、Powerline のインストール方法とほぼ同じ
go get -u github.com/justjanne/powerline-go
.profile に設定
~/.profile
を開き、以下を追加する。
GOPATH=$HOME/go
function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -newline -error $?)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
フォントの設定
例として、yuru7/PlemolJP をインストールする。
wget https://github.com/yuru7/PlemolJP/releases/download/v0.4.0/PlemolJP_NF_v0.4.0.zip
unzip PlemolJP_NF_v0.4.0.zip
cp PlemolJP_NF_v0.4.0/PlemolJP35Console_NF/PlemolJP35ConsoleNF-Medium.ttf $HOME/.term
ux/font.ttf
rm PlemolJP_NF_v0.4.0 -rf
rm PlemolJP_NF_v0.4.0.zip
termux に ssh する
pkg install openssh
エラーが出る場合
Android 版の termux で実行するとエラーが起こるので、 既存の termux を削除し Github から termux をインストールすることをおすすめします。
サーバーの起動
sshd
公開鍵の設定
クライアントの公開鍵 (~/.ssh/id_*.pub
) を
termux の ~/.ssh/authorized_keys
に追加する。
公開鍵はメールで自分宛てに送ったり、twitter の DM で自分宛てに送ったりして、コピペすると楽。
# 例:
echo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKYztjZfIVMl5o0J2DrigTsl1XgbSKMUgYCpfOfhMtmw hikari@B450M-K >> ~/.ssh/authorized_keys
ログイン
# スマホの ip アドレスを確認
ip a
ssh 192.168.x.x -p 8022
Windows の OpenSSH でパスワード認証を無効にする
管理者権限でターミナルを開く
設定ファイルを編集するために管理者権限が必要なため、管理者権限でターミナルを開く。
ターミナルのアイコンを右クリックして、ターミナルを右クリックして、「管理者として実行」
ターミナルで設定ファイルを開く
notepad C:\ProgramData\ssh\sshd_config
を実行。
設定ファイルを編集
- # PasswordAuthentication yes
+ PasswordAuthentication no
を
に変更し上書き保存する。
SSH サーバーの再起動
ターミナルに戻り、以下のようにコマンドを実行し、SSH サーバーを再起動する。
Restart-Service sshd
接続テスト
設定が有効になっているかテストする。
ssh localhost
を実行し、
user@localhost: Permission denied (publickey,keyboard-interactive).
のようになっていれば OK
SSH トンネル
ローカルポート転送
ssh -L [クライアントのポート]:[転送したいホスト]:[転送したいホストのポート]
クライアント A、SSH サーバー B、転送ホスト C があり
C:8080
を A のポート 80 に転送したい場合。
ssh -L80:C:8080 B
この転送で、A から http://localhost
へアクセスすると、
B の http://C:8080
と同じ内容が表示される。
まとめると、 A から C は見えなくても、A から B へ SSH が接続でき、 B から C が見える場合、B を経由して C のポートを A へ転送可能。
-g
をつけると、A のホスト名で A のネットワークにあるパソコンから
C:8080 へアクセスができる。
家のネットワーク上にあるポートを外部に転送したいとき、 とりあえず 22 番だけ外部に開放している状態であれば、 ssh 経由で家のネットワークにアクセス可能。
リモートポート転送
ssh -R [クライアントのポート]:[転送したいホスト]:[転送したいホストのポート]
ローカル転送と異なり、 接続先から見えるポートを転送するのではなくクライアント側から見える ポートを転送する。
クライアント B、SSH サーバー A、転送ホスト C があり
C:8080
を A のポート 80 に転送したい場合。
ssh -R80:C:8080 A
この転送で、A から http://localhost
へアクセスすると、
B の http://C:8080
と同じ内容が表示される。
B が外からアクセスできない場合でも、
B と A の接続を確立させれば、
C の内容を A に転送可能。
B を直接操作できない場合に使うことが多く、
B と A の接続が切れるトラブルが発生した場合、A から C へのアクセスが不可能になるので、B と A の接続が切断された場合に自動的に再接続するツール
autossh
が使われることが多い。
Powerline のインストール方法
Go のインストール
powreline-go のインストールのために Go をインストールする。
brew install go
Powerline-go のインストール
go get -u github.com/justjanne/powerline-go
設定
Bashrc
Vim とか nano とかで ~/.bashrc
を開き、以下を追加する。
GOPATH=$HOME/go
function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -newline -error $?)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
source ~/.bashrc
を実行すると変更が適応される。
フォント
一応これで終了だが、文字化けする場合がある。 Powerline に対応したフォントを設定する必要がある。 Windows では、Cascadia Code PL とか、Cascadia Mono PL とかが使える。
おすすめは、https://github.com/yuru7/PlemolJP/ の PlemolJP。 ダウンロードは、 https://github.com/yuru7/PlemolJP/releases の PlemolJP_NF_vX.X.X.zip をクリックし、ダウンロードし展開してフォントをインストール。 フォントの設定は、PlemolJP35 Console NF とする。
Arduino で delay() を使わない
Arduino で delay()
を使うと、待機時間中に何もできない。
millis()
を使用した 1 秒周期の LED 点滅するプログラムを作った。
millis()
で時間を取得し時間で割って、t
に代入- 前回の t と新たな t を比較して異なる場合に関数を実行
例
unsigned long t = 0, ot;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
ot = t;
t = millis() / 500;
if(ot != t){
if(t % 2){
digitalWrite(LED_BUILTIN, LOW);
}else{
digitalWrite(LED_BUILTIN, HIGH);
}
}
}
モニター無しで Raspberry Pi のセットアップ
モニター不要で Raspberry Pi のセットアップ方法の説明。
- 有線での接続が必要なため、LAN ケーブルを接続できる Raspberry Pi 端末であること
- Raspberry Pi を操作するためのパソコンが必要
Raspberry Pi Imager をインストールし、OS を選択。書き込み先の micro SD を選択し、WRITE で書き込む。
設定
SSH の有効化
SSH を有効にすることで外部から Raspberry Pi の操作が可能
micro SD カードを挿し直し、直下に ssh という名前でテキストファイルを作成。拡張子は不要。
VNC の有効化
config.txt を開き、
framebuffer_width=1280
framebuffer_height=720
のコメントを外し上書き保存。
起動
micro SD カードを Raspberry Pi に挿し、電源を接続し起動する。
SSH で接続
ホスト名は raspberrypi、ユーザー名は pi、パスワードは raspberry で接続
パッケージの更新
sudo apt update
sudo apt upgrade -y
VNC の有効化
sudo raspi-config
3 Interface Options を選択し、P3 VNC を選択し、YES。Finish で閉じる。
VNC で接続
ユーザー名、パスワードは SSH のときと同様。
Wi-Fi の有効化
VNC から Wi-Fi を有効にすることで有線接続が不要となり、電源のみで Raspberry Pi を操作することが可能。