VirtualBoxを使って(気合で)Fedora24のパーティションを拡張する
わりと辛かったのでメモ
講義でqcow2な形式を拡張して,LinuxのKarnelをbuildする必要があったのだが,root権限が使えない一般ユーザーなので 自分で出来るVirtualBoxでやってみる. 気合と書いてるのはその為.
なぜVirtualBoxを使わないといけないのか
どうもVirtualBoxで初期に振ったHDD容量以外は
fdisk /dev/sda
しても降ることが出来ないらしい….今回は2時間くらいそこで悩んだ
VirtualBoxでの操作
まずは拡張したいVirtualBoxのイメージをCloneしておく. 右クリックでClone押せば出来るっぽい.(なぜかCloneする時のアイコンが羊です) それで拡張する為に一旦shut downしておく.
ターミナル上での操作
まずはローカルで ~/VirtualBox VMs
にcd.
続いて容量の確認
$ VBoxManage showhdinfo anagura.vdi UUID: 4e7f002a-a846-4880-a960-c59912501cd0 Parent UUID: base State: created Type: normal (base) Location: /Users/e155730/VirtualBox VMs/anagura/anagura.vdi Storage format: VDI Format variant: dynamic default Capacity: 50000 MBytes Size on disk: 4898 MBytes Encryption: disabled In use by VMs: anagura (UUID: c4dfd1e7-5ebd-44d6-abb3-c12a3494529d)
ここの Capacityが問題.今回はやった後なんでわりとでかいが,8Gb程度になってるはず. さて変換 30Gほどあれば良いか
$ VBoxManage modifyhd clone-disk1.vdi --resize 30720 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
多分確認すれば増えている筈.
実際に反映させていく
さてこれでHDDを物理的に増やした(仮想的だけど)ので,それを実際にマシン側に反映させていく.
とりあえず先程反映させたVMを起動,rootあたりで入っておく.(一応suとかしてrootになっとく)
まずは今現在のパーティション環境を確認したいので
$ fdisk /dev/sda fdisk (util-linux 2.28.2) へようこそ。 ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。 書き込みコマンドを使用する際は、注意して実行してください。 コマンド (m でヘルプ):
な画面を表示させる.ここで確認はpだからおもむろにpを押すと
デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ /dev/sda1 * 2048 1026047 1024000 500M 83 Linux /dev/sda2 1026048 16777215 15751168 7.5G 8e Linux LVM
な画面が表示される. これは後々使うのでメモっておいてください
ここでsda2の方を拡張するのでsda2を消す.(先の段階でサイズが直ってたら変更する必要ない) fdisk内でdを選択
コマンド (m でヘルプ): d パーティション番号 (1,2, 既定値 2): 2 パーティション 2 を削除しました
な感じで削除. 続いて サイズ変更fdisk内でnを選択して作る この時 開始位置を最初の通りに設定する こと.多分デフォルトでそうなってる. 終了位置を書かれてるMAXに設定して,再びp をすると大きくなっている.
ここでファイルに反映させるので必ずwを推して書き込ませること.
で,実際に反映させる.
$pvresize /dev/sda2 Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
さて変更されているか.
$ pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name fedora_401 PV Size 48.34 GiB / not usable 2.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 12374 Free PE 10452 Allocated PE 1922 PV UUID QmA0cN-CnqX-2nFy-2FoX-JFh0-cWhP-V51KUs
やっためう!! さて続いては論理的に拡張
今回は /dev/mapper/fedora(fedora_401)-root
に対して行う
$ lvextend -l +100%FREE /dev/mapper/fedora_401-root Size of logical volume fedora_401/root changed from 6.71 GiB (1717 extents) to 47.54 GiB (12169 extents). Logical volume root successfully resized.
確認しとく
[root@401]/home/anagura# lvdisplay --- Logical volume --- LV Path /dev/fedora_401/swap LV Name swap VG Name fedora_401 LV UUID RyM5Tj-qGQN-PM13-gMUo-Uy7R-SdDd-4Id4Yt LV Write Access read/write LV Creation host, time 401.pc.ie.u-ryukyu.ac.jp, 2016-10-14 20:13:39 +0900 LV Status available # open 2 LV Size 820.00 MiB Current LE 205 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Logical volume --- LV Path /dev/fedora_401/root LV Name root VG Name fedora_401 LV UUID LJZan7-IpRp-7ssR-0BbZ-rovN-LcLz-7QMzpR LV Write Access read/write LV Creation host, time 401.pc.ie.u-ryukyu.ac.jp, 2016-10-14 20:13:39 +0900 LV Status available # open 1 LV Size 47.54 GiB Current LE 12169 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
おーけー.
ここで resize2fs /dev/mapper/fedora_401-root
したさはあるが,これは古いらしく
$xfs_growfs /dev/mapper/fedora_401-root meta-data=/dev/mapper/fedora_401-root isize=512 agcount=4, agsize=439552 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1 spinodes=0 data = bsize=4096 blocks=1758208, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 1758208 to 12461056
で行う.
$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 359M 0 359M 0% /dev tmpfs 371M 0 371M 0% /dev/shm tmpfs 371M 584K 370M 1% /run tmpfs 371M 0 371M 0% /sys/fs/cgroup /dev/mapper/fedora_401-root 48G 3.8G 44G 8% / tmpfs 371M 8.0K 371M 1% /tmp /dev/sda1 477M 155M 293M 35% /boot tmpfs 75M 0 75M 0% /run/user/1000
無事変更されてる.良かった.
この辺参考にすると良い? qiita.com
mkdirしたら自動でリモートのmercurialにcloneする
というわけでzshrcあたりに記述するシェル芸を久々に書いた.
いちいちcloneしたりpushする時にパス書くのも面倒くさいし
ディレクトリ作るためだけにリモート行くのもやや面倒くさい….
その為に osmkdir ex2.11
とかするとディレクトリ生成とclone,ついでにhgrcを書いてpush出来るようにする関数を作ってみました.
osmkdirするとディレクトリとpathを記述したhgrcを作り,mercurialにcloneす ...
やってることはただコマンド並べてるだけなのでわりかし簡単…. SSH変数のとこを適当に変えてください
perlの()
最近Perl勉強しています.楽しいです. 今日の発見なんですが
#!/usr/bin/env perl use strict; use warnings; chomp (my $input = <STDIN>); sub reject{ my $number = @_; if ($number == 0) { $number =1; } else { $number *= &reject($number-1); } } print reject($input) ."\n";
なコードがエラーを吐いて? だったのですが. Perl入学式で質問してみると
いわゆるコンテキストなアレ 問題だったらしい.要素数だけが返されてたのね…
どうもただ ()
使っているだけに感じていた
my($foo,$hoo) = @_;
は
($foo,hoo)
がリストとして解釈されたから上手く行っていたらしい.
なるほど…Perlは奥が深い…
ぴかぴか(自称)のPerl1ねんせい
この記事は Perl入学式 Advent Calendar 2016 12日目の記事です。
自己紹介
今年から始まりましたPerl入学式 in 沖縄の受講生です.アナグラといいます.in沖縄は第2回まで開催されてますが,第1回の第三部から参加させて頂いてます.
情報工学系を勉強している大学2年次です.CodeHex先生の後輩に相応します.力の差があるので気楽に後輩と言えない.
受講したきっかけ
ぶっちゃけ詳しく覚えてないです. 確かCodeHex先生がニュースサイトに投稿しているので知ったような気がします.
当時は大学でC言語とjava,あとpythonをちょろっと触ったのですが,どれも今一踏み込んで書けるLevelではなく.
スラスラ書けるのがシェルスクリプトだけ という状態だったので 母国語(プログラミング的な意味で) が欲しくて受講を決めました.
ちなみに当時のPerlに対する認知レベルは Perl? 真珠? レベルです.
第2回までの流れ
in 沖縄では第二回の時に第三回も纏めて行ったので,知識としてはリファレンスあたりまで勉強しました. 講師はpapixさんやOkinawa.pmの皆さんが中心だと思います. perl入学式は勉強したことをすぐコードに起こすので,知識と実装が同時に入ってくる感じがあり勉強しやすいです. 何より楽しい.
papixさんを始めサポーターの皆さんが優しいのですごい助かっています. Slackの方でも質問に答えて頂いて,ここまでしていただいて良いのかと思っています.
perlについて
復習と予習がてらリャマ本も進めていますが,正直リファレンスを初めとして未知の部分が多いです. コンテキストの違いはこないだ少しわかってきました.(多分)
今書いているコードはハッシュとpush,popなど以外はperlらしいコードをあまり書いていないんじゃないかなぁというレベルです. なのでよりPerlらしい(?)コードを書けるように勉強します!!
後はpaizaとかやってます.入学式に参加してからPerlでB問題が解けるようになりました…!嬉しい…!
懇談会
in 沖縄では毎回Perl入学式終了後にOkinawa.pmさんとの懇談会が行われます. 懇談会ではLTが行われたり,技術トークで盛り上がったり,相談に乗っていただいたりしています.
技術トークは技術力がないのでまだ追いついていけない事が多いですが,後々トークにあがっていたwordを聞くことがあり,いつか混ざりたいです.
それと前回の懇談会では自己紹介のLTさせて頂きました.温かい空気ありがとうごうざいます.
まとめ
まだin沖縄の全日程を走りきってないので卒業していないPerl 1年生ですが Perlはいいぞおじさん(Perl Monger) になれるようにコードガリガリ書いていきたいです.
とりあえずはアルパカ本を読み切るのがしばらくの目標です. 後は何か作ってみたいですね.はてなブログにターミナルから投稿できるプログラムとかとか….
なのでperl入学式in 沖縄卒業まで頑張っていきます!
後は彼女がいないので,いつか「Perl入学式に参加したら彼女が出来た件について」書けるようになりたいですね.
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から読まれているのでグループワークしても自分を主張できる強さも有る.
モデリングの講義ではこれ使っていく感じで