ラズパイ4 初期設定

# はじめに
ラズパイ4を購入したので個人ユーザー環境作成までの備忘録を書く。途中経過だけど公開しちゃう。
別に複数ユーザーを作るわけじゃないが、個人的にRoot Userを直接使うのに抵抗があるためこういう方針に。ごっちゃごちゃやで。

> 作業中にPi削除+新規ユーザ作成で対応しようと思っていたがPi UserをRenameして使うことに。
> pi userをRootだと思ってたゾ
> この記事で基本的に引用の形式で書かれている部分はただの感想。

# OSの準備
> OSはMicro SDへ書き込み、本体に差し込むだけでいいらしい。すごい。

## OS Imageの取得と書き込み
> まぁ何でもいいやってことでRaspbian(Debian base)を選択。

## Wifi設定

## IP固定(未対応)


# Pi Userでの作業(特にPiである必要はない。)
Debian baseとのことなのでapt系はDebian項目を見る。

## apt の更新

TODO: 詳細書く

## key bindの設定
emacs likeにしたい。内容は割愛。編集までの手順を記載。
全体への設定は /etc/.inputrc, ユーザ別の設定は ~/.inputrcに書く

> 基本的な設定は /etc/.inputrcを見て、ユーザ別の.inputrcで上書きする形なのかな。
> わかったら更新する。

ファイルの更新が終わったら、`bind -f ~/.inputrc` で読み込む
```~/.inputrc
  set bell-style none
```

## 最新版のソフトウェアビルド
既存でGitはあったがなんとなーくアップデートしたかったのもあって更新。

> `apt search <package name>`(部分一致検索) or `apt list`(完全一致検索) で検索する。
> ヒットしたVersionは2020/04/20 時点でのLatest versionではなかったのでソースコードからビルドすることに。

基本は以下の手順  

```~/
  curl -LO <url /filename.gz>
  tar -zxvf <filename.gz> -C /usr/local/src
  cd /usr/local/src/<filename>
  ./configure
  make
  make install
```

> ソースコードからビルドしたものは /usr/local/src へ入れて、makeはデフォルトの /usr/local/bin を使う。
> にわかなのでここらへんもっと適切な手法があるんじゃないかな

### Emacs
```
  sudo apt install gcc make ncurses-dev
  ...build...
  systemctl --user enable emacs
  emacs ./.bashrc
```

```~/.bashrc
  alias e='emacsclient -t'
```

### Git  
> `./configure --prefix=/usr` の記述はオプションを外している。

```
  sudo apt install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
  tar -zxf git-2.0.0.tar.gz
  cd git-2.0.0
  make configure
  ./configure
  make all doc info
  sudo make install install-doc install-html install-info
```


### tmux  
```
  apt install libevent-dev ncurses-dev build-essential bison pkg-config
  ...build...
```

## ラズパイ設定
基本的には参考サイトに則って進めた。気になった点は別途調査。

### SSH host keyの更新  
> この作業って何やってんだろってことでしらべた。  
> 4種の暗号化方式のキーを作成してくれるらしい。秘密鍵しか作ってなかったので学び。  

```
  sudo rm -v /etc/ssh/ssh_host*
  sudo dpkg-reconfigure openssh-server
```

### SSH Public key / Private keyの作成  
秘密鍵って英語でどういうの

```
  mkdir ~/.ssh
  chmod 700 .ssh
  cd .ssh
  ssh-keygen -t ed25519
  >>> input passphrase 
  cat id_ed25519.pub >> authorized_keys // 初回のみ有効 2回め以降の鍵登録の場合は追記?  
```
local machineから認証鍵を転送する。
> ここはラズパイからでもいいのでは?  

```
  scp pi@<hostname>:/home/.ssh/id_ed25519 ~/.ssh
```
Configファイル作成
> 認証鍵が複数ある場合には、`./config/*`みたいなのだけ書くと確か管理しやすかった気がする

```.ssh/config
  Host <local hostname>
    HostName <remote hostname>
    User <username>
    IdentityFile ~/.ssh/id_ed25519
```  

## Bashの設定
> 情報まとめるために末尾に入れたが、必要なときに追加すればいい

### .bashrc
```.bashrc
  alias ll="ls -l"
  alias la="ls -a"
```





# 参考サイト
先駆者、公式へ陳謝。太字リンクはめっっっちゃくちゃ参考にした。

## Qiita
+ @yas-nyan [Ubuntu でSSHホスト鍵を作り直す](https://qiita.com/yas-nyan/items/522371f38ed697f55064)  
+ @yukifrog [emacs daemon で使う](https://qiita.com/yukifrog/items/5928f434c3342c9cab4d)   
+ @molchiro [Raspberry Pi で systemd を使ってプログラムを自動実行する](https://qiita.com/molchiro/items/ee32a11b81fa1dc2fd8d)  


#おまけ
## Autohotkeyの設定
Windows機からアクセスしているが、WindowsのキーバインドがきついのでAutohotkeyでEmacs likeな設定をしている。

Terminal/Editor関連を操作しているときだけバインドを外したい設定でハマったのでメモ。

```script.ahk
  ;IfWinNotActive に複数のクラスを設定したい
  ;ファイル冒頭にGroupを設定する、キーバインドよりもあとに書くとうまく行かない
  GroupAdd, <GroupName>, ahk_class <ClassName>
  GroupAdd, <GroupName>, ahk_class <ClassName>
  GroupAdd, <GroupName>, ahk_class <ClassName>
  ...

  #IfWinNotActive, ahk_group <GroupName>
  ...処理...
  #IfWinNotActive ;これで閉じる
```

## 外部
+ **純規の暇人趣味ブログ** [【Buster対応】Raspbianのインストールと最強の初期設定](https://jyn.jp/raspbian-setup/#OS)  
+ my-emacs [Docs » Emacsをソースからビルドしてインストールする](https://myemacs.readthedocs.io/ja/latest/build.html)  
+ tsaitoh.net [emacsをsystemdで起動](https://tsaitoh.net/wp/2019/01/31/emacs-server-from-systemd/)
+ Tmux [Tmux](https://github.com/tmux/tmux/wiki/Installing)  
+ The Emacs Editor [38.2 emacsclientのオプション](https://ayatakesi.github.io/emacs/24.5/emacsclient-Options.html)
+ ITmedia [【 bind 】コマンド――キー入力時の動作設定を確認、変更する](https://www.atmarkit.co.jp/ait/articles/1805/11/news031.html) 
+ Git--local-branching-on-the-cheap [1.5 使い始める - Gitのインストール](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)