Skip to content

Instantly share code, notes, and snippets.

@AnaTofuZ
Last active October 1, 2018 23:44
Show Gist options
  • Save AnaTofuZ/f744b9c89e3d98c0dd0b583151e43402 to your computer and use it in GitHub Desktop.
Save AnaTofuZ/f744b9c89e3d98c0dd0b583151e43402 to your computer and use it in GitHub Desktop.
OS勉強会のまとめ

概要

OSの授業の予習会でやった内容を載せていきます。主に昨年の授業内容を参照しているので今年度の内容とは内容が異なる可能性があります。
OSの授業ページ

INDEX

Day1(9/21)

やったこと

  • 環境構築
  • 問題1.2〜1.4のAnsibleのpingまで

Phase0. 環境構築編

OSの授業で必要なインストールのページに沿ってやっていきます。

0-1. 最新のOSを使う

本当はHigh Sierraにアップデートしたほうがいいんだろうけど面倒くさいので僕はSierraのままです。ひょっとしたら授業でHigh Sierraじゃないとダメみたいな指示があるかも?余裕があればアップデートしておこう。

AnaTofuZから

dog foodは食べたほうが良いのでMojaveにしてみよう

0-2. 辞書

おそらく大体が既に設定されているので設定不要

AnaTofuZから

Alfredとか使えるとAlfredから辞書引けていいですよ

0-3. Google Search

僕はこの設定はいじってません。必要があればGoogleの検索画面から
設定→検索設定→言語→Google サービスで使用する言語→English
を選択すると英語が優先されます。

0-4. home brew

ターミナルで
brew install mercurial
を入力。Ansibleに関しては問題1.4でもpipでAnsibleを入れさせる項があるので両方入れたほうが良さげ。
brew install ansible

AnaTofuZから

pipではいれない

0-5. Java

ターミナルで
java --version
を実行し, java 10.0.2 と出たら最新。(9/21/2018現在)
そうでないなら
brew cask install java
を実行。

!勉強会で発生した事例!
Cask 'java' is unreadable: undefined method 'undent' for 〜のようなエラーメッセージが出てbrew cask uninstall javabrew cask reinstall javaが実行できない。
/usr/local/Caskroom/java/.metadata/**/Casks/java.rbを開き, <<-EOF.undentとなっている部分を<<-EOFに変更し, brew cask uninstall java && brew cask install javaを実行すると無事最新版にアップデートできた。

AnaTofuZから

JavaのSDKをbrea caskでいれるとこういう問題が発生するのとJavaPathFinderの課題で 過去のSDKをinstallする必要があるので brew cask でinstallするのはあまりオススメではないです

0-6. IntelliJ

講義ページでInteliJとなっているのはスペルミスなので注意。
JetBrainsの公式サイトでアカウントを取得した後に学生ページにアクセス, APPLY NOWを押し, 各フォームに情報を入力した後にメールが届くのでその指示に従い認証を行うとJetBrainsの製品版アプリケーションを利用できる。
IntelliJのUltimate版をダウンロードする際は公式サイトダウンロードしてもよいが,
brew cask install intellij-idea
からインストールを行うのが管理がしやすいためおすすめ。

AnaTofuZから

Ultimate使おうぜ(使えるんだし)

0-7. Virtual Box

brew cask install virtualbox
を実行する。
講義ページにあるParallelsとVMware FusionはどちらもVirtual Boxと同じ仮想マシンソフトウェア。

AnaTofuZから

VirtualBoxわりと更新多いのでbrew caskから入れないほうが良いかも(人によるか) ちなみにVirtualBoxは必ず最新版を使うこと

0-8. Fedora OS

Fedoraの公式サイトにアクセスし, 真ん中のFedora Serverをダウンロード。学科のサーバー上にも同じファイルがあるのでそっちのほうが早いかも?
学科サーバーからダウンロードする場合は
scp yomitan.ie.u-ryukyu.ac.jp:/net/open/Fedora/Fedora-Server-dvd-x86_64-28-1.1.iso ~/Downloads/
を実行。

AnaTofuZから

でかいファイルは rsync -avzPあたり使うのがオススメ

0-9. JavaPathFinder

やり忘れたのでまた後日。

Phase1. Operating System Lecture No.1

問題1.1

問題1.2

zsh

学科の学内向けページからシステム利用→外部サイト→Akatsukiを選択し, サインインした後に右上のLDAP情報変更をクリック, Shellの項を/bin/bashから/bin/zshに変更し, 変更するボタンを押すと完了。
ssh yomitan@ie.u-ryukyu.ac.jpでログイン, echo $SHELLを入力し, /bin/zshと返ってきたら成功。

pushdcdと同様ディレクトリ間を移動するコマンド。cdと違い, pushdを実行することでカレントディレクトリがスタックに追加され, 引数に与えたディレクトリに移動する。引数を与えない場合直前にいたディレクトリに移動する。

popdpushdでスタックに追加したパスを削除するコマンド。引数を与えずpopdのみをじっこうするとカレントディレクトリをスタックから削除し, 直前のディレクトリに移動する。
dirsコマンドでスタックの状況を確認できる。
問題文にある login した directory を覚えておくように zshrc に設定を付け加えて、正しく実行されることを確認せよ。 は恐らくsetopt auto_pushdのことだと思われる。これを .zshrc に追記することによってcdする度に自動でスタックにカレントディレクトリを追加することができる。

AnaTofuZから

実はこの課題は後半にも出てきますが「ログインしたディレクトリを覚えておく」というのは 例えば /etc/ にアクセスしてexitし,再びシェルを開くと /etc/ にcdした状態で始まるみたいな内容だと良さそうです

やり方は色々あって setopt_auto_pushd をいい感じに使うのでもいいし,zshのhook機能を使うとか(add-zsh-hook chpwd chpwd_recent_dirs ...他にも色々便利なのがあるのでググって見よう) あとは一時的にファイルに書き出すとかでも良いよね.

実はOSの3章のページをよく見るとkono先生のzshの設定例があってそこに答えの一例が

ssh の設定

ssh-keygenを実行することで~/.ssh/id_rsa~/.ssh/id_rsa.pubが自動生成される。その際に-fオプションを使うと鍵を書き込むファイル名を指定できる。

あとは資料通りに
ssh yomitan.ie.u-ryukyu.ac.jp "mkdir ~/.ssh; chmod 700 ~/.ssh "

cat ~/.ssh/id_rsa.pub | ssh yomitan.ie.u-ryukyu.ac.jp "cat >> ~/.ssh/authorized_keys"
をローカルで実行し, yomitan.ie.u-ryukyu.ac.jp 上に~/.ssh/authorized_keysが正しく設定されていることを確認したら
ssh-add ~/.ssh/id_rsaを実行,
ssh yomitan.ie.u-ryukyu.ac.jp "date ; ls -ld ~"を実行し, パスワードが要求されることなく結果が出力されたら成功。

AnaTofuZから

ssh-keygenで作る時はちゃんといい感じに作って(語彙力) 参考

問題1.3

問題1.4

Fedora 26 の install

9/22/2018現在Fedora 28が最新なのでそれをインストールする。問題にある通りインストール時間を計測しなければならないため授業開始後にもう一度インストールすることになりそう。

インストールの方法は, まず(ここではVirtual Boxを用いての方法を説明する)VirtualBox.appを起動する。
次に左上の新規を押し, 適当な名前(Fedora等)を入力, タイプを_Linux_ , バージョンを_Fedora_(32bitと64bitどちらでも可)にする。メモリーサイズを1000MB程度に設定し, 仮想ハードディスクを作成するを選択, 次にVDI(VirtualBox Disk Image)を選択し, サイズを固定サイズに設定, 適当な場所にディレクトリを設定しサイズを1000MB程度に設定し作成。その後作成したマシンを起動し, 環境構築編でダウンロードしたFedoraを指定, 設定が完了するとInstall Fedora 28を選択する。

しばらくすると自動でインストーラーが立ち上がるので言語を日本語(またはEnglish)に選択しインストール先を選択, インストールの開始を選択し, それが終了するとユーザーを作成した後ディスクを再起動すると完了。
この時先程指定したFedoraをセットしたままだと再度インストーラーが起動してしまうので, VirtualBoxのOSの設定画面を開き, ストレージタブのコントローラー: IDEに設定されているディスクをクリック, 右側の属性の項にあるディスクのマークをクリックし, 仮想ドライブからディスクを除去を選択, OKを選択する。

AnaTofuZから

サイズは固定サイズじゃなくても良いですね.可変でも良いとは思います.

user作るのを忘れないこととadministratorにちゃんと入れておいておくと良い(チェックしないとsudoが使えない状態で作成される) あとキーボードの設定をちゃんとしておくのをおすすめする

ssh

先程のVirtualBox.appの設定を開き, ネットワーク→高度→ポートフォワーディングを選択, ホストポートを4022, ゲストポートを22に設定しOKを押し設定を閉じる。Fedoraを起動した状態でssh localhost -p 4022 -l rootを実行しFedoraにログインできたら成功。

tips
Fedoraの操作をターミナルで行うときに, VMで表示しているFedoraのウィンドウが邪魔だと思う場合は, 起動するときにVMの起動ボタンのそばにあるボタンを押してヘッドレス起動を選択すると, VMのウィンドウを開かずにOSを起動することができる。

AnaTofuZ

なんでゲストポート22とホストポートを対応させる必要があったのかは抑えておくと良いです. ホストは4022でなくても構いません.

ちなみにVirtualboxのVMへはヘッドレス起動の上にsshログインしてTerminal.appから操作するほうが楽

Fedora 側に password 入力抜きでsshできるようにする

先程ssh-keygenは終わっているのでやらなくてよい。次にローカルで
ssh localhost -p 4022 -l root "mkdir ~/.ssh; chmod 700 ~/.ssh "

cat ~/.ssh/id_rsa.pub | ssh localhost -p 4022 -l root "cat >> ~/.ssh/authorized_keys"
を実行し, ssh localhost -p 4022 -l root ls -al
を実行しパスワードが要求されることなく出力がされたら成功。

tips
ユーザーをrootではなく自分で設定したユーザーにした場合, 上記の設定を行ってもパスワードが聞かれるという状態になったが, authorized_keysのパーミッションを600にすると解決したので, うまくいかない場合は確認してみよう。

AnaTofuZ

rootに鍵通すのはあまり良くない(人によって意見は分かれると思うが) sudoersに設定されている一般userに通して,無効では su -とか sudo suで成り上がると良いと思われる.

ちなみに authorized_keys は600にしないといけなくて,このファイルは追記ok(いくつかの公開鍵を書いても良い)

あとチートだが ssh-copy-id とかいう便利ツールもある.探してみよう

Ansibleのinstall

sudo easy_install pip
sudo pip install ansible

を実行。

AnaTofuZから

実行しちゃ駄目 君たちpyenvでpython入れてるはずだから pip は既に入っていると思うし ansibleはpythonからいれるよりbrew経由でいれた方が良いよね

Fedora 側に python をinstallする

Fedora側でdnf install pythonを実行。(恐らく講義ページでpythongとなっているのは間違い)

AnaTofuZから

正確には sudo dnf install pythonですね.Pythonは入ってたら入れなくても良い(そういえば入ってなかった気がする)

Ansibleのping

任意のディレクトリでecho vm ansible_user=root ansible_port=4022 ansible_host=localhost > hostsを実行し,
ansible vm -i hosts -m pingを実行して vm | SUCCESS => {...のような出力が返ってくれば成功。

!講義ページでecho vm ansible_user=root ansible_port=3022 ansible_host=localhost > hostsとなっているのは間違いなので注意!

Day2(9/22)

やったこと

  • 問題1.4のAnsibleのPlaybook

進捗ないです!!!!

Day3(9/23)

やったこと

  • 問題1.4のAnsibleのPlaybook

AnsibleのPlaybook

過去のリポジトリを使っても問題ないとのことなので講義ページに載っているAnsibleによるセットアップのリポジトリをcloneします。任意のディレクトリで
hg clone ssh://yomitan.ie.u-ryukyu.ac.jp//home/hg/y17/k178572/ansible
を実行するとカレントディレクトリにansibleというディレクトリがコピーされているのでそこに移動します。
main.ymlの中のuserの部分をroot(もしくは自分で設定したFedoraのユーザー名)に変更し, ローカルの~/.ssh/configに下記のよう見書き込む。(なければ作成する)

Host test-fedora
  HostName localhost
  Port 4022
  User <rootもしくは自分で設定したユーザー名>
  IdentityFile ~/id_rsa

ssh test-fedoraでログインできることを確認した後に, 先程のansibleディレクトリで
ansible-playbook -i hosts main.yml --ask-become-pass
を実行する。するとパスワードが聞かれるのでVMで設定したパスワードを入力する。

!僕が遭遇したエラー!
<ユーザー名> は sudoers ファイル内にありません。この事象は記録・報告されます。といったエラーが出た場合。
→Fedora上で以下の手順を実行。

$ su

$ visudo
### visudoの中身
(略)
Allows people in group wheel to run all commands
%wheel  ALL=(ALL)  ALL (ここの行頭のコメントをはずす, コメントアウトされていなければそのまま)

$ usermod -G wheel <ユーザー名>

$ su <ユーザー名>

参考
一般ユーザでsudoが実行できない場合

AnaTofuZ

過去のリポジトリというかansibleのはこの優しさを感じながらやってみてね おそらくvisudoの必要はないはず.usermodだけで良い

VirtualBoxの設定を開き, ネットワーク→高度→ポートフォワーディングと進み, 右上の+マークをクリックした後, 追加されたルールのホストポートを8080, ゲストポートを80に設定してOKを押して設定を閉じる。
ブラウザでlocalhost:8080にアクセスするとWordPressのinstallページが表示されるので, [サイトのタイトル], [ユーザー名]等を入力する。
その後wordpressのインストールを行えば完了。

tips
localhost:8080にアクセスしてもFedora test pageのようなページが表示されwordpressのinstallページが表示されない場合は, 先程の ansible-playbook -i hosts main.yml --ask-become-passをもう一度やってみると解決するかも。

Day4(9/26)

やったこと

  • 問題2.1のJDKとIntelliJのインストール

Phase2. Operating System Lecture No.2

問題2.1 Java Project

JDK と IntelliJ の install

今回は割と講義ページに説明が詳しく載っているためそこまで説明はいらないかと思いますがとりあえず書きます。

JDKのinstallは冒頭の環境構築でbrewでjavaをinstallを行った人は不要かと思われます。

Document 〜 Mercurial を commit する

資料通りに。

gradle bundle に manifest を付け加える

講義資料では gradle.bundle に付け加えると書いてありますが, 実際は buile.gradle というファイルなのでそれに書き込みます。

実行した jar を動かす

tips

エラー: メイン・クラス  〜〜〜 を検出およびロードできませんでした
原因: java.lang.ClassNotFoundException: 〜〜〜

のようなエラーが出る場合はファイル名や, build.gradle で指定したパスが間違っている可能性が高いのでそれを確認してみましょう。

AnaTofuZから

konoのままメールで提出したらF

commit した repository を学科のサーバに upload する , upload したプロジェクトから import しなおす

(略)

gradle の設定

Gradle Wrapper とは, gradlewというスクリプトを生成するコマンドで, このスクリプトを生成しておくと Gradle を導入していない環境でも gradle コマンドと同様のビルドを行うことができます。

gradle wrapperを実行すると, projectに次のようなファイル群が生成される。

├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat

Gradleのバージョンが古い場合は, ./gradlew wrapper --gradle-version=4.10のようにアップグレードしたいバージョンを指定すると, gradle-wrapper.propertiesが書き換えられ, アップグレードできる。

ちなみに存在しないバージョンも指定できるらしい。(その場合はgradlewが使えなくなるため手動でgradle-wrapper.propertiesを書き換え直さないといけない)

参考
Gradle Wrapper スクリプト (gradlew)を作成する
Gradleプロジェクトをアップグレードする

AnaTofuZから

このあたりはIntellijが自動でやってくれるのであまり手を加えないほうが良い ちなみにmercurialリポジトリに含めていいのは build.gradle と書いたソースだけ .idea/ とかいれない

そういえばJDKがどこにinstallされたかは探したかな?

Day5(9/27)

進捗ないです!!!!!

履修登録をした

Day6(9/28)

UnitTestを通すところまでは行きましたが細かいところがまだ途中なので後ほど。。。。

AnaTofuZから

全体的に進んでていいですね.slackのOSチャンネルにはいると幸せになれそう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment