自宅サーバの思い出 Advent Calendar 2016 11日目

この記事は「自宅サーバの思い出 Advent Calendar」11日目の記事です.
http://www.adventar.org/calendars/1587


えらいひとはいいました.「手段が目的になってはダメだ.目的の為の手段であれ」と.私と自宅サーバの関係は,常に「マルチメディアを楽しみたい」という欲求に紐付いていました.

最初の自宅サーバは「PSPに音楽を提供するためのもの」でした.
PSP用記録メディアは音楽ライブラリの総量に対して小さすぎたので,「必要に応じてパソコンから落とそう!」という発想の下,Windows上にApacheを導入して音楽ライブラリを宅内共有し,必要に応じてPSPのブラウザからダウンロードして再生したものです.

次の自宅サーバは,「スマートフォンに動画配信をするもの」でした.
大学生の時,私はPT2という録画用ボードの虜になり,録画用のサーバを東京の友人の家に置かせて貰うことで,地方住みながら東京の番組を楽しめる立場を手に入れました.しかし,生の録画データを東京からインターネット越しに転送するのは時間と負荷が掛かります.

そこで,「録画データをMPEG-4 AVCで圧縮して配信しよう!どうせ配信するなら利用しやすいPodcastにしよう!」と思いたち,野良Podcastを生成して手元のスマートフォンから再生していました.札幌は北18条の駅前で再生した「とある科学の超電磁砲」の事は今でも鮮明に覚えています.


昨今はGoogle Play MusicやVoDサービスの充実のお陰で自宅サーバが頑張る領域も少なくなりましたが,それでもメインのデスクトップ機を一台つけておいて,必要に応じて外部から接続して利用しています.「各種権利関係上外部に投げたくないデータ」や「ストレージ・CPUリソースを食い潰すサービス」等は自宅で処理する優位性があるから良いですね.


まとめとして,「自宅サーバ」なんて大仰な名前ですが,やっている事はPCの大先生業務そのものです.みんなもっと気軽に自宅サーバを動かして,自己満足なサービスを楽しみましょう.

Gentoo Advent Calendar 4日目 「portageで使うコンパイラとかそんな感じの話」

http://www.adventar.org/calendars/1493
この記事は,Gentoo Advent Calendar 2016 4日目の記事です.


記事のあらまし:Gentoo/Linuxでは,portageのCC/CXXにgcc/g++以外も利用できるよ!でも一部のパッケージはgcc/g++以外のコンパイラだとビルドに失敗するから注意な!*1


Gentoo/Linuxを利用している皆さんは,その仕組み上,他の人よりも多くのコンパイルを行うでしょう.Gentoo/Linuxは,以下に示すように複数のC/C++コンパイラをパッケージとして提供しています.

  • sys-devel/gcc
  • sys-devel/clang
  • dev-lang/icc

Gentoo/LinuxのデフォルトのCC/CXXはgcc/g++です.しかし,ビルド速度や実行速度の面から別のコンパイラを試してみたいと思うこともあるでしょう.

Gentoo/Linuxでは,gcc/g++以外をデフォルトのコンパイラとして利用できます.設定はわずか3ステップです.

  • make.confに環境変数CC/CXXをセットする(下2つビルド失敗時のフォールバック用の作業)
  • 環境変数CC/CXXをgcc/g++とする記述を /etc/portage/env/compiler-gcc という名前で保存
  • ビルドに失敗したパッケージに対して,compiler-gccを参照してCC/CXXをgcc/g++にするよう /etc/portage/package.env に記述

具体的な記述方法は,以下のURLを参照してください.
https://wiki.gentoo.org/wiki/Clang#Setting_up_GCC_fallback_environments

暫くシステムのCC/CXXをclang/clang++にして生活した結果,体感ではだいたいのパッケージが問題なくビルドできています.しかし,一部のパッケージはビルドに失敗しました.以下,package.envを眺めながら「ビルドに失敗したパッケージとその原因」を列挙します.

  • sys-devel/gcc

gccをclangでビルドしようとすると盛大に失敗します.仕方ないね.
追記:追試したらclang-3.7.1でgcc-4.9.3のビルドに成功した.

単純にコンパイラのバージョンチェックで失敗しました.clangのバージョン数が上がっていけば解決するのだろうか.

Sorry, but gcc-4.4 and earlier won't work for libreoffice-bin package (see bug #387515).

  • app-text/aspell

何も言わずにこける.clang側で非対応なGCC拡張でも利用しているのだろうか.

OpenMP compatible compilerを使え」と怒られてabortしてしまった.何も考えずにgccにフォールバックしたが,OpenMP対応を追加してビルドしなおせばclangでも通りそう.




特に山もオチも無い記事でしたが,あなたもコンパイラを変えて装い新たなGentoo/Linuxを使ってみませんか?*2

*1: 走り書きを検証する元気と時間がない

*2: 特にICC

CloudStack Advent Calendar 17日目

この記事はCloudStack Advent Calendar17日目の内容です.

CloudStackは導入も容易で高機能という大変便利な仮想化基盤で,個人や研究室などの小規模な集団にも多く導入され利用されています.


一方でこれらが設置されている環境は,例えば大学や企業は法定停電など,個人宅ではそれこそ模様替えしたい気分などといった理由で,一時的に停止したいという欲求に直面することがあるでしょう.それらに対応するために,一撃でCloudStackを落として,しかる後に復旧できるようなスクリプトが欲しいですよね?

ということで,CloudStack上のVMやCloudStack自体をサスペンドしてホストOSの電源切断を行い,次回起動後に復旧するような作っていました.

ええと…

ごめんなさい遅れますorz

今後もiPhoneで即時にメールを受け取る方法

2013 / 1 / 30 以降は、GoogleGmailサービスへのExchange(Microsoftのメール技術)経由の接続が追加出来なくなり、Direct Pushと言われていた所謂iPhone等へのメールのプッシュ通知を新しいデバイスに設定出来なくなりました*1。今後はGmailiPhone等で使う場合は、通常の定期的なメール確認機能しか利用できません。


しかしあの即時性に慣れ親しんた人はどうしてもあの通知を利用したいと思う事でしょう。そんな人の為に、今後も同じようなプッシュ通知を利用する方法を纏めました。

  • Hotmailのアカウントを取得

何でGmailなののHotmail?と思われるかもしれませんが、とにもかくにもHotmailのアカウントを取得してください。このHotmailアカウントは他の人に教える必要は無いので、好きなアドレスを取得して貰って構いません。

iPhoneの設定→メール→アカウントの追加 から上で作ったHotmailのアカウントを追加してください。追加が終わったら、Hotmailの設定で「プッシュするメールフォルダ」の項目がある事を確認してください。実は、HotmailGmailが使っていたプッシュの技術と同じ技術を使っているので、今までGmailで使っていたプッシュ機能と同等の物を利用出来るのです。

仕上げに、ブラウザでGmailを開き、右上の歯車アイコンから設定を開いて、「メール転送と POP/IMAP」の一番上の「転送先アドレスを追加」で、さっき作成したHotmailのアドレスを転送先に指定してください。するとGmailからHotmailのアドレスにメールが届いていて、転送を許可するための確認のURLとPINコードが記述されているので、それをクリックして転送設定を完了してください。


おめでとうございます!これでGmailに届いたメールは全て自動的にHotmailに転送され、Hotmail側から自動でプッシュされる様になりました!同じようにGmailもセットアップしておけば、Hotmailはプッシュ通知での確認用、Gmailは返信用にと使い分ける事が出来ます。

*1:既に設定済みのデバイスでは今しばらくは問題なく動作します

2012 mikutterアドベントカレンダー 16日め「Androidでもておくれたい!」

この記事はmikutterアドベントカレンダー( http://atnd.org/events/33911 )の16日目の記事として書かれました。

前の日はkudzu_naokiさん( http://d.hatena.ne.jp/kudzu_naoki/20121215/1355501867 )
次の日は@iorivur (http://twitter.com/iorivur) さんです。


ナイスておくれ!(挨拶)。ということでmikutter アドベントカレンダー16日目。表題のとおり「Androidでもておくれたい!」

  • そもそものきっかけ

としぁさんのこんなついーとが元々のきっかけでした。

"スマートフォンでmikutter使いたいとか言ってるやつは大丈夫。一般人だ。スマートフォンでmikutterを使ってるやつは万が一見つけたらすぐに逃げろ。"
https://twitter.com/toshi_a/status/207478242230276099


ということで、スマートフォンでmikutterを使ってとしぁさんをビビらせたい!それには何が必要か?と言う事で、一番楽そうな方法を検討した結果、「Android上でUbuntuを動かしてその上でmikutterを走らせ、そこにVNC接続する」という方法に落ち着きました。

  • 必要なものと操作
  1. root権限を自由に行使できるAndroid端末
  2. 壊れてもいい気分で使えるSDカード
  3. 無線LANでのローカルIPアドレス
    • イメージのダウンロード

Linux on Androidのサイト( http://sourceforge.net/projects/linuxonandroid/files/Ubuntu/12.04/full/ ) からダウンロードして展開し、(後の手間を省くために)SDカードの直下に展開したフォルダをコピーする。

    • 起動用アプリのインストール

Complete Linux installer ( https://play.google.com/store/apps/details?id=com.zpwebsites.linuxonandroid&hl=ja ) をインストールし、Install GuideでUbuntu 12 Install Guideを進める。イメージは上でコピーしているので、VNC ViewerとTerminal Appを導入するのみで終了する。

    • 起動用設定を追加&起動

上のComplete Linux Installerの右下「Launch」メニューを選び、Androidの設定ボタンからAddを選び、設定のラベルとコピーしたAndroidのファイルパスを入力する。この際、SDカードのパスはAndroidの端末ごとにバラバラで非常にわかりづらいので、ファイルマネージャ等で確認して入力する事をお勧めする。

追加が終了したら、上から設定したラベルを選択して「Start Linux」を選択する。

    • 起動時の確認と設定。

起動すると、パスワードとSSH/VNCの起動確認、VNCの画面解像度を問われるので入力していく。SSH/VNCともに友好にする。それが終わったら、Ubuntuのrootプロンプトに落ちる。

ここで、起動時にパスワードを聞かれて設定するのだが、そのパスワードを利用してSSH接続しようとしても失敗する異があるので、一度プロンプトからrootパスワードを変更する。そして、SSH接続のためにifconfigでIPアドレスを確認する。

    • mikutterの起動

ここからの作業は、別端末からSSH越しに実行する事を推奨する。基本的に一般のUbuntu 12.04と等しいので、

apt-get install subversion
svn co svn://mikutter.hachune.net/mikutter/trunk

で最新版を取得し、READMEにしたがって

apt-get install ruby1.9.1 ruby-gnome2 libnotify-bin

で環境を作る。後はAndroid端末からローカルにVNC接続をし、(実は設定諸々の作業より一番頑張る必要がある作業であるが)頑張ってターミナルを開き、mikutterを起動する。PCからVNCでmikutterを起動しておいて、Android端末でもその画面に接続すると楽である。

ruby1.9.1 mikutter.rb


以下がHTC Desire HD上で実際に動作している画像。
http://twitter.yfrog.com/odlmyeij

  • 終わりに

実はGentooを同じようにchrootした環境にセットアップするという方法もある( http://www.tabletroms.com/forums/adam-rom-development/2282-gentoo-chroot-step-step-instructions.html )様なので、ておくれな諸兄は試してみてはいかがだろうか。れっつておくれ!

AndroidでGmailを即時受信する方法

個人的メモ。手持ちの端末で試せる範囲は試したのですが全ての端末で可能かは保証しません。以下暫く能書きなので設定だけを知りたい人はスクロール推奨。


Android端末を利用する際、Googleアカウントと紐付けされてGoogle Playストア等を利用するので、大概の人はGmailアカウントを持っていて、プリインストールの標準Gmailアプリを利用しているかと思いますが、これがまた同期が遅い。


iPhoneGmailを使う際には敢えてMicrosoft Exchangeに見立てて設定する事により、Direct Pushを用いた強力なプッシュ通知を行うテクニックが広く出回っていますし、僕自身もiPhone4やiPod touchでその強力なプッシュ通知の恩恵を受けています。しかし、Googleのお膝元であるはずのAndroidで同等な事が出来ない筈がないと思って調べてみましたが、同等の事を纏めた記事が見当たらなかったので纏めました。

設定方法

まずPCからGmailにログインして、設定でIMAPアクセスを有効にしておいてください。


Androidの設定→アカウントと同期(〜2.3) または アカウントを追加(4.0〜)を選択。アカウントの種類で「コーポレート」を選んで自分のGmailアカウントとパスワードを設定。


その次のサーバー設定の所で、サーバーがgmail.comになっているのをm.google.comに変更して次へ。


新着メール自動確認が「自動(プッシュ)」になっている事を確認したら、その後の設定はお好みで。


以上で、設定は終了。これでGmailの通知がほぼリアルタイムに来る様になります。


以下余談。


古いものではIS06やF-12Cから、新しい物ならGalaxy NexusMotorola XOOMまで試して上手くいったので多分いい感じに通知してくれると思う一方、HTC Evoや同Evo 3Dにはそもそもアカウント追加の所に「コーポレート」が存在しなかったので設定が不可能だった。端末によってはそのような場合もある模様。というかAndroid2.2の頃からこんな便利なやり方があったのに気付かなかった自分情弱すぎフッフゥ…


何となく見てたらHotmailも同様の設定でPush通知出来るっぽい。便利なもんだ。

Kernel/VM Advent Calender 2011 1日目

今年もKernel/VM Advent Calenderの季節がやってまいりました。一日目担当のkamiyaです。


今年は個人的にはバックアップ回りで色々と苦労した年だったので、Kernel/VMVMに多少引っかかればいいなと思いつつも「VMware vSphere Hypervisorでの、自動無停止バックアップ」についてのネタを以下に書きます。


環境

  • ネットワークに繋がったVMware vSphere Hypervisorのマシン(バージョンは3.5/4.0/4.1で確認)
  • 適当なLinuxマシン


普段ESXiを使っている場合でもvSphere Clientを使っている場合はなかなか意識されませんが、vSphereはホストに色々なコマンドを用意しています。今回はこれらのコマンドを活用して、ホストしている仮想マシンを、再度デプロイ可能なVMwareのイメージ形式にして外部のサーバにバックアップを取る手順を紹介します。


vSphereにはsshクライアントもcronもありません。しかし、公開鍵方式に対応したsshdはあります。なので、外部のLinuxサーバから、sshdを経由してバックアップコマンドを呼び出し、scpで転送するという方針の下で話を進めます。


まずは、vSphere Hypervisorをインストールして、メニューからsshdを有効化しておきます。古いESXi Hypervisorをお使いの場合はunsupportedで有効化してください。


vSphereのsshdが利用する公開鍵は、vSphere 4.xまでは /.ssh/authorized_keys vSphere 5からは /etc/ssh/keys-root/authorized_keys となっています。これらは、ホストの再起動で消えてしまう場合があるので注意してください。


Linuxマシンのcronから自動でコマンドを実行する為に、空のパスワードの鍵ペアを作成します。奪取されるとvSphereのホストに対して任意のコマンドを実行出来てしまうので、取扱いには注意してください。


以上が前準備です。


vSphereは(というかVMware製品は)、スナップショットという便利な機能を備えていて、スナップショット取得時以降を差分として保持し、いつでも巻き戻せる様になっています。そして、仮想ディスクイメージファイル(.vmdk)はロックされていますが、スナップショットを取得したら、その時点までの部分に対するイメージのロックが外れ、バックアップを取ることが可能になります。以下に実際に利用しているバックアップ用スクリプトを掲載します。



#!/bin/bash
# ターゲットのVMIDを確認するためにはvSphereホストで "vim-cmd vmsvc/getallvms" を実行
# 下のESXI_HOSTとVMIDを入れたら多分動く

ESXI_HOST=
VMID=

# 仮想マシンの名前を取得
TARGET=`ssh root@$ESXI_HOST vim-cmd vmsvc/getallvms | grep $VMID | awk '{print $2}'`

# 仮想ディスクイメージの実際の名前(.vmdk)を取得
IMAGE=`ssh root@$ESXI_HOST ls -la /vmfs/volumes/datastore1/$TARGET/ | grep vmdk | grep -v flat | awk '{print $9}' | sed s/\.vmdk//`

# バックアップ用に名前の重複しないディレクトリを作るために宣言
BACKUP_DIR=BACKUP_${TARGET}

# フォルダを作って、VMイメージのメタデータをコピーしておく
ssh root@$ESXI_HOST mkdir -p /vmfs/volumes/datastore1/${BACKUP_DIR}/
ssh root@$ESXI_HOST cp /vmfs/volumes/datastore1/$TARGET/*.vmx /vmfs/volumes/datastore1/${BACKUP_DIR}/
ssh root@$ESXI_HOST cp /vmfs/volumes/datastore1/$TARGET/*.vmsd /vmfs/volumes/datastore1/${BACKUP_DIR}/
ssh root@$ESXI_HOST cp /vmfs/volumes/datastore1/$TARGET/*.vmxf /vmfs/volumes/datastore1/${BACKUP_DIR}/

# スナップショットを作成
ssh root@$ESXI_HOST vim-cmd vmsvc/snapshot.create $VMID Backup

# スナップショット時点までの仮想HDDイメージを作成
# 実際に利用している領域分のみのイメージを作る
ssh root@$ESXI_HOST vmkfstools -i /vmfs/volumes/datastore1/${TARGET}/${IMAGE}.vmdk -d monosparse /vmfs/volumes/datastore1/${BACKUP_DIR}/${IMAGE}_thin.vmdk

# スナップショットを削除
ssh root@$ESXI_HOST vim-cmd vmsvc/snapshot.remove $VMID

# Linuxマシンに転送
mkdir /var/backup/esxi/$TARGET/
scp -r root@$ESXI_HOST:/vmfs/volumes/datastore1/${BACKUP_DIR}/ /var/backup/esxi/$TARGET/

# vSphere側にあるイメージファイル達を削除
ssh root@$ESXI_HOST rm -rf /vmfs/volumes/datastore1/${BACKUP_DIR}


以上の流れで、vSphere 3.5〜5.0までの全てで動作を止める事なく仮想マシンのバックアップを取る事が出来ます。ちなみに復元する場合は、復元する先のvSphereホストにバックアップを取ったイメージやメタファイル一式を転送した上で、


vmkfstools -i image_thin.vmdk -d thin image.vmdk


として元のイメージファイルサイズに戻した上で、vSphere Clientからデータストアを参照し、メタデータを選択してインベントリに追加することで普段通りに利用できます。(復元は3.5/4.0/4.1/5.0のバックアップを5.0上で復元する物しか試していませんが…)


もしインベントリに追加した後に起動で失敗する場合は、vmxファイル内で記述されているディスクイメージと展開した後のディスクイメージが同一であるか確認してください。また場合によってはファイルをコピー/移動したかの確認が入る事もありますので、その場合は「I copied it」等を選択してください。


# 来年はKVMで似たようなバックアップネタを書きたい orz