otnk1122’s blog

おたなかさんのメモ的な何かです

今一番業務で役にたってる大学時代に取り組んだ課題、そこで得てほしい知識

琉大 Advent Calendar 2019 の 2日目の記事です。
琉球大学情報工学科、理工学研究科を卒業生の田中です。
在学時代はシステム管理チームのお手伝いしてました。

本投稿の対象者

琉球大学工学科知能情報コース所属しているみなさん。
内容は2年後期の講義の内容となっていますが、1年次でもわかりやすいようにできるだけ噛み砕いた書き方をしていきたいと思います。

本記事の流れ

現在、筆者は東京の会社でインフラ寄りのIT企業でSES・たまにSIみたいなことしてます。
そこで今一番業務で役に立っている大学時代に取り組んだ課題を試しながら振り返り、お話していこうと思います。
※課題の解を書くのが目的のブログではないです。

技術ブログ?書くの初めて拙いところもあると思いますが、よろしくお願いします。

テーマ

業務で役に立っている知識ってなんだ?ってことで私の業務をちょっと説明します。
去年6月に現在所属している課に配属され、とある顧客のLinuxサーバ群の運用保守を業務として行っています。
そこで私は日々の運用に加え、本運用チームの作業効率化を実施してきました。

というわけで、オペレーティングシステムという授業で実施した
課題1.4についてお話していきます。

課題内容

今見ると課題を継ぎ接ぎで更新してるから古い内容とごっちゃになっていますが、まあ以下のようなことを求めている課題だと思います。

  1. VirtualBox上に最新版fedoraをminimal installし,かかった時間を測定せよ。
  2. zsh,clangは導入しろ。
  3. 仮想マシンのイメージのサイズを教えろ。
    4. 手作業でWordPressを構築しろ
  4. 手作業で実施した前作業をAnsibleを用いて自動で構築しろ

優しいTAの先輩が課題の手順を書いてくれているので、課題の提出だけなら楽にクリアできると思いますが、 学べることの多い課題だと思いますので、頑張っていきましょう。

課題環境

私は社会人になってMacを離れてしまったのでWindows環境でやります。
Host OS: Windows 10 Pro

仮想化ソフト: Virtual Box 6.0

Guest OS:

  • Fedora31
  • CentOS7.7 (VirtualBox上にAnsible使えるホストが立ってたので楽しちゃいました。)

ここで小話

私はさらっと課題環境について書きました。理解した上で進んでますか?

  • Host OSってなに?
  • 仮想化ってなに?
  • Guest OSってなに?

って解決した上で進んでいますか???
本課題を取り組む上でこのようなその辺に転がるはてなをこういう風に適当に拾いながらこのブログは書き進めていきます。(めちゃくちゃ長くなりそう。。。)

簡単に説明するとこんな感じです。

  • 大きなパソコンの中に小さなパソコンを作るのが仮想化
  • 大きなパソコンにインストールされてるOSがHost OS
  • 小さなパソコンにインストールされてるOSがGuest OS
  • たくさんPC並べなくても、1台のPCの中にたくさん詰めることで、余ってるリソースや場所を有効活用することができる技術!

たぶん講義内容11番目でもっと詳しく勉強できると思います。

この技術がどこで使われているのか、読者のみなさんの身近な例を紹介するとすれば、 学科のサービス大体がこの技術上で動いてます。

  • 学科公式ホームページが稼働しているサーバ
  • みなさんのアカウントを管理しているサーバ
  • 本ネットワークでIPアドレスドメインの解決をしているサーバ
  • パソコンに有線LAN指したらIPアドレスを自動で割り当ててくれるサーバ
  • 授業の録画、エンコード、配信サーバ
  • etc.

こいつらは全部このページに載ってる物理サーバの上2台で稼働してます。
他にも先生や学生が研究に使ってるサーバとかもたくさん動いてますよ。

課題開始

それでは基本的に課題の説明のテキストにそって、やっていきます。
※少し環境差異あるので注意です。

Fedora31 をダウンロード

2019年10月末に公開された最新版ですね。
公式ページから落としてきてください。
Fedora 31: Standard ISO image for x86_64
誰かがすでに落としたものを学科のサーバとかに置くとみんな早く落とせて便利ですよ^^

VirtualBox上にFedora31をInstall

  1. 新規でVMを作成
  2. VMの名前は適当にどうぞ。
  3. メモリはたぶん1gbだとインストール中dracutのプロセスが死ぬ。適切なのを適当にどうぞ。
  4. ハードディスクは後の課題でqcow2に変換するのでvdi
  5. 可変サイズの20GBもあれば足りるはず
  6. Test this media $ install Fedora 31
  7. English>US
  8. Installation Destination (開いて完了でいいんじゃないですか)
  9. root password設定
    (option見るとrootでSSHログインの許可とかある。デフォだめになったんだ。。。へー)
  10. user設定
    (check)Make this user administrator
    (check)Require a password use this account
  11. Begin Installation

installの時間を計測するのはstart instration押して、rebootが表示されるまで。やってみよう。
install 終わったら一旦電源落として、設定のストレージからiso抜こう。

OSインストールしている間に課題内容について小話

私的に本課題のinstallの時間については手順書が丁寧でちょっともったいない感じになってます。 仮想化しているマシンはホストのマシンのリソースのスペックの影響を受ける。 そのため同じOSをインストールしていても、

  • 記憶領域の読み込み・書き込み
  • 記憶領域との接続方式

で速度全然違う結果が得られるってところに意味があるのかなと思う。 みんなが先輩と同じ手順踏んで、同じMacでinstallしても何も楽しくないんだな、これは。

私のPCはM.2 SSDSSD、HDDが入ってるので、OSの読み込みisoの場所、書き込みディスクの場所によってたぶん変化が出る。

やってみた

左からM.2 SSDSSD、HDDの順で並んでます。

  1. M.2SSD 読込速度:3,500MB/s 書込速度:3,200MB/s NVMe接続
  2. SSD 読込速度:545 MB/s 書込速度:525 MB/s SATA3.0接続
  3. HDD 7200 rpm (大体:100 MB/sくらい) SATA3.0接続

メモリ、CPUでボトルネックが出てほしくないので、3台とも8コア・32GB振ってます。
順番としては2>1>3となってますが、2と1は誤差かな? ディスクの使用率は3のHDDが高く、1と2のM.2 SSDSSDは全然使い切れていません。 ここからHDDは頑張った結果5分overで、M.2 SSDSSDvirtualboxのデータの転送速度で本気を出せず3分30秒くらいなのかなって考えられます。たぶん。

これと似たようなことをやりたい場合は、ネットワーク越しにマウントしたDISKやUSB接続したDISKで実験してみるといいかも。 仮想化とは少し離れるけど、CPU・メモリの量でもどれほど時間に差異が出るか見るのも楽しいと思います。

インストール時に選択したオプションの小話(とりあえず2つ)

8 Installation Destination (開いて完了でいいんじゃないですか)
ディスクが一つしか無いし、おそらくこの授業のこの課題が初めてのOSインストールだと思うのでさらっと流したのですが、 ハードディスクの仕切り分けをして、容量を決めていろんなことに使おうって設定部分ですね。
デフォルトだとこんな感じ。

Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1  *       2048  2099199  2097152   1G 83 Linux
/dev/sda2       2099200 41943039 39843840  19G 8e Linux LVM

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 974M     0  974M   0% /dev
tmpfs                    994M     0  994M   0% /dev/shm
tmpfs                    994M  932K  993M   1% /run
/dev/mapper/fedora-root   15G  1.8G   14G  12% /
tmpfs                    994M  4.0K  994M   1% /tmp
/dev/sda1               1014M  182M  833M  18% /boot
tmpfs                    199M     0  199M   0% /run/user/1000

なんでこんなパーティション切って、このようなディレクトリへの割り当て方をしているか余裕があれば考えてみましょう。 この辺この辺読むとなんとなくわかるかも。

10 user設定 の (check)Make this user administrator
選択肢に書いてある文章通りのことしてますね。管理者権限付きでUserを作ってます。 sudo 権限付与するための設定1年の時にたぶん習うんですけど覚えていますか。 そう /etc/suders に以下の様に記載すると習ったと思います。

user_name    ALL=(ALL)       ALL

ではsudo less /etc/sudoersで探してみましょう。はい、無いですね。 じゃあどうやって権限付与してるのでしょう。sudoersの中身をもう少し読んでみましょう。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

読めますか?「wheelってグループなら全てのコマンドが実行できちまうんだ」って書いてありますね。これです。自分のグループを確認してみましょう。

[otnk1122@localhost ~]$ id
uid=1000(otnk1122) gid=1000(otnk1122) groups=1000(otnk1122),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

ではなぜwheelグループでsudersを管理しているのでしょう。
例えばとある組織でサーバ群の運用チームをやっているとします。
運用チームのメンバー全員をuser_name ALL=(ALL) ALLで追加したらファイルが大きくなり管理が大変じゃないですか?

user_name    ALL=(ALL)       ALL

また、運用メンバーから退職者が出た際に都度visudoで全てのサーバ群の/etc/sudoers を編集して回りますか?
そういうめんどくさいことをしないためにきちんとグループで管理しましょう。
できればLDAPなどで一元管理しましょう(切実)

Ansibleを実行するための設定

  1. VirtualBoxVM設定からネットワークでネットワークアダプタの設定>高度>ポートフォワーディングでSSHの設定をすると良いです。
    ※後々の課題のことを考えるとHTTPのポートも開放してると楽かも。
    ※私はめんどくさいのでそもそものネットワーク設定がNATじゃなくて、ブリッジアダプターです。こいつらの挙動が理解できれば、学内環境でも楽にBridge設定できるはず。
    ※ここで後回ししてもどうせNo11のKVM課題でBridge触るぞ。今のうち学んどけ。
  2. Ansible実行するPCでAnsible導入して(自分の環境にあったやりかたで。)
  3. Ansible実行するPC → FedoraSSHの鍵認証ログインできる設定して

Ansible実行するための設定なのに導入方法教えてくれないの?ってなるかもしれませんが、
package管理方法は人それぞれなので、好きな方法でAnsibleを入れてください。
言われるがまま入れてたらMacの設定brew,macports,epkgありまぁす!!ってなるぞ

AnsibleのPlaybook書く上で必要なこと

  • 何をしたいのか、それを達成するために手動だと何をするのかを知る

これにつきる。今回の場合WordPressの構築。
何をしたいのかを知らずに自動化なんてできないので。
Ansibleの書き方なんて後回しですよ。

WordPressを手動で構築するには何が必要なのか。

ざっとこんな感じ

こうして見るとWordPressの構築だけでも

といった身につけてほしいこと結構はいってる。 この辺意識しながら一回手動で構築してみてほしい。

手動手順をAnsibleに落とし込むには

手動でやったことをAnsibleの記法で書く、以上!

課題の手順のRepositoryにほぼ答えあるのに何を書けばいいんだろう。。。
私が初めてAnsible書いたときはどっといんすとーるでどんな感じのツールか勉強して、ドキュメントを読んだ気がする。 今もAnsibleのplaybook書くときは公式ドキュメント見てます。日本語でぐぐってもQiitaで出てくる記事がやりたいことに一致してなかったり、わからないので教えて下さいで終わってるの好きじゃないので。

  • 公式ドキュメントのGet Startedを読めばざっと記法、実行方法がわかる
  • Playbooksを読めば、ループや外部ファイルでの変数宣言などの便利な使い方がわかる。
  • Module Indexを読めば、各種処理で使うモジュールの記法やオプションがわかる。

よく見るのはこの辺でしょうか。がんばって読んでみてください。

最後に

優しいTAの先輩が課題の手順とありますが、その手順書の参考になっているのは
y12 > e125721 > ansible みたいなんですよね。
優しいTAの先輩の参考になる資料を書いた更に優しい先輩がいるらしいです。
authorを見るとTANAKA Hiromi 。私ですね。
もともと別作業で書いたplaybookだったのですが、 授業で使うから説明ちょっと書いてよってことになって今に至るって感じですね。
※なのでドキュメントルートの変更など本課題に関係ないことも実行してたりします
※最近の学生のリポジトリ見るとそのままで、.hgrc消してinitial commitして終わりか?って。。。

手順と成果物だけ書くとこうなっちゃうんだよなあ。。。
この状態はあまり良くないなあと思い、今回は本課題の試行錯誤したら学べること、 理解してほしいこと、取り組んでほしい方法について少し文章を書かせていただきました。 いかがだったでしょうか。
少しでもインフラ周りの知識に興味を持ってくれる学生が増えたら幸いです。
ぜひこれから取り組む学生・時間が足りずにコピペで出してしまった学生には頑張って欲しいです。
※できれば誰かあの課題の新しい参考資料書いて

これを機ににインフラ周りの勉強に興味が湧いた人はieのslackにある #nagatani-enn に「シス管興味あるんですけど」ってコメントしにいってみてください。 やさしいメイド服来た先輩が手取り足取りいろいろ教えてくれると思います。 (無茶振り)

今システム管理チームに入ると、おそらく来年の夏休みにあるn000万の機材を作った学科システム作り直し作業があり、参加できます。 実構築やベンダやり取り、運用といった良い経験ができるのでぜひぜひ参加ください!
※この規模のシステムで学生が管理していて、止めてしまっても先生が代わりに謝ってくれて許される場所なんて他の大学にはないですよ!!

大学でインフラに興味を持ち、この先仕事として大きな基盤の管理・SIとしていろんな顧客にあったシステムの提案などやってみたかったらぜひ声かけてください。 お話しましょう。会社としていろんなことしてるので、やりたい分野と私の分野が違った場合はその分野の人とお話できるようにも頑張らさせていただきます。

長い文章になって最後の方だれてしまいましたが、ここまで目を通していただきありがとうございました。 次書く機会があれば、会社で導入した業務効率化・導入にあたって考慮したことみたいな記事がかけたらいいなと思っています。

以上、卒業生の田中でした。