class: compact # <small>第06回おしながき</small> <div class=footnote> <small><small> 前半のハイライトは「`sudo python3 /home/admin/www.py`を詳細に説明できる」ことだよな ... 11月末は出来るか尋ねようか考え中 </small></small> </div> <small> 1. おしらせ - ポータルのパスワード ... BF22 - 12月からは構築が本格化します - もちろん先に始めていいんですよ,AWS資格試験の半額バウチャー復活しました話 1. EL (確認テスト) 1. 今回のハイライト 1. 前回の課題の答え合わせは無し 1. 演習 - vocareum と aws console 両方の画面を出しておいてください - 例題は、一緒に操作をしていきます - 課題はポータルのレポート機能で提出 - 今回、課題の動作確認はありません </small> --- class: compact # <small>第06回のハイライト</small> <div class=footnote> <small><small> (脚注1) その他の話題せいぞろいなので、すこし統一感が無いですけどね (脚注2) 負けPCが多すぎるってか </small></small> </div> <small> - デバイスドライバ、デバイスごとに必要なプログラム - 仮想記憶(virutal memory: これも略称はVM) - 複数のプロセス - 物理メモリよりも巨大な仮想メモリ(負け) - ファイルシステムとプロセスの階層構造 - 情報の先出し - マトリョーシカ本棚:-) - 来週もうすこし詳しく階層型ファイルシステムの演習をやります </small> --- class: compact # <small>演習のハイライト</small> <div class=footnote> <small><small> </small></small> </div> - コンピュータの色々な要素(部品)の現状を調査する方法 - プロセス群ストレージの階層構造を見てみる <br> (Unixでは何でもファイルだし、可能な限り全て階層構造) --- class: compact # <small>演習</small> <div class=footnote> <small><small> </small></small> </div> - vocareum と aws console 両方の画面を出しておいてください - 例題は、一緒に操作をしていきます - 課題: ワークシートを出してください - 答え合わせは来週します --- class: compact # <small>【再掲】AWS EC2にログインしてください</small> <div class=footnote> <small><small> </small></small> </div> <small> 1. いったん vocareum の画面を出してください 1. AWS EC2のPublic IPをクリップボードにコピーしてください 1. ターミナルで次のコマンドを叩いてください - IPアドレスは各自ことなります - IPアドレス以外は全員おなじ文字列です ``` $ ssh -i .ssh/labsuser.pem admin@10.20.30.40 ``` - 10.20.30.40の部分は上でコピーしたPublic IPです。各自ことなります - `$`の部分は、もっと長い変な文字が書いてありますが、上の例では省略しています - sshコマンドの引数 = ログインしたい目的のサーバ。 フォーマットは「ユーザ名@サーバのIPアドレス」 - だれ = ユーザ名 = admin (AWS EC2 debianの場合デフォルトが admin なので本科目ではadmin) - どこ = サーバのIPアドレス = EC2のPublic IP - 公開鍵暗号の認証情報を`-i ファイル名`で指定します。 </small> --- class: compact,img-right # <small>パート1: EC2の構成要素を探る</small> <div class=footnote> <small><small> (脚注) このあとのコマンドには出力が長いものがいくつかあります。 そういう場合、<B>コマンド | head</B>とすると最初の10行だけで表示が打ちきられます。 パイプ( | 部分のこと)とは何?の説明はスライド右側の YAPC::Hakodate 2024招待講演の<B>スライド(P.14-)</B>を参照 <br> パイプの話はパートBで、その後のスライド本編「コンピュータ開発史」の序章部分です。 講演の動画がYoutubeにアップロードされる予定なのだけれど、まだ編集中みたいです。 一つ前のイベントの例をみるかぎり、年末くらいの進行ですかね </small></small> </div> [![](../../images/yapc-hakodate-2024/slide-14.png)](https://speakerdeck.com/fmlorg/sierutoperlnoshi-ifen-ke-souitutasi-kao-nodao-ju-ha-dokokaralai-te-dokoheyukunoka-v1-dot-1-0?slide=14) - 方法その1 <small> - 'lsなんとか'コマンドシリーズによる調査 </small> - その他の方法は省略 --- class: compact # <small>CPU</small> <div class=footnote> <small><small> (脚注1) lscpu | head すると最初の10行だけで表示が打ちきられます。 | については前ページの脚注を参照のこと (脚注2) head は最初の10行だけを表示して終了するコマンド。「head -数字」とすれば先頭の「数字」行を表示。 ちなみに反対の動作をするコマンドがtail </small></small> </div> <small> ``` admin(54.205.249.209):~ $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 46 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Vendor ID: GenuineIntel Model name: Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz CPU family: 6 Model: 79 ... 省略(すごく長い) ... ``` </small> --- class: compact # <small>メモリ</small> <div class=footnote> <small><small> </small></small> </div> <small> ``` admin(54.205.249.209):~ $ lsmem RANGE SIZE STATE REMOVABLE BLOCK 0x0000000000000000-0x000000003fffffff 1G online yes 0-7 Memory block size: 128M Total online memory: 1G Total offline memory: 0B ``` - 細かい話はともかく、メモリ量が1GBであることは分かる </small> --- class: compact # <small>ストレージ</small> <div class=footnote> <small><small> (脚注) 下の3行はストレージ(仮想ディスク)のレイアウトの話になります。 レイアウトについてはGPTを勉強してください。 <br> ちなみにDebianのOSイメージが書きこまれているのはxvda1という名称の部分だけです </small></small> </div> <small> ``` admin(54.205.249.209):~ $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS xvda 202:0 0 8G 0 disk ├─xvda1 202:1 0 7.9G 0 part / ├─xvda14 202:14 0 3M 0 part └─xvda15 202:15 0 124M 0 part /boot/efi ``` - これも細かい話はともかくストレージの総量が8GBであることが分かる </small> --- class: compact # <small>パート2: Unixシステムの状態確認 (システムのサマリ)</small> <div class=footnote> <small><small> </small></small> </div> - 最重要のものだけを2、3 - これも色々ありますけどね --- class: compact # <small>df コマンド ... Unixのストレージ利用状況の詳細</small> <div class=footnote> <small><small> (脚注) df -m とすればMB単位の表示に切り替わり、より見やすくなります </small></small> </div> <small> ``` admin(54.205.249.209):~ $ df Filesystem 1K-blocks Used Available Use% Mounted on udev 485380 0 485380 0% /dev tmpfs 99336 492 98844 1% /run /dev/xvda1 8025124 1905800 5690116 26% / tmpfs 496660 0 496660 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock /dev/xvda15 126678 11840 114838 10% /boot/efi tmpfs 99332 0 99332 0% /run/user/1000 ``` - xvda1つまりDebian GNU/Linuxがインストールされている部分の詳細確認 - <B>つねに残り容量が十分大きいか?を確認するべきです</B>。 上から4行目の`/dev/xvda1 8025124 1905800 5690116 26% /`が最重要で、 ぱっと見わかりやすいのは五列めの(すでに使用済が)26%というところ。 <br> 具体的に残り何KB利用可?が4列目ここでは5,690,116KB (5.69Gb)。 一番右の`/`はファイルシステムの`/`つまり一番上で、HDD全体を意味します </small> --- class: compact # <small>top コマンド ... OSのステータスサマリ</small> <div class=footnote> <small><small> (脚注) q (quebecc の q, quit の q)を押せば終了します。 エディタ以外は、とりあえず q とか Ctrl-C を押してみるのが終了の定番 </small></small> </div> <small> ``` top - 01:29:59 up 1 min, 1 user, load average: 0.09, 0.04, 0.01 Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 89.0 id, 0.6 wa, 0.0 hi, 0.0 si, 10.1 st MiB Mem : 970.0 total, 748.8 free, 229.1 used, 123.9 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 740.9 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 36 root 0 -20 0 0 0 I 0.3 0.0 0:00.01 kworker/0:1H-kblockd 1 root 20 0 102128 12068 9184 S 0.0 1.2 0:00.79 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd ... 以下略 ... ``` - <B>数秒おきに自動的に更新</B>されます。つねに確認するのは次の2ヶ所か - `load average: 0.09, 0.04, 0.01` ... どれくらいOSが忙しいのか?の目安 - `MiB Mem : 970.0 total, 748.8 free` ... トータル1GB、748MBがフリー(空き) - いま動いているプロセスが上の方に表示されます。例:<B>絶えず同じコマンドが表示される=重たい犯人か?</B> </small> --- class: compact # <small>ps コマンド ... プロセスのステータス</small> <div class=footnote> <small><small> (脚注1) psのオプションは、コマンドのフォーマット規則の例外です。 ps -auxwwも(- なしの)ps auxwwも同じく受け付けてくれて、同じ動作をします。 psには引数がなくてオプションしかないので - なしでもオプションだと分かるから大丈夫な例ですかね。 ps は、ひんぱんに使うコマンドなので - の1文字分すら面倒という気持ちは、よくわかります。 Unixは全般的にそういうモノです <br> (脚注2) もちろんps auxwwは大量の情報を表示するので見るのが大変です。 この情報を取捨選択して必要な部分だけを取り出すために、 grepやsedやperlを駆使して、ぱぱっと出来るのがプロ(お金もらえる)あるね <br> (脚注3) auxww のオプションの意味を調べるのは各自の宿題としましょう </small></small> </div> <small> ``` admin(54.205.249.209):~ $ ps PID TTY TIME CMD 486 pts/1 00:00:00 bash 1010 pts/1 00:00:00 ps ``` - ps だけでは、自分のプロセスだけを表示して終わり - 管理者が年中つかうのは「全プロセスの詳細な情報を表示せよ」という`ps -auxww` </small> --- class: compact # <small>パート3: Unixシステムの階層構造を調べる</small> <div class=footnote> <small><small> </small></small> </div> --- class: compact # <small>pstree コマンド ... プロセスの階層(親子関係)を一覧表示する</small> <div class=footnote> <small><small> (脚注) まぁ面白いだけで、管理上つかうことは、まず無いですけどね:-) </small></small> </div> <small> ``` admin(54.205.249.209):~ $ pstree systemd─┬─2*[agetty] ├─cttyd.sh───ttyd ├─dbus-daemon ├─polkitd───2*[{polkitd}] ├─sshd───sshd───sshd───bash───script───bash───pstree ├─sudo───bash─┬─bash │ └─inotifywait ├─systemd───(sd-pam) ├─systemd-journal ├─systemd-logind ├─systemd-network ├─systemd-resolve ├─systemd-timesyn───{systemd-timesyn} ├─systemd-udevd └─unattended-upgr ``` </small> --- class: compact # <small>[作業] tree コマンドをインストールする</small> <div class=footnote> <small><small> </small></small> </div> <small> ``` admin(54.205.249.209):~ $ sudo apt install tree -y Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: tree 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 52.5 kB of archives. After this operation, 116 kB of additional disk space will be used. Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [38 B] ... 省略 ... Unpacking tree (2.1.0-1) ... Setting up tree (2.1.0-1) ... Processing triggers for man-db (2.11.2-2) ... ``` </small> --- class: compact # <small>tree コマンド ... ファイルとディレクトリを樹木状に表示する</small> <div class=footnote> <small><small> (脚注) Windowsのフォルダの左メニューをUnix ターミナル上で真似る感じ? </small></small> </div> <small> ``` admin(54.205.249.209):~ $ tree . ├── htdocs │ └── index.html └── www.py 2 directories, 2 files admin(54.205.249.209):~ $ tree /home /home └── admin ├── htdocs │ └── index.html └── www.py 3 directories, 2 files ``` </small> --- class: compact # <small>パート4: ファイルシステムの操作(序)</small> <div class=footnote> <small><small> 少しだけ </small></small> </div> --- class: compact # <small>pwd コマンド ... 今どこにいるのか?</small> <div class=footnote> <small><small> (脚注) pwd は Print Working Directory の頭文字で、すなおな略称です </small></small> </div> <small> ``` admin(54.205.249.209):~ $ pwd /home/admin ``` - つねに<B>自分が、いま、どこで作業しているのか?</B>を確認することは非常に重要です - 5W1Hの話を思い出してください </small> --- class: compact # <small>mkdir コマンド ... ディレクトリを作成する</small> <div class=footnote> <small><small> (脚注) mkdir は make directory の頭文字なので、やっぱり素直な略称。 make-directory の方が良い?長いから嫌です(w) </small></small> </div> <small> ``` admin(54.205.249.209):~ $ mkdir z admin(54.205.249.209):~ $ tree /home /home └── admin ├── htdocs │ └── index.html ├── www.py └── z 4 directories, 2 files ``` - z ディレクトリを作成し、その結果をtreeで確認してみましょう </small> --- class: compact # <small>[課題] 最終課題の希望調査</small> <div class=footnote> <small><small> </small></small> </div> <small> - 今年は、定食&カフェテリア方式にしようかと思うんよ。まだ案ですけど、 - 定食から選ぶ、定食メニュー(次ページ参照)をこちらで用意します。一つを選択 - カフェテリア方式 - ようするに自由課題 - (部品を好きに組み立てる、持ちこみもあり ) - Google Formで希望調査をしています - 本日の課題ね - 自由課題は妄想でもいいので、こういうのやろうかな〜作ってみたいな〜でOKです - form は[こちら](https://docs.google.com/forms/d/15ZvRZPHPt8PiwYo2TQF2kConBpSF9WdMVcHenP21r9Q/viewform) </small> --- class: compact # <small>定食メニュー(案)</small> <div class=footnote> <small><small> (脚注1) まだ案なので、プラン内容は変わる可能性があります。 成績は、その他の口頭試問、期末試験、普段の取り組みなどの合計なので、 それ次第 <br> (脚注2) ACF = AWS Cloud Foundation、AWSの一番やさしい資格試験。 でも授業よりはるかに難しいの:-) </small></small> </div> <small> - A定食: 最低限のショッピングカート(Sになることは無い,基本B?) - EC2が1台死んでもショッピングカートの中身が消えない - 必要な部品は全て授業で扱うので、組み合わせられるか?だけ - 答えを全て教えているので、ほめません(あたりまえ) - B定食: A定食 + ELB (やや難?) - ドキュメントはあります、それ読んでガンバレ - C定食: A定食 + RDS (やや難?) - きちんとカートの情報を(キャッシュだけでなく)SQLサーバにも保存してください - ドキュメントはAWS ACFにあります、それ読んでガンバレ - D定食: EC2 x2 + EFS (やや難?) - キャッシュではなくファイルシステムを利用する。 通常、カートの保存目的で、この形態を使うことはないですが、 自分でドキュメントを読んで作れるなら大変よい - ドキュメントはAWS ACFにあります、それ読んでガンバレ </small> --- class: compact # <small>カフェテリア方式(自由課題)</small> <div class=footnote> <small><small> </small></small> </div> <small> - ようするに特にテーマはありません、予算の範囲内で好きに作ってください - XXXのテクニックを使うにはどうすればいいの?などはコンサルは受け付けます <br> いろいろな部品が使えて楽しいよね。たとえば - (もうすこしちゃんとした商品写真とかもあるサイトにするとして) - S3 (を商品写真のサーバとして使うという話の方な) - Cloudfront (おなじくCDNで商品写真) - Cloudformationで自動化(Infrasturacture as Code) - docker上にディプロイ (AWSのサービスは使わない、EC2のうえに独自システムを一式構築) - dockerは、去年のテキストを参照?まぁ検索すればdockerの使い方は山ほど見つかるよね - k8s上にディプロイ (AWSのサービスは使わない、EC2のうえに独自システムを一式構築) </small>