Hatena::ブログ(Diary)

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)
chromeで見ると、死ぬほど出るGoogleの広告がブロックできないので、
firefoxでABPを入れるとすっきり見られます。

2012-07-27

グーグル ケーブルテレビに参入

http://www3.nhk.or.jp/news/html/20120727/k10013894781000.html

グーグルは、アメリカ中西部カンザス州とミズーリ州の一部の地域で、通信速度が毎秒1ギガビットの高速の光ファイバー網をみずから整備し、これまでより100倍も高速なインターネットサービスを提供するとしています。

そのうえで、こうした地域でことしの9月からインターネットを通じて映像を配信するケーブルテレビ事業に乗り出す計画を明らかにしました。

グーグルは、テレビとインターネットの家庭向けのサービスを月額120ドル(日本円で9300円)で提供するとしており、タブレット端末やスマートフォン向けにも映像を配信することにしています。グーグルは、これまで動画投稿サイト「ユーチューブ」などを通じてインターネット上で映像を提供してきましたが、みずから通信インフラを整備して既存のメディアと同様のテレビ事業に参入することになり、大きな戦略転換といえます。

rubymotion_cookbook

http://iconoclastlabs.github.com/rubymotion_cookbook/

O'reillyのiOS 5 Programming CookbookのサンプルコードをRubyMotionコードに置き換え。

マイクロソフトのインターンシップ体験談

http://cpplover.blogspot.jp/2012/07/blog-post_22.html

俺は2008年の夏、高校二年になる直前、高校生のインターンをやっていた。そこで俺が体験したことは、生涯忘れられないだろうし、ソフトウェア開発会社の反面教師として生涯記憶に残るだろう。俺はワシントンはレドモンドにあるMicrosoft社から10分しか離れていないところに住んでいて、プログラミングを学んでからというもの、ずっとあそこで働きたいと思っていた。実際に働くまでは。

Shimi

http://tovbot.com/

サーボの可動部がつらそう。

D

D

D

[] Mac miniにUbuntuを入れる -1-

Git鯖を立てるのに、置き場所もないのでMac miniにした。

ドライブを入れ替えたので、いまのところまっさらな1TBのブランクドライブが搭載されている。

EFIなので、rEFItが必要なのはOSXと共存する場合だけかな。

grubはEFI対応終わっていると聞いたような気がするので、MacOSXと共存しないなら問題なさそう。

鯖用途なので、GUIは出る必要がないのが気楽でいいね。GPU対応状況は無視できる。


UbuntuCDのUSBメモリへのddはMac上でやる。

この鯖は、Androidビルドマシンとして使用する可能性があるので、まだ12.04は微妙。

10.04はさすがにメンテ終わっているだろうから、11.04にする。

UIはシェルでいいので、Serverを選択。

http://releases.ubuntu.com/natty/ubuntu-11.04-server-amd64.iso

マイナーリリースはないのね。

USBメモリはdesk2に見える。わからなければ、システムプロファイラやディスクユーティリティで確認しておく。

MacBook:Downloads kinneko$ df
Filesystem    512-blocks       Used Available Capacity  Mounted on
/dev/disk2       1429908    1429908         0   100%    /Volumes/Ubuntu 11.04 amd

umountしておく。

MacBook:Downloads kinneko$ sudo umount /dev/disk2
Password:

ddでisoを生書き。

MacBook:Downloads kinneko$ dd if=ubuntu-11.04-server-amd64.iso of=/dev/disk2
1379552+0 records in
1379552+0 records out
706330624 bytes transferred in 635.646545 secs (1111200 bytes/sec)

USBに挿しこんで、Cキーを押しながら起動。

見に行っているけど、起動できないな...

EFIパーティションあって、rEFItないと起動切り替えできない?

CD焼いてみるか。

と思ったが、CDドライブが電源入らない... 最低。


これによると、まるごと書き換える場合も、最初はMacOSXが入っていることを前提にしている。

https://help.ubuntu.com/community/MactelSupportTeam/AppleIntelInstallation

しゃぁない。入れるか。

推奨は、FWやEFIアップデートなどのために、OSXを残しておくってことだけど、出て半年以上過ぎて、もうだいぶ枯れているだろうからそのまま全面利用に。

最悪は、外付けで起動してアップデートするしか。


再度、ネットワークリカバリ。

先ほどテストでやったときのテンポラリはどこにも残っていないようなので、再度ダウンロードからはじまる。

これ、RAM上でやってるのかね。


まず、SATAディスクのゼロ書きやりたい。

ディスクユーティリティを起動する。

増設した1TBのドライブを選び、消去タブを選んで、セキュリティオプション...ボタンで「最も速い」の右隣りを選ぶ。

データを一回だけ書き込むモード。

これで、出荷時の不良セクタを消しておく。

厳密には消えるわけじゃなく、代替セクタが有効になるだけなんだけど。

消去ボタンを押して、確認ダイアログで消去ボタンを押して開始。

最初、予想時間4分とか出たが、1TBを全部なめて4分とか、そんなわけはない。

じきに2時間に変わる。

しかし、十数分たっても2時間のまま。小一時間たっても2時間のまま。

終わる間際には、少し時間が残っていても、ささっと進むこともある。

時間はかかるが、新品のディスクや、もらった中古のディスクには、これをやっておくと効果的。


このMac miniは、中国直送と違って、製造時期がわからない。

HWのファームアップデートが存在する可能性もあるので、時間はかかるがひと通りOSXのアップデートは適用しておく。


OSXのインストールについては、Ubuntuと関係ないから、ここでは触れない。

続く。

[] LionプリインのMac miniからインストール媒体を取得する

オンラインリカバリをやっているのだが、インストールイメージのダウンロードに数時間かかって、やってられない。

緊急を要するような場合は、耐え難い時間になる。

山ライオンがリリースされて、売っていたUSB媒体のLionインストーラーも販売をやめてしまったようなので、入手は困難になった。

自力でローカルインストール用の媒体を作る必要がある。


プリイン機種では、AppStoreからのアップデートのようにインストーラーイメージを取得することができない。

Lion 復元ディスクアシスタント(Lion Recovery Disk Assistant)というのがあるのだが、これで作られるUSBメモリでは、最初の最低限の起動とメンテナンス環境しか含まれていない。

http://support.apple.com/kb/DL1433?viewlocale=ja_JP&locale=ja_JP

これを挿しこんで起動しても、結局インストールにはインストーラーイメージの全体をネットワークからダウンロードすることになり、数時間を要する。

これで作れる部分については、オンラインから落としても20-30分で済むので、専用媒体を作っておくメリットがない。

めんどくさいことです。


方法は以下の3案くらいか。

案1) インストーラーのダウンロードが終わったら自動再起動をインタラプトして、ターゲットモードでインストールイメージを回収する

オンラインインストーラーでは、一式のダウンロードが終わると、自動的に再起動してインストーラーが起動してしまう。

起動するとダウンロードしたインストール用のイメージは削除されてしまう。

じっと待っていて、再起動したら電源切るしかないのだろうか?

やってみるか。

ダウンロードの残り時間が目安で表示されるのだけど、これはあまり当てにならない。

最後の方は、急に進んだりする。

じっと見てるのもなんだな...


と思っていたら、予定よりあと2時間を残して、再起動音が...

電源で無理やり切ったけど、どうなんだろう。


FireWire800のケーブルを家から持ってきて、MBPに接続し、Tキーを押しながらターゲットモードで起動。

画面にFireWireアイコンが出てくる。

マウントされたMac miniの中身は、こんな感じ。

https://lh6.googleusercontent.com/-YBMy0xEwDkk/UBIx9mnBATI/AAAAAAAADW0/TJk9ydrxxL4/s759/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882012-07-27%252015.14.30%25EF%25BC%2589.png

おお、あるじゃないの。

こいつをMBPにコピーして保管した。

目的達成されちゃったな。


あたりまえだけど、ターゲットモードを終わって、起動すると普通にインストールが再開された。

案2) インストールが終わってから、リカバリ領域内のインストールイメージを回収する

リカバリ領域をマウントして、インストーラーイメージを回収する方法が知られているが、オンラインリカバリを行なうと、リカバリ領域は作られるという話と、作られなかったという話がWebの情報から読み取れる。

これは、確認する必要があるだろう。

リカバリ領域が出来ていれば、これが手堅いかな。

しかし、調べていると、ここにあるのは、20分で落とせるBasic System Installerでしかなさそう。

kinneko-no-Mac-mini:~ kinneko$ diskutil list
/dev/disl0
	#;	TYPE	NAME	SIZE	IDENTIFIRE
	0;	GUID_partition_scheme		*1.0 TB	disk0
	1;	EFI		209.7 MB	disk0s1
	2;	Apple_HFS	名称未設定	999.3GB	disk0s2
	3;	Apple_Boot	Recovery HD	650.0 MB	disk0s3

見える。

たしかにパーティションサイズが小さい。これに4G以上のインストーラーが入っているわけがない。

マウントしてみる。

kinneko-no-Mac-mini:~ kinneko$ diskutil mount disk0s3
Volume Recovery HD on disk0s3 mounted

「Recovery HD」ボリュームを開くと、「com.apple.recovery.boot」というフォルダが見える。

中を開いても、5つファイルが見えるだけ。

不可視属性になっているようだ。

kinneko-no-Mac-mini:~ kinneko$ ls -al /Volumes/Recovery\ HD/com.apple.recovery.boot 
total 942728
drwxr-xr-x  10 root  wheel        340  7 27 15:18 .
drwxrwxr-x   8 root  wheel        340  7 27 15:18 ..
-rw-r--r--@  1 root  wheel        749  7 27 15:18 .disk_label
-rw-r--r--@  1 root  admin       1876  4 29 20:43 BaseSystem.chunklist
-rw-r--r--@  1 root  admin  455877203  4 29 20:35 BaseSystem.dmg
-rw-r--r--   1 root  wheel       2445  4 28 22:07 PlatformSupport.plist
-r--r--r--   1 root  wheel        478  4 29 16:54 SystemVersion.plist
-rw-r--r--   1 root  wheel     884912  4 29 20:11 boot.efi
-rw-r--r--   1 root  wheel        361  7 27 15:18 com.apple.Boot.plist
-rw-r--r--   1 root  wheel   25883212  4 29 19:44 kernelcache

BaseSystem.dmgが見えた。

435MBしかない。

コマンドで開く。

kinneko-no-Mac-mini:~ kinneko$ open /Volumes/Recovery\ HD/com.apple.recovery.boot/BaseSystem.dmg

Mac OS X Lion インストールは見えるが、これは全システムのインストーラーとは違う。

https://lh3.googleusercontent.com/-p91wLcp-RN0/UBI9_83V6EI/AAAAAAAADXM/meOcbCEmeCM/s800/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25202012-07-27%252016.05.34.png

残念。


これを使って、空きパーティションを別に確保して、そこにインストールすると自動的に再起動が起こらず、そのままコピーできる。

もう一度、数時間待ちが必要だが、そういう手もある。

案3) 購入直後で未起動の本体をターゲットモードで起動して、インストールイメージを回収する

たまたま2台あるので、1台を最初の電源入れる前に、ターゲットモードで起動してみる。

ひょっとすると、インストールイメージが回収できるかもしれない。

これは、後で試す。


試してみたが、残念ながら、すっかりインストール済みのボリュームであった。

リカバリボリュームの中も確認してみたが、BaseSystemだけだった。


インストールを終わって、起動した時のシステム情報は以下。

ソフトウエア:Mac OS X Lion 10.7.4(11E53)

機種ID:Macmini5.1

ブートROM:MM51.0077.810

ソフトウエアアップデートは6つ。FW関連はなさそう。

一応全部当てる。

最新ということで、これ以上当てるものはなさそう。

というわけで、Ubuntuに上書きする。

[] Mac miniにUbuntuを入れる -2-

OSX入れたついでに、ターミナルで、起動時に待ち時間があるのを解消しておく。

# bless --device /dev/disk0s1 --setBoot --legacy

これは、起動ドライブの選択をコマンドラインでやっているだけ?

だとすると、今やっても意味がないな...

やめた。


起動音をなくすには、これ。

# /usr/sbin/nvram SystemAudioVolume=%01

さすがにそれは、Macっぽいところが完全になくなってしまうので、やらない。


前に作ったUSBメモリを挿しこんで、Opt(Win)キーを押しながらMac miniを起動。

No bootable device -- insert boot disk and press any key

Ubuntu 11.04で、USB起動できるCDイメージになっていないのかな...


CD焼いて試す。

USB接続の外付けドライブを用意して、接続しておく。

Opt(Win)キーを押しながらMac miniを起動。

おお、出てきた。

eEFItとか入れなくても大丈夫なのね。

※ 後日まっさらの純正ドライブに入れようとするとCD起動してこないことがわかった。何が違う?


Ubuntu Serverって、前にも入れたことあったけど、こんなインストーラーだっけ?

テキストインストラーが起動。

まず言語を選択。日本語を選ぶと画面がフラッシュして日本語メニューが出てきた。

Ubuntu Serverをインストール(I)

Ubuntu Enterprise Cloudをインストール(E)

ディスクの破損をチェックする(C)

メモリテスト(M)

一番目のハードディスクから起動(B)

壊れたシステムを修復(R)

Iでインストール開始。

メニューが完全に日本語化されていないけど、いいかという確認が出る。

問題ない。

あとは、Debianのコンソールインストールとほとんど変わらない。

たしかに、ところどころ翻訳されていないな。

パーティションは手動で。

画面出てこない...


リトライして、途中でコンソールを出す。

gfdiskとか入ってなさそげ。

普通のfdiskでは、全容量がGPTのsda1だけ見える。

/usr/sbinにないから、ないよな... orz

Desktopでやらないとダメか。

めんどくさ...

コンソールから、udebの追加ってできたっけ...

なんか、それもなんだかな...


前に使った、ubuntu-11.10-alternate-amd64+mac.iso があったので、それを焼く。

11.04もあるんだけど、ドライバとか古かったらイヤかなということで。

がーん、起動できない... orz

ブートデバイスないってメッセージ来たよ... orz


詰まった。


ここには、64bitのMac用UbuntuはEFIサポートは、BIOS互換モードしかサポートできないって書いてあるな。

http://www.rodsbooks.com/ubuntu-efi/index.html

互換モードを使用しないでEFIbootできる手順が書いてるけど、主旨には賛同するのだけど、作業は結構めんどくさそう。


Ubuntu Serverをそのまま全ドライブを使ってインストールして、BIOS互換モードで起動することに。

rEFItのCDを用意する。

http://refit.sourceforge.net/

http://downloads.sourceforge.net/project/refit/rEFIt/0.14/rEFIt-0.14.cdr.gz

パーティションは、sda1のGPTを残したまま、sdb2(rootfs)/3(swap)ができている。

OpenSSHサーバーだけ入れる。

再起動。

あれ?

普通に上がってくるな... orz

悩むことなかった。


sshで接続して、パーティションを見る。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           1         993+  ee  GPT
Partition 1 does not start on physical sector boundary.
/dev/sda2   *           1      119524   960075195+  83  Linux
Partition 2 does not start on physical sector boundary.
/dev/sda3          119524      121602    16686370   82  Linux swap / Solaris
Partition 3 does not start on physical sector boundary.

GPTのパーティションテーブルがあるという警告が出る。

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.

パッケージは370も入っている。鯖なのに多いか。

kinneko@gitsv:~$ dpkg -l | wc
    375    3296   42123

[] git鯖の構築 -1-

Ubuntu Server 11.04をインストールしたMac miniでGitサーバーを構築する。

kinneko@gitsv:~$ sudo apt-get install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  emacsen-common git-man liberror-perl
Suggested packages:
  git-doc git-el git-arch git-cvs git-svn git-email git-daemon-run git-gui
  gitk gitweb
The following NEW packages will be installed:
  emacsen-common git git-man liberror-perl
0 upgraded, 4 newly installed, 0 to remove and 81 not upgraded.
Need to get 5278 kB of archives.
After this operation, 12.5 MB of additional disk space will be used.
(snip)

はいったバージョン。

kinneko@gitsv:~$ git --version
git version 1.7.4.1

パッケージを最新に更新しておく。

kinneko@gitsv:~$ sudo apt-get update
kinneko@gitsv:~$ sudo apt-get upgrade
(snip)
78 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 47.2 MB of archives.
After this operation, 225 kB of additional disk space will be used.
(snip)

まだ、とりあえずの運用なので、IPアドレスはDHCPで。

更新は、LAN内から行ない、公開はhttpでダウンロードのみの予定。

kernel上がったな。再起動できるか確認しないと。

問題なく再起動できた。


まずは共有リポジトリを作る。

ディレクトリは、varに作るのが一般的なのかな?

kinneko@gitsv:~$ sudo mkdir -p /var/git/EVT/test.git
kinneko@gitsv:~$ cd /var/git/EVT/test.git
kinneko@gitsv:/var/git/EVT/test.git$ sudo git --bare init --shared
Initialized empty shared Git repository in /var/git/EVT/test.git/

開発者グループを作って、ユーザーを登録し、オーナーを変更する。

kinneko@gitsv:/var/git/EVT/test.git$ sudo groupadd developer
kinneko@gitsv:/var/git/EVT/test.git$ sudo usermod -G developer kinneko
kinneko@gitsv:/var/git/EVT/test.git$ sudo chown root:developer -R ./

LAN内のLinuxマシンから、リポジトリにデータを登録する。

kinneko@BuildSV:~$ mkdir test
kinneko@BuildSV:~$ cd test/
kinneko@BuildSV:~/test$ git init
Initialized empty Git repository in /home/kinneko/test/.git/
kinneko@BuildSV:~/test$ touch test.dat
kinneko@BuildSV:~/test$ ls -l
total 0
-rw-r--r-- 1 kinneko kinneko 0 Jul 27 18:51 test.dat
kinneko@BuildSV:~/test$ git add .
kinneko@BuildSV:~/test$ git commit -m "Test Commit"
[master (root-commit) 17aa57a] Test Commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.dat
kinneko@BuildSV:~/test$ git log
commit 17aa57a149b74d1c84f7ea71049ad2d120b61cc3
Author: kinneko <kinneko@gmail.com>
Date:   Fri Jul 27 18:53:16 2012 +0900

    Test Commit

サーバーに登録する。

kinneko@BuildSV:~/test$ git remote add origin ssh://192.168.1.100/var/git/EVT/test.git
kinneko@BuildSV:~/test$ git push origin master
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is 74:72:ee:23:c0:29:29:a4:46:3f:6f:a7:81:f2:ff:b8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.100' (ECDSA) to the list of known hosts.
kinneko@192.168.1.100's password: 
Counting objects: 3, done.
Writing objects: 100% (3/3), 206 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://192.168.1.100/var/git/EVT/test.git
 * [new branch]      master -> master

ssh初回なので、鍵を受け入れるか聞かれた。

鍵を登録しておけば、パスワードもなしで同期できる。


サーバー側で登録を確認。

kinneko@gitsv:/var/git/EVT/test.git$ git log
commit 17aa57a149b74d1c84f7ea71049ad2d120b61cc3
Author: kinneko <kinneko@gmail.com>
Date:   Fri Jul 27 18:53:16 2012 +0900

    Test Commit

ちゃんと来ている。


ローカルで作ったものを破棄して、新しく同期してみる。

kinneko@BuildSV:~/test$ cd ../
kinneko@BuildSV:~$ rm -rf test/
kinneko@BuildSV:~$ git clone ssh://kinneko@192.168.1.100/var/git/EVT/test.git
Cloning into test...
kinneko@192.168.1.100's password: 
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
kinneko@BuildSV:~$ cd test/
kinneko@BuildSV:~/test$ ls -l
total 0
-rw-r--r-- 1 kinneko kinneko 0 Jul 27 18:58 test.dat
kinneko@BuildSV:~/test$ git log
commit 17aa57a149b74d1c84f7ea71049ad2d120b61cc3
Author: kinneko <kinneko@gmail.com>
Date:   Fri Jul 27 18:53:16 2012 +0900

    Test Commit

問題なし。

ファイルを追加して同期してみる。

kinneko@BuildSV:~/test$ touch test2.dat
kinneko@BuildSV:~/test$ git add test2.dat
kinneko@BuildSV:~/test$ git commit -m "add test2.dat"
[master 95f79c3] add test2.dat
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test2.dat
kinneko@BuildSV:~/test$ git push origin master
kinneko@192.168.1.100's password: 
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 231 bytes, done.
Total 2 (delta 0), reused 0 (delta 0)
To ssh://kinneko@192.168.1.100/var/git/EVT/test.git
   17aa57a..95f79c3  master -> master

問題なし。


sshサーバーさえ上がっていれば、ローカルにやるのとほとんど同じ。

とても簡単。