2013年7月16日火曜日

iTunesのファイルを外部ディスクに追い出す

現在自宅のメインマシンはMacBookAir(以下MBA)のみみたいな状況になっています。で、携帯はiPhone、タブレットはiPadという事で当然のことながらiTunesの管理はこのMBAを使う必要があります。

で、困ったことにこのMBAは世代が古いので外部ストレージへのアクセスは無線経由もしくはUSB2.0からでないと出来ません。内蔵SSDは128GBのモデルなのでちょっとしたデータを保存しておく分には問題ないですが写真やiTunesの様なメディアファイルはディスクを激しく消耗します。

(今頃ですが)そして最近気付いたのは・・・実はiTunesって外部ディスクにライブラリ(メディアデータ)を保存する設定を指定てもiPhoneとかのバックアップファイルは内蔵ディスク固定というゴミ仕様。iTunes立ち上げる時以外は不要のこのデータが何故内蔵ディスク固定なのか理解に苦しみますが、こういう抜けた所が多いのもAppleのソフトの特徴なので致し方ないところですか・・・。

で、まぁ要はリンク張っちまえば外部ディスクに逃がせるだろって話でサクサクっとどかしてしまいます。移動してリンク貼るだけ。簡単。


$ mv /Users/<ユーザー名>/Library/Application\ Support/MobileSync /Volumes/<外部HDD名>/iTunes/MobileSync/
$ ln -s /Volumes/<外部HDD名>/iTunes/MobileSync/ /Users/<ユーザー名>/Library/Application\ Support/MobileSync


今回は外部ディスクのiTunesのフォルダにまとめちゃいましたが保存先はお好みで。また、ディスクを換えてパスが変わる場合はリンクを貼り直すためにリンクを消してから二行目のリンク貼る処理をすれば良いです。


$ rm /Users/<ユーザー名>/Library/Application\ Support/MobileSync
$ ln -s /Volumes/<外部HDD名>/iTunes/MobileSync/ /Users/<ユーザー名>/Library/Application\ Support/MobileSync


なんか40GBも空いたよ! 1/3もディスク専有していたとかマジで罪な仕様ですな。MBAのコンセプト考えるとこういうアプリが存在自体ちょっと信じられませんな。まぁ、マーフィーの法則通り気付いたらまた残量0に近づくんですけどね・・・。

以上忘備録でした。

2013年7月12日金曜日

Solarisでのユーザー追加

で、Solarisネタを続ける。

いっぱいあるillumosの中から

  • OmniOS ・・・ サーバー用の最小限の構成。こういうの好き。
  • XStreamOS ・・・ クラウド、Webの開発用

この2つをチョイス。が、VMware PlayerだとOmniOSはインストールが先に進んでくれないのでXStreamOSを入れてみます。同じインストーラっぽいけどこっちはちゃんと先に進んですんなりインストールが完了しましたとさ。

で、Solarisの事は全く分からない人なので

ユーザー追加するのどうやるんだろ!?

適当にコマンドを叩いてみる

# useradd -m hoge

エラーになるやん・・・

# useradd hoge
# mkdir /home/hoge

エラーになりますん・・・

どうしてー!?


http://d.hatena.ne.jp/yohei-a/20081231/1230693019


どうもこういう話みたいです。

ユーザー追加のコマンドあるし、ユーザーディレクトリを作成するオプションもあるのに不思議だねぇ・・・。

一応ちょっとここの書きこみ通りだとダメだったんで補足


# useradd hoge
# mkdir -p /export/home/users/hoge
# chown hoge:other /export/home/users/hoge
# vi /etc/auto_home
+auto_home
hoge      localhost:/export/home/users/hoge  <-- 追記


なんかファイルが変わっているみたいね

とりあえず今日はこれで満足なのであった・・・。

OpenSolarisの末裔達

ちょっと脱線してSolarisに手を出してみたよという話。

まず、一般人にはJavaで有名なSUN Microsystemsという会社があってSolarisというOSがありました。最近ストレージ系で標準になりつつあるzfsというファイルシステムはここ由来ですね。

とりあえずストレージサーバを自前で組むならSolarisを入れるのが鉄板と聞いています。で、そのSolarisの最新は11でExpress版というフリーっぽい物もある様です(ちゃんとライセンス調べてないけど一応ダウンロード出来てVMwareでも動くのは確認した)

まぁ、今回の話は全然それには関係無くて・・・w

そのSolarisという市販OSにはOpenSolarisというオープンソース版がありました。これはSUNが提供していたものなわけですが・・・そのSUNがOracleに買われた事によりOpenSolarisは終焉を迎えます。元々OpenSolaris自体もアクティブな感じではなかったのですが止めを刺してくれました。ホントろくなことしないな、この会社は。

で、ここで血脈が絶たれていたと思っていたのですが、実はまだ生き残っている事が判明。とりあえずこんな感じみたいです。



いっぱいありすぎだよママン・・・。

とりあえずZFSを使用しようとするとLinuxのfuseとかは除くとSolaris、FreeBSD(とその派生)位しか選択肢が無いという印象だったんですがこちらも選択肢としてはアリかも??問題はillumosカーネルがどれだけ安定しているかなんですけどね。

VMware上のlinuxでカーネルの再構築 その3 もう少し煮つめてみよう編

Hyper-V用のカーネルを作る話をもう少し続けてみます。

どうもパッケージ名に関してはこんな感じで良さそう



$ time sudo make-kpkg --revision=0.2 --append-to-version=-hyperv kernel_image


これで「linux-image-3.10.0-hyperv_0.2_amd64.deb」という名前の物がはかれます。参考にしたページは古いのかこのオプションがどちらかしか入っておらず、--revisionの方は数字からスタートじゃないとおこられるし、--append-to-versionだけつけるとなんかバージョン番号の所にも同じ文字が入ってしまって長い名前が生成されてしまうという状況で前回のPOSTにはこの辺のオプションを含めていませんでした。やっぱり情報の鮮度って重要ですな・・・。


<閑話休題>


その2で作ったカーネルが何故期待した動きにならないのかという点。

まず、CONFIG_MEMORY_HOTPLUGがオンになっていないのではないかという指摘。確認確認・・・。入ってないじゃんorz これが無いとMemory Hot-addがちゃんと動かないのかな?

とりあえず下記の場所で設定出来る模様。


Processor type and features  --->
  [*] Allow for memory hot-add
  [*]   Allow for memory hot-remove


その他忘れ物達


Device Drivers  --->
  SCSI device support  --->
    [*] SCSI low-level drivers  --->
      <M> Microsoft Hyper-V virtual storage driver


大事な物忘れていましたなorz


あとdpkg -iで入れた時に/bootにinitrd.img-3.10.0-hypervが存在しない場合は以下の2ステップが必要でした。


$ sudo depmod 3.10.0-hyperv
$ sudo mkinitramfs -o /boot/initrd.img-3.10.0-hyperv 3.10.0-hyperv
$ sudo update-grub

まぁ、ここまでしてみたけどhot-addに関しては動いていない感じ。さらにいくつかデーモン動かして様子を見てみるとなんかネットワークが死亡する現象が。ダメだなぁこれは。

一応素のDebian7.1のカーネルだと動的メモリ拡張は動かないけど安定度という意味では普通に動いている様に見えるのでこちらの設定+Hyper-V関連というのも作ってみました。


結果・・・


-rw-r--r--  1 root root  4994468 Jul  8 14:31 linux-image-3.10.0-hyperv_0.3_amd64.deb
-rw-r--r--  1 root root 31629920 Jul 12 14:37 linux-image-3.10.0-hyperv_0.4_amd64.deb

すげーでかくなったw

でも結局安定せず同じように死んでしまいますorz

さてどうしたものかなぁ。

あ、ちなみにmemory hot-addに関してはHyper-V 2012 R2からじゃないと動かないんだ疑惑も出ていますがVMware上にHyper-Vサーバを構築という無茶をしてみた感じ動きは変わらずという感じ。さてはて・・・。

2013年7月1日月曜日

VMware上のlinuxでカーネルの再構築 その2 ビルドしちゃうよ編

作業ディスクの準備が出来たので早速カーネルを構築します。

3.8からHyper-V用のballoonドライバが入っているのですが、ちょっと試しにつっこんでみたところ、これにはちょっと問題がありました。

というのも確かに管理画面から見ると拡張RAMに対応してそうに見えるのですが、いくら最大値を設定していても起動時のメモリより多い方向には自動動的割り当てが走りません。これが出来るのは3.10からとの事。

で、丁度昨日(2013/6/30)に3.10の正式版がリリースされている様なのでせっかくなのでこいつを入れてみます。

まずはビルド用の前準備(開発環境とカーネルの設定、パッケージ作成に必要なものをそろえる)


$ sudo aptitude install build-essential
$ sudo aptitude install ncurses-dev
$ sudo aptitude install kernel-package


ソースは3.10の物をkernel.orgから落としてきて・・・


$ cd /usr/src
<ソースをコピーしておいて>
$ sudo tar Jxvf linux-3.10.tar.xz


展開します。必要なのか分からないけどlinuxという名前でリンクを作成。


$ sudo ln -s linux-3.10 linux


さぁ作業開始です


$ cd linux
$ sudo make mrproper
$ sudo make defconfig
$ sudo make menuconfig


ここでカーネルの構成を設定するのですが以下のポイントで設定しています


  • 初期状態だと不要だと思うけど全部設定を消す
  • 初期設定を揃える?為にdefconfigを設定してから開始
  • Hyper-Vに関連する部分は全て有効に


最終的な目標はHyper-V用の不要なドライバーを完全カットして、かつチューニングされたカーネルなわけですが、知識が足りていな過ぎて何をどう削ったらいいのかさっぱりわからない状況。

ヘルプを見るとなんとなくalldefconfig(デフォルト設定)をベースに設定すべきな気がするけど、試しにやってみたらドライバだけではなくカーネル系も殆ど何も無い状況になってしまって流石に設定ダルイ気がしたので・・・とりあえずdefconfigベースにしました。

で、問題はHyper-V関連の設定。このmenuconfigは依存関係のある物はコアの物を有効にすると初めて項目が現れる様なので手順通りにやらないと設定できません。とりあえずHyper-V関連は以下の手順で良いと思いますがチューニングという意味では色々足りなかったり多かったりするはず。今後煮つめていきます。



Processor type and features  --->
  [*] Linux guest support  --->
    [*] Enable paravirtualization code


にチェックするとHyper-Vの項目の設定が出来る様になるので(厳密にはparavirtualization codeはいらないかも)


Device Drivers  --->
  Microsoft Hyper-V guest support  --->
    <*> Microsoft Hyper-V client drivers
    <*>   Microsoft Hyper-V Utilities driver
    <*>   Microsoft Hyper-V Balloon driver


なんとなくHyper-V系の設定を一式ビルトインで設定

ここまで設定すると


Device Drivers  --->
  HID support  --->
    Special HID drivers  --->
      <M> Microsoft Hyper-V mouse driver


Device Drivers  --->
  Graphics support  --->
    -*- Support for frame buffer devices  --->
      <M> Microsoft Hyper-V Synthetic Video support


Device Drivers  --->
  [*] Network device support  --->
    <*> Microsoft Hyper-V virtual network driver



この辺を選べるようになるので設定する。基本サーバとして使う場合はネットワークは必須、HIDとVideoは多分いらないでしょう。

defconfigにここだけ設定したらとりあえずカーネルを作ってみます。

単純にビルド、自分のマシンに入れる場合はmake installで良いのですが、今回はここで作成したものをHyper-V上のdebianに入れるのが最終目標なのでmake-kpkgを使います。


$ time sudo make-kpkg kernel_image


これで「linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb」みたいなカーネルのインストール用パッケージが一つ下の階層(/usr/src)に作成されます。頭のtimeはビルド時間を測る為の物。本当は--revisionとか名前は何かつけるべきなんだろうけど今回は省略(というか長い名前ついてしまってビビったのでちょっと研究してから・・・)

これを入れて早速チェックしたんですが


$ scp linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb <username>@<host>:/home/<username>


とかやって入れたいマシンにコピーして、そのマシンにつないでから


$ sudo dpkg -i linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb


とかやって入れてやるとブートローダの設定までしてくれちゃうので再起動します。

が・・・


CentOS6.4やKernel3.8+balloonの時と同じで起動メモリ以上は自動的に増えねぇ・・・orz


さーってどうすっかな・・・


VMware上のlinuxでカーネルの再構築 その1 準備編(作業ディスクの追加)

とりあえずカーネルの再構築に際して作業用ディスクを追加します。

というのも

  • カーネルの再構築には結構なディスクが必要(多分6~7GB?)
  • 再構築した後はその領域はいらない

という2つの理由から新規にワークディスクをマウントしてそこで作業します。

ちう事で、構築ネタついでにディスクを増やす方法を。

手順は以下の通り

  1. VMware playerから新規ディスクを作成、追加する
  2. Linux上からパーティションを作成する
  3. Linux上からフォーマットをする
  4. Linux上からマウントをする

~まず1から~

新規のディスク作成は簡単。

  1. 仮想マシンの設定画面から「追加」を押す
  2. 「ハードディスク」を選択
  3. 「仮想ディスクの新規作成」を選択
  4. SCSIを選択
  5. 容量を10GBにして「仮想ディスクを単一ファイルとして格納」を選択
  6. 場所を指定して作成終了。

~次は2番のパーティションの作成~

1の新規作成後に再起動してディスクを認識している事を確認。


$ sudo fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008ecd3

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    15988735     7993344   83  Linux
/dev/sda2        15990782    16775167      392193    5  Extended
/dev/sda5        15990784    16775167      392192   82  Linux swap / Solaris

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table


SCSIなのでsd[x]になっています。/dev/sdbが今回追加したものなのでこちらにパーティションを作成します。


$ sudo fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x5e5eaeb7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list codes): 83

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


これでパーティションの作成は終わり。一応確認します。


$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1


sdb1が出来ていますな。


~続いて3のフォーマットする~


$ sudo mkfs.ext4 /dev/sdb1


以上w


~最後に4のマウント~

今回は/usr/srcで作業しようと思っているのでこちらに。


$ sudo mount /dev/sdb1 /usr/src


こちらも以上!

とりあえずこれで環境が出来ましたとさ。続く!