Anagura's.....

たまに書く

container迎撃戦(途中)

作業メモですね.まだ終わってないというか詳細の考察が出来てないです…

作業の目的は dockerが作ったcontainerにhostから入り込めたいので,場所を特定する です.

とりあえずcontainerを作ってrunさせてみる. containnerの中にattachしておもむろにファイルシステムを調べるためにdfコマンドを使うと

$df .
Filesystem                                                                                           1K-blocks   Used Available Use% Mounted on
/dev/mapper/docker-253:4-4886298774-a92010df79ba7ec88ff7cf9805c59a0547f642c06599a5dfbc43b9e10952940b 103080888 641328  97180296   1% /

と/dev/mapperにmappingされてるファイルシステムを使っているらしい. 253:4-488とかは多分作られたcontainerに一意に振られたものなんだろうと予想.

containner内部でlsblkすると

[@a92010df79ba]/% lsblk                                            

**略 **

`-sdd1   8:49   0     2T  0 part 
sr0     11:0    1  1024M  0 rom  
loop0    7:0    0   100G  0 loop 
loop1    7:1    0     2G  0 loop 

おぅふ.中からはよくわからないが,dockerを走らせた状態で一旦抜けてホスト側から見ると

sr0                                   11:0    1  1024M  0 rom  
loop0                                  7:0    0   100G  0 loop 
└─docker-253:4-4886298774-pool       253:5    0   100G  0 dm   
  └─docker-253:4-4886298774-a92010df79ba7ec88ff7cf9805c59a0547f642c06599a5dfbc43b9e10952940b
                                     253:6    0   100G  0 dm   
loop1                                  7:1    0     2G  0 loop 
└─docker-253:4-4886298774-pool       253:5    0   100G  0 dm   
  └─docker-253:4-4886298774-a92010df79ba7ec88ff7cf9805c59a0547f642c06599a5dfbc43b9e10952940b
                                     253:6    0   100G  0 dm   

ふむ.loop0とloop1という名前で接続されてるのがこのcontainerの中身か. ならその中を見たいのだけど.

container側からdf取った時に見れたディレクトリに移動してみると

[e155730@dalmore]/dev/mapper% ls -la
 docker-253:4-4886298774-> ../dm-6

的なものが.ふ〜む.結局これはdm-6にリンク張られてるだけか. しかしdm-6というもの,物理的なファイルシステムを論理ファイルシステムとして見れるようにしたもの (昨日までの理解なので間違っている可能性大) なのでlessやcdは当然出来ない.

他のdockeerが絡んでそうな/var/libe/docker/ は管理者権限ないので覗けないし… これ以上追えない疑惑が…

実際dockerがホストのどこに配置したのかは自分のVMで作って見てみるのが早そうかなぁ. ただ学科のcontainerで計測したデータを転送したいのだけど,ホスト->containerは可能でも container->ホストはディレクトリが判明しないとわからないのでデータの送信という面でもどうするか….

う〜ん…このへんは聞かないとどうにもならなさそう…

さらにjavaシステムコールの処理時間はプロセス分けただけなら時間同じじゃね?と思ったら,containerの方が2倍ほど遅いという結果に…う〜ん…わからん…

mercurialのmerge関連

一応まとめておいたほうが良いかも?ということで OSの課題の奴です.参考になるかはわかりませんが.

mercurialでpull requestをするにはBitbucketとかgithubが自動でやってくれていた所を自分でどうにかしないといけない. それは何かと言えば,リモートのリポジトリの権限を振ってあげないといけない.

mercurialの場合,pushしたリポジトリからcloneしてpull request(push)する際に対象となるのはリモートのリポジトリgithub使ってるときは$git push origin master (だっけ)する対象だよね.

ただ自分が作っただけだとパーミッションが755.つまり自分だけしかなにも出来ない状態になっている. なので他の人がpushしようとしてもロックがかかってしまう訳.

じゃぁどうするかと言うと権限を変えれば良い. グループ内だけ出来るようにすれば良いので775で良いと思うのだけど,777にしとくのがベター? それと再帰的にするので -Rを忘れずに

$chmod 775 -R .hg

すればおそらく出来る筈.mergeは調べれば出てくる気がするけど

$ hg merge other-branch

あたりすれば良いかなぁ. 終わったらパーミッション戻しとこう

$chmod 755 -R .hg

閲覧サービスのgrafでmergeされてればokかな.たぶん


2016/12/01(追記)

mergeする際にconflictが起こった場合,OSXの場合はXcodeのFileMergeがデフォルトで起動するらしい. hgrcにmergeの記述を書いといたほうがエディタで書けるので便利

GitKrakenでのsshについてなど

手術とかデザインスクールとかまとめないと行けないのをまとめてない…やばい…

academyなアカウントで無料でPRO版を取得できるので最近gitを使うときは GitKrakenを使っているのですが,どうもssh回りで何か挙動が怪しい.

まずsshの鍵名を独自のにしてconfigureに書いている場合は

Preferenceの AuthenticationからUse Local SSH agent をクリックしないといけない. どうもKrakenは鍵を見てくれないらしい.悲しい. ただここをクリックしてもsshの登録が上手く行かないと反映してくれない. 可能性としてはssh-addをしないといけないらしい.

その時点でクリックしてなかったのが原因かはわからないけれど,Krakenからgit cloneすると デフォルトのプロトコルsshではなくてhttpsになっているので,コマンドラインからpushするとパスワード聞いてくる.おいおい.

どうもこれはGithub for Macでもあったものらしく .git/configureのレポジトリのurlを

    url = git@github.com:anagura/hogehoge.git 

的に変えないといけないらしい.参考リンク

Branchtの状態などが可視化出来てわりと使いやすいのでオススメかも. アイコンがGravatarから読まれているのでグループワークしても自分を主張できる強さも有る.

モデリングの講義ではこれ使っていく感じで

OS2.1(前半)とjavaの場所

一応まとめ.作業途中にIntellijのスクショ取っとくべきだった….

今回はビルドにテスト,その他諸々をスクリプトで記述することによって自動化してしまおうという gradleというツールを使ってjavaでのI/Oの記述速度の比較をするプログラムを作る.その為の前準備の様な課題です.

とりあえずJavaでよく使われるIDEIntellijをダウンロードしてみよう. 一応学生は登録すればUltimate無料で使えたりします.後プラグイン入れたら他の言語も使えるよ.

次にgradleをinstall

$brew install gradle

一応この前にbrewの環境を更新しときたいので

$brew update 
$brew upgrade

ぐらいはしておいても良いんじゃないかなぁ.

次に今回はjavaを使うので最新版のJDKをinstallします. jDKのinstall Accept License AgreementのチェックいれてMacOSXのverをinstallしよう.112ぐらい使えば良いのではないかなぁ.sampleはいらないと思われる.

ダウンロードしたJavaの仕様書もほしいよねって事で.英語版のdocumentをDownloadします. Java Document

Downloadしたものは自分のMacOSXのDocumentディレクトリの中にjavaとか作るなりして置いてみよう. 参照するのはAPIが中心なので,落としたDocumentのAPIディレクトリ内のindex.htmlをブラウザからブックマークしていつでも見れるようにしておこう.

じゃぁ落としたjavaは112だよね.ということはjavaのverは最新の筈だ. 確認を込めて

$java -version

してみるとおそらく違うverを指している. 何故かと言うとこのjavaはシステムのjava.つまりAppleが用意してくれたJavaというわけ.

じゃぁ今落としたjavaはどこにあるのか. とりあえず確認してみよう

$where java
/usr/bin/java

javaはここを指している.ふむ.ならそこはどうなっているのだろう

$ls -l /usr/bin/java                                                   
lrwxr-xr-x  1 root  wheel  74 10 18  2015 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

/usr/bin/javaはリンク類ってるだけか.だったらそこを見てみよう わかりやすいようにcdしてみると

$cd  /System/Library/Frameworks/JavaVM.framework/Versions
$ls 
1.4        1.5        1.6        A          CurrentJDK
1.4.2      1.5.0      1.6.0      Current

ここにはさっき落としたjavaは入ってなさそう.ではいったいdmgでinstallしたjavaはどこに入っているのだろう

javaには落としたversionを確認する(実際は後述する環境変数の設定の為ですが) java_homeというコマンドが実は用意されています. ただこのコマンドが置いてある場所はPATHが通ってないのでフルパスで

$/usr/libexec/java_home -V 

とか打ってみます.Vオプションは今現在installしているjavaの一覧が見えます 試しにやってみると

$/usr/libexec/java_home -V
Matching Java Virtual Machines (6):
    1.8.0_112, x86_64: "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
    1.8.0_111, x86_64: "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
    1.8.0_60, x86_64:  "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home
    1.8.0_51, x86_64:  "Java SE 8"  /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
    1.6.0_65-b14-468, x86_64:  "Java SE 6"  /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-468, i386:    "Java SE 6"  /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

これによるとさっきinstallした1.8.0_112はこの1番上/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home にあるらしい.なるほど.

つまりdmgでinstallしたjavaファイルは/Library/Java/JavaVirtualMachines/にversionごとdirectoryが生成されてそこに置かれる訳.

ではjavaのversionをこの最新版に変更しよう./usr/binで見たjavaのコマンド群はリンクが張られているだけなので,versionを指定できれば動的に変わるはずだ.

JAVAを利用する各ツールは環境変数$JAVA_HOMEで設定しているパスを確認している. その部分を変更すれば良いという事になる.

指定方法は簡単.zshなら.zshrcぐらいに

$vim ~/.zshrc
export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_112`

を付け加えれば大丈夫.その後設定を反映させたいので

$source .zshrc

しておこう.zshにloginシェルを変更したい場合は次のリンクでも参考にしてみよう. Homebrew で zsh を導入する | deadwood

では実際に作るのはまた後半で

続OS11.1

前回 の続き.

大域アドレスはGET出来たけど学外からの通信が出来ない.学内からだといけるのだけど…. と原因をねむ君に聞いてみると systemctl status networkがError吐いてる

エラーログはこんな感じ(コピって無かった...)

$systemctl status network 
●network.service - LSB: Bring up/down networking
   Loaded: loaded(/etc/rc.d/init.d/network; bad; vendor preset:disable)
   Active: failed(result: exit-code) since Sun 2016-10-23 13:33:41 JST; 28s ago
     Docs: man:systemd-sysv-generator(8)
   Process:1694 ExecStart=/etc/rc.d/init.d/network start (code=exited,

略

Oct 23 13:33:41 hogehoge systemd[1] Failed to start LSB: Bring
(多分ここがError)

Oct 23 13:33:41 hogehoge systemd[1] network.service: Unit enter
Oct 23 13:33:41 hogehoge systemd[1] network.service: Failed wit

色々調べたのですがNetworkManagerはあまり関係無い?

/etc/init.d/network restartもダメなのでここ? いやCentOSじゃないし…

ただErrorが ystemd[1]: Failed to start LSB: Bringなので接続関連ではありそう.

そこで色々考えているとねむ君からDNS追加したらいけるんじゃね?という鶴の一声. なるほど.というわけで

$sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

して一番最後に

DNS1=(DNSサーバーのIP:10.なんとか)

を付け加える.うーん上手く行かない. なのでとりあえず

$ie-virsh destroy 01
$ie-virsh start 01

してみるといけた.DNSサーバーを追加して再起動かけたのが決め手となったか. 起動時のlogを見てみると

[    4.418661] IPv6: ADDRCONF(NETDEV_UP): ens3: link is not ready
[    4.525864] nf_conntrack version 0.5.0 (8192 buckets, 32768 max)
[    4.744020] bridge: automatic filtering via arp/ip/ip6tables has been deprecated. Update your scripts to load br_netfilter if you need this.
[    4.767259] Netfilter messages via NETLINK v0.30.
[    4.789258] ip_set: protocol 6 

とautomaticに設定できているらしい.ふむ.

statusは

● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8) 

おお正常. ほんとにここが原因だったのかまたie-virshでconsole入って消して再起動書けてみたけど 引けた

DNSが原因ではない? だとしたらしてみたのはNetworkManager?(一応リンク先のコマンドは叩いた) はっきりとした原因は特定出来ないが…ふむ….と思ったら引けなくなった

どうも反映されるまで時間がある.DNSのキャッシュ的な問題かもしれない?

どうもDNSが原因ではなさそうSource 前述のNetworkManagerの設定が原因かもしれない.情報求む

これでLevel2までは終わったかな.ねむ君に感謝

OS11.1

うわっ六ヶ月ぶりの更新だった!!

という訳でみんな大好きなOSの講義が始まったのでレポです. まずは1.3を終わらせた後にKVMに変換してhogehogeっていうところ.とりあえずやってみたので覚えている範囲でのlogです. あってるかどうかは解らないので参考程度が嬉しい.ちなみにminimuminstallなのでその辺からずれてる?かも. それと覚えてないところ(やったけど書いてない)があるかもしれないので…うん…間違ってても怒らないでね…

とりあえずどうにかしてvdiのイメージファイルをos.cr.あいいーに送っとこう。

まずVMイメージを変換.

$qemu-img convert -O qcow2 Fedora24.vdi /media/iscsi/hoge/foo/01.qcow2

次にvirshを呼び出してディレクトリとか作らないと行けないので

$ie-virsh define 01

するとディレクトリが生成される.mkdirすると権限がないとか言われるしsudoは使えないのね.

さっき変換したやつを /media/fcs/students/e15/e1557**/01.img あたりに持ってく. 多分defineしないとこのディレクトリ自体が存在していないはず.パスは調べて

その後

$ie-virsh  define students/e15/e155730/01.xml

だと思う.この辺の順序はうろ覚えなので確認して.出来なかったら一度undefineしてやり直すのも良い? 参考リンク1

忘れていた.起動しないと

$ie-virsh start 01

ただここでvirsh console 01しても引けないし,sshも出来ない. とりあえずipアドレスは振っときたいよねっていうことで

$virsh dumpxml students/e15/114514/01| grep “mac address”

するとMAC Addressが手に入るのでそれを使ってip申請. 一度ip申請出来ればローカルからssh出来るよ!やったね!

でやりやすくした後にconsole引きたいのでVM

$sudo vi /etc/default/grub

をして(えっ?VMsshの仕方が解らない? 学内ならどこでもいいから$ssh anagura@10.10.なんちゃらすると良いんじゃない?)

6行目あたりを

GRUB_*略*.lv=fedora_(defaultの数字:401とか?)/swap  console=ttyS0,115200n8"

になるように rhgb quietを消去+行末にconsole以降を付け加える. それで再読み込み

$sudo grub2-mkconfig -o /boot/grub2/grub.cfg

するとconsoleが引ける.やったね!

でここからはセキュリティ監査を受けるようの下準備

まずは

$adduser hogehoge(作りたいアカウント)

で監査用のユーザーを作る.ただパスワードが無いので root

$passwd hogehoge(設定したいアカウント)

でパスワードを作成.これがrootに上がれるパスになるっぽい 後は鍵をDLして

$rsync -avz  hogehgoe.pub(送りたいfile) hogehoge(送り先)@ipアドレス:~/

とでもすれば送れるはず. また、とりあえずsudo使えるようにrootで入って

$ visudo 
user ALL=ALL ALL(ここは適当)

してもらった後はいつもの処理だけどhogehogeアカウントで入り直して

$mkdir .ssh
$chmod 700 .ssh
$mv hogehgoe.pub authorized_keys
$chmod 600 authorized_keys &&mv authorized_keys .ssh 

当たりすれば良いはず.

次にsshでrootにログインを拒否りたいので

$sudo vi etc/ssh/sshd_config

して中の

 PermitRootLogin no 

に変更 ちなみにsudoしないとファイルの中身見れないので注意

ついでにpasswordで入られるのもやっかいなので

PasswordAuthentication no
ChallengeResponseAuthentication no

しとこうね.あっコメントアウトは外すなり別行で作るなりしよう

つぎにfirewallの設定だけど,とりあえず

$sudo firewall-cmd --list-all

で今の動いている奴らの確認をする.ただ動いてるって行ってても動いてない(矛盾)の時があるので

$sudo systemctl status http(ターゲット名)

とかして確認しとこう.ちなみにこのへんはsudoじゃないと見れない出来ないドラゲナイ.つらい.suしてrootになっとくのも手か.

webpageなんで必要なのはdhcp,http sshぐらい.mdnsはdnsっぽいけど別にいらない.

消し方は

$sudo  firewall-cmd --remove-service=https --permanent

すれは出来るはず. ダメそうだったらゾーンが関係しているかも--zoneしてなんか指定すれば良い

そしてこれを再読み込み

$firewall-cmd --reload

ただdefault設定が影響するので詳しくはぐぐってくれ(丸投げ) この辺とか見れば良さそう

で次は

$sudo visudo

して

 Defaults    passprompt = "[sudo] <%U@%h> Enter %u's password:" 

をsudo許可した部分の後に(Alow user?)らへんにいれる.

次に不必要なユーザーをログイン出来なくする.

$sudo vi /etc/passwd

するとユーザー一覧が手に入るのでその中で shutdown:x:6:0:shutdown:/sbin:/sbin/nologin 的にいらなそうなの(halt)とかを/sbin/nologinにシェルを変えとく.

次にリモートユーザーがsshだけ出来る.しかも学内から限定にしたいので まず

$sudo vi /etc/hosts.allow

して行末に

sshd:133.13.
sshd:10.
ALL:127.0.0.1

とかしてみるといいと思う.ちなみに上ふたつは学内のアレ.

で,他ユーザーをブロックするので

$sudo vi /etc/hosts.deny

して

ALL:ALL

を付け加える.

ほいでdnfのautoupdateは これとかここでも参考にしてくれ.

ここまですれば多分OKかな. 無事アドレスゲットしてwordpressが開けないのはDBの影響なので ここの通りに直すと良い.名前はwordpress。記事が開けないのはURLに日本語が有るから. wordpress開けたら管理画面からアドレスの設定とかパーマリンク設定で日本語が入らないようにとかもしとこう

勉強勉強会に参加した話

久方ぶりの更新ってことで。とりあえず昨日勉強勉強会に参加してきました。

java-kuche.doorkeeper.jp

話者は金城さん。西島さん。nal先生。高江洲さんの4人。それぞれ切り口は異なるものの最終的に収束した結論は同じでOutput大事だよねという事です。

ということでメモをざっくりまとめると

  • どんな感じにoutputすれば良いのか?

    • 駆動を利用する。(ex.承認欲求,〆切,発表
    • コミュニティ活動で発表する
    • 論文書いて学会に出る
    • 自作のmindmapを起こしてみる(pc上&手書き)
  • じゃぁinputは?

皆さんすらすらと参考文献とかオススメの図書をあげていたのでもう少し本も読まなければと思いました。

自分と他人を比較しないけれども他人と一緒に勉強して刺激を受けるという観点も中々面白かったです。比較はせずとも行動をともにする。言わばoutput先に誰か人がいなければfeedbackがし辛いということなんでしょうか。その点では公開することコミュニティ参加は向こう側に人がいるということで共通したものがあると思います。

勉強しようと思うと少しげんなりしてしまいますが,この会を通して楽しくすることなら継続的に出来そうだよね?ついでにSNSでoutputもしてみようぜ?という気持ちになれたので掴みは出来てきたかなと考えています。そのためにはgithubとか使うと良いと思う(進捗を可視化出来る)ので今後と使っていこうかなとか思ったり。

ひとまずは自己満足に終わらないためにもoutput頑張ります。ってことで