Study

SoftwareDesign-2021.04

特集1 新人教育に役立つLinux総復習

良特集。新人教育と記載されているが、10年選手の人にも良い復習になると思う。最近はAWSでも使うのはECSやserverlessで、EC2を使うことなくシステム構築されることが増え、トラブルシューティングなどでコマンドを直接叩くことは減っている。それでも、この特集の内容は知っておいた方がいい。

1. プロセス

コマンド 内容 補足
ps -aux プロセス一覧
ps -aux –no-headers | wc -l プロセス数 PSコマンドのヘッダーを消して行数をカウント
pstree -p プロセス親子確認 -p: PID表示
time {コマンド} コマンドの実行時間(開始から終了までの時間)

ps aux の出力の見方
STAT: S:スリープ状態 R:実行可能状態 Z:ゾンビプロセス
START: 起動時刻
TIME: CPU使用時間

カーネルについて
システム起動時にプロセスより前に起動(boot -> kernel -> initプロセス ->initが子プロセスを起動)
カーネル提供機能の一例: プロセス生成、スケジューリング、リソース開放など
これらをプロセスがやると、あるプロセスがリソース独占という状態が発生してしまう
プロセスがカーネルに依頼する処理=システムコール

プロセススケジューラ
昔でいうタイムシェアリングのマルチコア版の説明。ラウンドロビンというらしい。

ゾンビプロセス
子プロセスが終了しているのに、親プロセスが把握していない状態。STATがZになる。

シグナル
外部からプロセスに強制処理

デーモン
= 常駐プロセス
制御端末の割り当てなし
独自セッションを持っている(あらゆるログインセッションの影響を受けない)
initが親。デーモン生成したプロセスを離れる。

2. パーミッション

ファイルパーミッションの所は基礎中の基礎。
umaskというものがあるのは、はじめて知った。

ユーザ周り。
最近はlinuxのOS内で細かいユーザ管理をすることは減ってきたのs流し読み。
必要になったら学習し直す。

3. ディレクトリ構造とファイルシステム

linux ファイル配置に一定のルール(FHS: Filesystems Hierarchy Standard)がある
/bin -> コマンドのバイナリ(一般ユーザ用)
/sbin -> コマンドのバイナリ(特権ユーザ用)
/lib -> 共有ライブラリ、カーネルモジュール
/usr -> /直下に置くほどのもの(システムの起動・復元に関わるもの)でないもの(?)
/opt -> サードパーティ
/var -> 可変データ 例:ログ
/run -> システム起動後のプロセスデータ

最近はUsrMerge(/bin, /sbin, /lib を user/* と区別しない)が主流になってきている

パーティションとファイルシステムの記事は読み飛ばし、昔は最適構成を調べながらやったりもしたが、そもそも自動で問題ないケースがほとんどだし、クラウド全盛の昨今ではそもそも設定することがあまりない。inodeとジャーナリングについても記載されていた。この辺も昔業務で必要になって調べたことあるけど、あまり覚えていない・・・ コンテナをポンポン立ち上げていく現在のシステム構成では、もうあまり発生しない障害のタイプのような気がする。

4. パッケージ管理

パッケージ周りの知識は、Dockerfileとかでもまだまだ必要なので、一通り読んだ。

パッケージマネージャは、低レベル、高レベルの2種類ある。
低レベル: タスク(パッケージファイルのインストールや削除など)を処理するツール
高レベル: メタデータ検索、依存関係の解決を実行できるツール

  • RedHat系
    • 低レベル: rpm
    • 高レベル: yum (yumのインストールは内部でrpmを使用している)
    • 高レベル: dnf yum3.4の後継、モジュール単位で管理できる
  • Debia
    • 低レベル: dpkg
    • 高レベル: apt (apt-get は、dpkgを使用してインストールしている)

特集2 SSL/TLS

SSL/TLSの特集。

私は今までインフラが主戦場だったのですが、実は苦手分野だったりします。よくわからないけど、アラートが出るからとりえず対応するという感じでかわしてきました。仕組みもよくわからず、認証局にお金(当然、会社の)払って証明書発行して何か設定したらアラート消えたからOK的な。最近はAWSのACMしか触ってない気がします。AWSコンソールポチポチしてWAFやALBに割り当てる、TLSバージョンはデフォルトのままみたいな対応をしています。

で、今回、せっかくの特集なので学び直してみようと思ったのですが、中々頭に入ってこず流し読みしてしまいました。

最近の流れとしては、証明書の期間が2年から1年に収縮、さらにもっと短くしようという動きもあるらしいです。

鍵と証明書周りの説明は読んだけど、やっぱり頭に入ってこない。秘密鍵なくしたらまずいぐらいの認識しかないです・・・

認証法3種類: DV(ドメイン認証)、OV(組織認証)、EV(拡張組織認証)

Let’s Encrypt 無料証明書、最近流行っている。制限がある、大規模システムで使う場合は注意。制限: 同一コモンネーム、登録ドメイン数、認証待ち証明書数

SSL設定完了後のチェックリスト、これは役に立ちそう。本番でSSL設定したり更新したりしたら、読み返したい。
– 手元のブラウザでサイト閲覧確認
– SSLチェッカー
– Mixed contentなどのソース側の問題を確認(ブラウザ開発者ツール -> Network -> 右クリック Scheme -> httpソースを発見)
– リダイレクトを設定(HTTP->HTTPS)、その後確認(キャッシュに注意、curlを使うのが良い)
– HTSTを設定

特別企画 プログラミングコンテスト

プログラミングコンテストに関する数ページの特集。アルゴリズムの解説ではなく、プログラミングコンテストとはみたいな紹介記事。

アルゴリズム系は一時期、興味をもって蟻本とかやっていたけど、長続きしなかった。でも今は、アルゴリズム系や機械学習以外にも、いろいろあるらしい。知らなかった・・・ 個人的にはCTF(セキュリティ関連)やゲームAI、Webサイトのレスポンスあたりが面白そうと思った。

CTFは私自身がセキュリティの知識がほとんどないから、ゲームAIは格ゲーのAIがもっと発達して欲しいという完全な趣味から、Webサイトのは業務に役立つかも知れないからという理由から。でも、たぶん、実際にやる(行動に移す)ことは、ないんだろうなあ・・・

その他の記事

個人的に気になったもの。

最新用語解説 Waypoint

terraformのHshiCorp社が、デプロイツール Waypoint を作り始めた。

デプロイ対象が増え続け(ecs, k8s, serverless…)複雑化し、開発者の学習コストが増え続ける課題解決を主題としたプロダクト。ワンライナーでビルドからデプロイまでの一貫処理ができるようになるとのこと。

エンジニアとしてデプロイ対象、つまり動作環境の特性について学習しないといけなのは変わらないが、各種デプロイツールの特有の学習コストを省いてくれるのはありがたい。個人的にデファクトスタンダードまで育って欲しいプロダクト。期待。

Offical: https://www.waypointproject.io/
GitHub: https://github.com/hashicorp/waypoint

高校数学

今回が8回目で最終回っぽい。今までほとんど読んでなかったが、最近、日々のルーティンに脳トレや勉強し直しを取り入れようと思っているので、過去号のこの企画をやってみようかと思っている。

Gitコマンド

前回号から始まった企画。毎回、Gitコマンド一つをとりあげて、初学者向けに説明する企画っぽい。Gitは基本、JetbrainsやVSCのUIからしか使わない。が、一応、復習も兼ねて読んでいる。初学者向けにわかりやすいように配慮されているのだろうけど、個人的にはあまり好きじゃないイラスト。というか、このイラスト見てもよくわからん。

今月は git branch。git branch の機能UIで十分な場合が大半でコマンドを叩くことはあまりない。でも知っていて当然のコマンドだと思う。-aオプションが紹介されていたが、個人的には-rオプションの方が使うことが多い。ブランチ作成、削除も紹介されいたが、これらをコマンドでやることはまずないかな。

VSC

VS Code Dayの参加レポートが面白かった。

興味もてないやつ

  • チーム開発(?)の連載
    今回は個人の目標設定。フリーランスになったのは、こういうのをやりたくなかったらというのもある。

  • wgetの脆弱性
    2016年にあった脆弱性。ふーん、こういうのあったんだという感じで目を通した。

  • AIチャットボット
    今回は第4回。ハンズオンなので第1回から追ってないと意味ない。

  • アジャイル特集
    マネージャよりの話

  • ディープラーニング、Vim、Rust、YAMAHAルールの特集
    読んでいない

  • DevOps
    CloudFrontとS3の構成をterraformでやりましょうという話。よくある話すぎるので(ちょくちょくやっていること)、流し読み。