uehatsu (2012年7月12日 03:53)

uehatsu こと上野 初仁(うえの はつひと)です。

今まで、ueno@DirectX.tv名義でブログなど発信していましたが、今後はこのuehatsu.info上にて色々な事を発信していこうと思います。

これまでの内容はもちろん、ライフログや技術系の情報をまとめて行きます。

2013年4月1日よりワンダーツー株式会社に正式に参加する事となりました。今後もオウンドメディアとして、このuehatsu.infoを活用してまいります。

Perl, PHP, JavaScriptなどのWebプログラミングを始め、ネットワーク周りの下位レイヤーから、Linux、Windows、MacOS Xなどのプラットフォーム、Apache、MySQLなどのミドルウェア、Movable TypeやWord PressなどのBlog and CMS周りもやっています。

今後ともよろしくお願いいたします。

Twitter : @uehatsu
Skype Name : uehatsu
ニコ生コミュニティ : uehatsu.info

uehatsu (2017年4月25日 15:15)

【2017/04/26 01:17 追記】

本格運用されたい方は外付けHDDをUSBでつないで、swap領域をそちらに逃がしてください。

【2017/04/25 19:18 追記】

今回利用したのはRaspberry Pi 2B 1Gです。3Bならもう少し速く使えるかも。


さて、横浜鯖管理人のHatsuhito UENOことuehatsuです。先日からmastodonにはまってます。このゆるさがいいですね。

昨晩ふと思い立ってRaspberry Piにmastodonを立ち上げて見ましたので簡単にまとめます。

1. Raspbianをインストール

いろいろとサイトがあるので見てインストールしてください。

2. Dockerをインストール

$ curl -sSL https://get.docker.com/ | sh
$ sudo systemctl start docker
$ sudo usermod -aG docker pi

3. docker-composeをインストール

以下のサイトを参考にしました。Raspberry Pi用のdocker-composeをDockerイメージで配布してくださっています。

https://hub.docker.com/r/t0rx/rpi-docker-compose/

$ curl -L https://github.com/docker/compose/releases/download/1.7.1/run.sh > docker-compose
$ sudo mv docker-compose /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo vi /usr/local/bin/docker-compose
===== IMAGE行を以下に書き換え =====
IMAGE="t0rx/rpi-docker-compose:latest"
===== IMAGE行を以上に書き換え =====
$ docker-compose --version
↑イメージのダウンロードなどが始まりしばらくするとバージョンが表示されます

4. rpi-mastodonをgit clone

$ cd /var/lib/
$ sudo git clone https://github.com/gilir/rpi-mastodon.git
$ cd rpi-mastodon

5. rpi-mastodonの初期設定

$ sudo cp .env.production.sample .env.production
$ vi .env.production
↑よしなに編集

6. テスト起動

念のためテスト起動してみる

$ sudo docker-compose up -d

ここで色々とエラーがでるので、表示の通りに実行する。
何度か繰り返すと無事に起動する。docker-compose buildはする必要はない。

7. rake secretの実行

$ sudo docker-compose run --rm web rake secret

3回繰り返し、その結果を PAPERCLIP_SECRET, SECRET_KEY_BASE, OTP_SECRET に(この辺は普通のmastodonと変わらないので省略)

8. もう一度起動 & swap領域の拡張

$ sudo docker-compose stop
$ sudo docker-compose up -d

ここでメモリーが足りないことに気づいたのでswapを増やしておく。このswapの場所がSDカード上のため読み書きが頻発しSDカードの寿命を縮める事に。本格運用するなら外付けHDDなどに置く必要があるかも。ここを参照にした → http://qapla.blog52.fc2.com/blog-entry-296.html

$ sudo docker-compose stop
$ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            102396  0       -1
$ sudo systemctl stop dphys-swapfile
$ sudo vi /etc/dphys-swapfile
=====
CONF_SWAPSIZE=1024
=====
$ sudo systemctl start dphys-swapfile
(しばらく時間かかる)
$ swapon -s
Filename                                Type            Size    Used    Priority
/var/swap                               file            1048572 0       -1
$ sudo docker-compose up -d

9. もろもろ

$ sudo docker-compose run --rm web rails db:migrate
$ sudo docker-compose run --rm web rails assets:precompile

10. nginxのインストール

SSL証明書はとりあえずオレオレ証明書を使いました。いろいろ検索すれば出てきますので省略。

$ sudo apt-get install nginx
$ vi /etc/nginx/conf.d/mastodon.conf 

https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md に書いてあるnginxの設定ファイルを書き換えて使いました。このまま使うとアセットが表示されないので以下の修正をしています。ホスト名は rpi.mastodon.local にしました。

  location /assets {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }

11. nginxの起動

$ sudo systemctl start nginx

これでブラウザからアクセスすると表示されました。

95b9016a3b3861b8.jpeg

cronの設定などは同じなので省略。
この時点で投稿は出来るようになりますが、メールの送信ができないので以下の方法でユーザーを強引に登録します。

$ sudo docker-compose run --rm web rails mastodon:confirm_email USER_EMAIL={登録したメールアドレス}



ついでにadminの設定もしておきます

$ sudo docker-compose run --rm web rails mastodon:make_admin USERNAME={登録したユーザー名}

これでお一人様インスタンスは完成です。自宅ネットワークからだとFWの問題などあって外部とは繫がりません。それ以上の事は自宅サーバの立ち上げ方なので省略します。


こんな感じでインスタンスがRaspberry Piに立ち上がりました。自宅で眠っているRaspberry Piがあったら立ち上げて見るのも面白いかもしれません。docker-compose buildをするにはハードルがまだまだ高いので、自分はこのあたりで手を引く予定ですw


私の所属している会社 アルカセット・コンサルティング株式会社 ではECサイトを一緒に作ってくれるエンジニアを募集中です。気になったかたは以下にメンションかDMを送ってください。

mastodon : @uehatsu@mastodon.yokohama

twitter : @uehatsu


uehatsu (2015年12月18日 00:00)

これは Movable Type Advent Calendar 2015 の18日目の記事です。

先月末に開催された MTDDC Meetup TOKYO 2015 に参加してきました。色々なセッションがあり大変面白かったです。コミュニティがプロダクトを盛り上げている感がダイレクトに伝わってきて、今後のMovable Typeの展望みたいな物も参加者の方々と話せたのが自分にとっての良い経験になりました。
特に野田さんの発表は興味深く聞かせて頂きました。自分もほぼ同意の発表内容でしたが、プラグインで解決してしまうと自分が居なくなった後プロジェクトの負の遺産になる事を考えて、できる事はMTMLで済ませてしまっています。これはPerlプログラマが圧倒的に市場に足りていないという事と、継続的インテグレーションの中にMTのプラグインを入れてしまって良いかという宗教論的な部分も含んできてしまいます。ここではこの程度で終わらせます。

さて、今回はMT6の目玉とも言えるDataAPIについて書きたいと思います。先日MT Liveにて「AWSネタとDataAPIネタならどっちがいいですかね?」とSix ApartのS女史に聞いたところ、食い気味に「DataAPIっしょ」と返ってきたので、問答無用でDataAPIネタとなりましたw

まずはMTのプラグイン作成のTipsですが、こちらは私がSix Apart在籍中にまとめたドキュメントを読んで頂ければと思います。

Movable Type 開発者向けガイド - プラグイン開発ガイド

DataAPIの拡張プラグインを書くためのドキュメントはSix Apart公式の物が無いようです。自分は藤本壱さんのドキュメントを読んで勉強しました。いつも参考にさせて頂いております、ありがとうございますm(_ _)m

Data APIを使ってみる(その5) - The blog of H.Fujimoto

藤本さんも書かれていますが、config.yamlの書き方からおさらいしたいと思います。

1. config.yamlの書き方

YAMLに書くのは applications: > data_api: > endpoints: 以下になります。以下は今回の例です。

applications:
  data_api:
    endpoints:
      - id: get_hot_entries
        route: /sites/:site_id/hot-entries
        verb: GET
        version: 2
        handler: $DataAPIHotEntriesLite::DataAPIHotEntriesLite::EndPoint::HotEntries::get_hot_entries
        requires_login: 0

ここで、endpoints: 以下の要素は以下のような物を指しています。

キー内容
id エンドポイントのID
routes エンドポイントのURIのうちmt-data-api.cgi/vn以降
verb GET, POST, PUT, DELETE(HTTPのプロトコル)
version APIのバージョン
handler エンドポイントを処理する関数(ハンドラ)
requires_login ログインが必要なら1、不必要なら0

(1) id

idはエンドポイントのIDを示します。他のエンドポイントと同じ物を付けないように気を付けましょう。

(2) routes

例えば標準で実装されている get_category のroutesは以下の様になります。

/sites/:site_id/categories/:category_id

これは":site_id(ブログ、ウェブサイトのID)"と":category_id(カテゴリーID)"を指定してエンドポイントを呼び出す事になります。

実際のURIは以下のようになります。

http://www.example.com/cgi-bin/mt/mt-data-api.cgi/v2/sites/2/categories/15

ここでは:site_idを2、:category_idを15で呼び出したことになります。REST APIの標準の呼び出し方ですね。

(3) verb

HTTPプロトコルでGETやPOST、PUT、DELETEによってエンドポイントの挙動を換える事ができます。例えばGETやPOSTでは情報の取得、PUTでは作成や更新、DELETEでは削除といった風にです。最初はGETだけ指定し、必要ならPOSTを使う程度に考えておけば良いでしょう。

(4) version

DataAPIのバージョンを指定します。MT 6.2.2でのDataAPIのバージョンは3ですが、基本上位互換ですのでversionに2を指定すると、3以降でも利用出来るようになっています。私は通常2を指定するようにしています。

2を指定したら

http://www.example.com/cgi-bin/mt/mt-data-api.cgi/v2/sites/2/categories/15

3を指定したら

http://www.example.com/cgi-bin/mt/mt-data-api.cgi/v3/sites/2/categories/15

のように、mt-data-api.cgiの後に"/v2/"や"/v3/"として指定することになります。

(5) handler

エンドポイントを処理する関数(ハンドラ)を指定します。ここはプラグイン開発では基本ですね。

最初に上げた例では以下のように指定しました。

handler: $DataAPIHotEntriesLite::DataAPIHotEntriesLite::EndPoint::HotEntries::get_hot_entries

$(プラグイン名)::(モジュール名)::(関数名)という形で指定します。

(6) requires_login

エンドポイントを呼ぶのにログインが必要かどうかを指定します。単純なGETであればログインは必要ないので"0"を指定すれば良いでしょう。逆に外部のユーザーが閲覧できないような情報を扱ったり、情報を更新したりする場合はログインが必要ですので"1"を指定しましょう。

2. ハンドラの書き方

非常に単純化して書くと以下のようになります。

package DataAPIHotEntriesLite::EndPoint::HotEntries;
use strict;

use MT::DataAPI::Endpoint::Common;
use MT::DataAPI::Resource;

sub get_hot_entries {
    my ($app, $endpoint) = @_;

    my ( $blog ) = context_objects(@_) or return;

    my $ret_val;

    (do something...)

    return $ret_val;
}

1;

ハンドラは $app と $endpoint を値として取ります。

context_objects(@_) を呼ぶと、routesで指定したリソースを返します。ここでは"/sites/:site_id/hot-entries"とroutesを指定していると想定しているので、返ってくるのは":site_id"に紐付いたオブジェクトです。ここではブログ、もしくはウェブサイトのオブジェクトが返ってきます。

":foobar_id"とした場合は、"foobar"が返ってきます。これはリソースといって基本的な物は標準で用意されていますが、用意されていないリソースをroutesに指定したい場合は、別途リソースを追加する必要があります。詳しくは藤本さんのドキュメントを参考にしてみてください。

例えば、リソースを複数指定したとします。

/sites/:site_id/categories/:category_id

この場合、以下のように context_objects(@_) を記述します。

my ( $blog, $category ) = context_objects(@_) or return;

このように、用意されているリソースについては context_objects(@_) を呼ぶだけで簡単に取得できます。便利ですね。

:site_id で指定されたブログ・ウェブサイトが存在しない場合は404エラーが、それ以外の context_objects(@_) が失敗した場合は単純にreturnしていますが、これで500エラーとなります。そのあたりもDataAPIがよしなに動いてくれるのであまり悩まされる事はありません。

必要な処理を行って情報を収集し、$ret_valの中に格納。それをreturnすると自動的にJSONが構築され呼び出し元に返されます。
少し言い換えると$ret_valは配列やハッシュ、もしくは配列のハッシュや、ハッシュの配列など自由に構築でき、MT::Util::to_json()を経由してJSONとして書き出されます。

3. 少し進んだ使い方

特に requires_login を1にしたときに必要となるのが、ブログやウェブサイト、その他のオブジェクトへの権限です。

例えばファイルをアップロードする処理を行う場合に権限も無いのにアップロードできてしまったら、セキュリティホールになります。その当たりは気を付けて自分でふさぐ必要があります。

例えばアセットの情報を取得する処理をする場合、以下のようにすることになります。

package DataAPIAssetInfo::EndPoint::Asset;
use strict;

use MT::DataAPI::Endpoint::Common;
use MT::DataAPI::Endpoint::Asset;
use MT::DataAPI::Resource;

sub get_asset_info {
    my ($app, $endpoint) = @_;

    return $app->error(403) unless $app->can_do('upload');

    my ( $blog, $asset ) = context_objects(@_) or return;

    run_permission_filter( $app, 'data_api_view_permission_filter',
        'asset', $asset->id, obj_promise($asset)) or return;

    (do something...)

    return { item => $asset };
}

1;

$app->can_do('upload') をチェックすると、そのユーザーがアップロードする許可があるか確認します。許可が無い場合は403エラーを返しています。ここでは単純化のために「最低でもユーザーがアップロード権限を持っていること」としました。

その後、run_permission_filter() を呼んで、ログインしているユーザーがそのアセットの閲覧権限があるかを確認します。権限が無い場合500エラーとなります。

run_permission_filter() は少し難しくなりますのでさわり程度とします。MTのソースから permission_filter を検索してこの辺りで何をやっているか追ってみるのも良いでしょう。

4. プラグイン開発

今回、この記事を書くにあたって DataAPIHotEntriesLite というプラグインを書きました。

https://github.com/uehatsu/mt-plugin-data-api-hot-entries-lite

Google Analytics連携のされているブログの人気記事ランキング(過去7日分の集計)をリアルタイムに取得します。このエンドポイントにアクセスするとGAのAPIにアクセスしに行くので、最悪の場合API上限に達する可能性があります。アクセスの多いブログなどに設置する場合、それらの事を認識した上で配置をお願いします。このプラグインは今後機能を充実させて行く予定です。

エンドポイント例:
https://uehatsu.info/cgi-bin/mt/mt-data-api.cgi/v2/sites/3/hot-entries

5. まとめ

DataAPIはそれ自体の活用事例はいくつか出てきました。MT for iOS 愛用してます ;-)

そろそろDataAPI拡張の事例が出てきても良いのではないかと考え、今回このエントリーをまとめてみました。皆でDataAPI拡張プラグインを書いてみませんか?(^^)ノシ

Movable Type 6 本格活用ガイドブック (Web Designing BOOKS)
Movable Type 6 本格活用ガイドブック (Web Designing BOOKS) 藤本 壱 柳谷 真志 奥脇 知宏 シックス・アパート株式会社

マイナビ 2013-11-30
売り上げランキング : 133328


Amazonで詳しく見る
by G-Tools
uehatsu (2015年11月24日 16:26)

CentOSを新規インストールする度に、Vimで自動コメントアウトの設定がイキになってしまうのでオフにする。

基本Vimの設定はいじりたくないのですが、これだけは毎回変更してます。Webの情報などからコピペするとコメントがだーっと続いてしまい、それを後から削除するのはもうすごい手間がかかる。正直面倒くさい。

ネットを調べると、~/.vim/after/plugin/ 以下に設定ファイルを作成して読み込ませるのが良いとある。その通りにやってみる。

$ mkdir -p ~/.vim/after/plugin
$ vi ~/.vim/after/plugin/common-settings.vim

内容はこう。

autocmd Filetype * set formatoptions-=ro

しかしうまくいかない。

以下のように設定を2行に分けて書いたら動きました。理由は分からず。

autocmd Filetype * set formatoptions-=r
autocmd Filetype * set formatoptions-=o

ひとまず良しとしましょう。

uehatsu (2015年11月13日 13:18)

Debianをほとんど使ったことのない上野です。ちょっと仕事で使う事になったので色々と調べています。DataAPIを使える様にしたかったのですが動かず、手間取ってしまったのでログを残しておきます。

普通にnginxとfcgiwrap, spawn-fcgiをインストールします。(MySQLとかもインストールしますが、ここでは割愛)

$ sudo apt-get install nginx fcgiwrap spawn-fcgi

ここで設定ですが、nginxをちょっとうまく設定してやらないとfcgiwrap側にPATH_INFOが渡らない。

    location / {
        access_log  /var/log/nginx/foobar.access.log;
        error_log   /var/log/nginx/foobar.error.log;

        index index.cgi index.html;

        location ~ \.cgi(/|$) {
            gzip off;
            fastcgi_index index.cgi;
            fastcgi_split_path_info ^(.+?\.cgi)(/.*)$;
            if (!-e $document_root$fastcgi_script_name) {
                return 404;
            }
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $fastcgi_path_info;
            fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }
    }

SCRIPT_FILENAME の設定が2回ありますが、この2行でfastcgi_paramsのincludeを挟んでやらないと、うまくパラメーターが上書きできず403エラーが返ってきてしまいます。そのエラーも単に"403"と返ってくるだけ。整形もなにもされていません、たったの3バイト。仕方が無いので2行書いています。
前だけでも、後ろだけでもダメ。Debianのメーリングリストに同様の問題が報告されていたので、バグかなと思いますが、それ以上は追っていません。動いたし(苦笑)

ともかくこれで動くようになりました。めでたし、めでたし(^^)

Movable Type 6 本格活用ガイドブック (Web Designing BOOKS)
Movable Type 6 本格活用ガイドブック (Web Designing BOOKS) 藤本 壱 柳谷 真志 奥脇 知宏 シックス・アパート株式会社

マイナビ 2013-11-30
売り上げランキング : 133328


Amazonで詳しく見る
by G-Tools
uehatsu (2015年9月16日 17:00)

Atomエディタを使っていて、やはりVimモードは必要だということで、毎回インストールするんですが検索かけるのも面倒なので簡単まとめ。

1. 以下からダウンロードして、Atom をインストール

 https://atom.io/

2. Atom Shell をインストール

 1) Atom を起動

 2) メニュー > Atom > Install Shell Commands

3. ターミナルから以下を実行

$ apm install vim-mode
$ apm install ex-mode

4. Atom を再起動

これで Vimっぽく使えるようになります。

今まで ex-mode をインストールしていなかったので、":w"などのコマンドが使えませんでしたが、使えるようになりました。いやぁ、知らなかった。

もちろん全部の機能が使えるわけではありませんが、今の所十分かなと思います。

*日本語を使うなら以下を設定しておいたほうが良いかも。

$ apm install japanese-wrap

メニュー > Atom > Preferences... > Settings

✔︎ Soft Wrap
✔︎ Soft Wrap At Preferred Line Length

設定後再起動

ViIMproved‐Vim完全バイブル
ViIMproved‐Vim完全バイブル Steve Oualline 高橋 則利

技術評論社 2004-05
売り上げランキング : 295389


Amazonで詳しく見る
by G-Tools
uehatsu (2015年8月26日 17:04)

ちょっと案件で分からない事があったのでMT Liveにお邪魔しています。MT Liveとは「シックス・アパートのエンジニアや、Movable Type に詳しい人たちが、コワーキングスペースに集まります。MTについてちょっと質問したい、実際に画面見せたり、話したりしながら教えてもらいたい、という方はぜひお立ち寄りください。(Facebookのイベントページより)」というイベント。毎月第2・第4水曜日にやってます、もしよろしければ。

MT Live 紹介ページ(シックス・アパート ブログ)

で、今日聞きたかったことは「Movable Typeであるオブジェクトを保存する時に、そのオブジェクトに紐付けられているカスタムフィールドが画像であった場合、その画像にたいしてゴニョゴニョする」というもの。

まず自分でやって失敗した方法がこちら。

1. pre_saveかpost_saveでフック

2. $obj->meta()でmeta情報のhashを取得

3. meta情報のhashからカスタムフィールドのbasenameを取得(hashのkeyが"field.hogehoge")となる

4. MT::Metaのmetadata_by_nameでmeta情報を取得

my $field = "field." . $meta_basename;
my $class = MT->model('entry');
my $meta = MT::Meta->metadata_by_name( $class, $field );

5. meta情報のtypeを取得

my $type = $meta->{type};

ただしこれでtypeをとると"vclob"とだけ返ってきて画像かどうかはわからない。残念。

で、今日MT Liveで高山さんに聞いたところ4.以降をこうすると良いと聞く。

4. CustomFields::Field からカスタムフィールド情報を取得

my ($field_obj) = MT->model('field')->search({
blog_id => $blog_id,
basename => $meta_basename,
});

5. カスタムフィールド情報のtypeを取得

my $type = $field_obj->type();

これで$typeに"image"が格納されていたら、このカスタムフィールドは画像!!

自分で悩んでいたら解決できませんでした。

結論:MT Liveで疑問を解決!!

皆さんも是非!!!

Movable Type 6 本格活用ガイドブック (Web Designing BOOKS)
Movable Type 6 本格活用ガイドブック (Web Designing BOOKS) 藤本 壱 柳谷 真志 奥脇 知宏 シックス・アパート株式会社

マイナビ 2013-11-30
売り上げランキング : 133328


Amazonで詳しく見る
by G-Tools
uehatsu (2015年8月20日 22:45)

もういい加減毎回調べるのは面倒なのでメモw

1. Gmailの二段階認証用のアプリ パスワードを取得する

 a) 以下のURLにアクセス。

 https://security.google.com/settings/security/apppasswords

 b) 「端末を選択」プルダウン>「その他(名前を入力)」を選択

 c) アプリ パスワードの名前を入力(例えば"postfix pass")

 d) 「お使いのデバイスのアプリ パスワード」と出てきた12桁の英字をメモ

2. GmailのSMTP Authに必要なCyrus SASLライブラリ(cyrus-sasl-plain)をインストール

$ sudo yum install cyrus-sasl-plain

3. パスワード用ファイル(/etc/postfix/gmailpass)を作成

[smtp.gmail.com]:587 foobar@gmail.com:(アプリ パスワード)

4. gmailpass.dbファイルの作成

$ sudo postmap /etc/postfix/gmailpass

5. gmailpassファイルの削除

$ sudo rm /etc/postfix/gmailpass

6. /etc/postfix/main.cf に以下の行を追加

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmailpass
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/ssl/certs/ca-certificates.crt

7. postfix の再起動

$ sudo service postfix restart

これでメールが送れるようになります。

CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu) CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu)
サーバ構築研究会

秀和システム 2015-03-25
売り上げランキング : 5352

Amazonで詳しく見る
by G-Tools
uehatsu (2015年6月 2日 01:21)

これは以前から気になっていて対処できなかったのですが、重い腰を上げて解決しました。

症状は以下の通り。

  1. Mac OS X 10.9以降(それ以前でもあるかも)
  2. 全体的に処理が重い、CPUファンが回りっぱなしなど
  3. アクティビティモニタですべてのプロセスを見るとSymDaemonがCPUを100%近く使っている

SymDaemonとはノートンアンチウィルスなどを使っているとバックグラウンドで動作するデーモン(裏方さん)なのですが、今まではノートンを使っている以上仕方が無いものだと考えていました。でもVMware Fusionを7にアップグレードしてから特にFusion上のWindows VMがひっかかるようになってしまったので、なんとかCPU負荷を減らそうと調べた結果、やはりSymDaemonだよなぁと。

検索をかけたところノートンの公式コミュニティがひっかかったので、早速読んでみました。

After updating to OS X 10.9 symdaemon using 90%+ CPU

するとその中に「Time MachineディスクをAuto Protectの対象から外すとイイよ」と書いてあるではありませんか。半信半疑でやってみるとCPU負荷が下がった!!SymDaemonのCPU利用率も0.1%程度に!!以下が方法です。

  1. Norton Quick MenuなどからNorton AntiVirusを起動(Internet Securityでも同様と思われます)
  2. 「自動保護」タブを選択
  3. 「ウィルス対策」の「設定」をクリック
  4. パスワードを聞かれるので管理者権限をもったユーザーのユーザ名とパスワードを入力し「OK」をクリック
  5. 「次の場所をスキャンしない」にTime Machineディスクを追加し「OK」をクリック
  6. Norton AntiVirusのウィンドウを閉じ、数分待つ
  7. アクティビティモニタでCPU負荷が下がった事を確認(SymDaemonのCPU使用率も下がります)

これをしたらVMware FusionのVMのひっかかりも気にならなくなりました。

気をつけて頂きたいのはこれをするとTime Machineディスクがウィルス検索の対象にならなくなるという事です。通常の使い方であれば直接そこにファイルを書き込むことはありませんが、それを逆手にとるウィルスなどが出てくるとも限りません。あくまでも自己責任でお願いします。

OS X Yosemite パーフェクトマニュアル
OS X Yosemite パーフェクトマニュアル 井村 克也

ソーテック社 2014-11-28
売り上げランキング : 13264


Amazonで詳しく見る
by G-Tools
完全理解! OS X Yosemite ~すぐに使える[100のワザ]OS X 10.10の知りたいことがズバリわかる~ (マイナビムック) (Mac Fan Special)
完全理解! OS X Yosemite ~すぐに使える[100のワザ]OS X 10.10の知りたいことがズバリわかる~ (マイナビムック) (Mac Fan Special) Mac Fan編集部 中村 朝美

マイナビ 2014-11-29
売り上げランキング : 77833


Amazonで詳しく見る
by G-Tools
uehatsu (2015年4月17日 23:04)

ただ今CentOS 7.x上にMovable Type 6.1のPSGI環境を作成しようとしています。今までPSGI起動にdaemontoolsを使っていたのですがRPMが提供されていないのでソースから毎回ビルドしていました。今回CentOS 7.xにするにあたって設定周りをすべてChefを使おうとしているので毎回ビルドするのは面倒。そこでRPMを作ってしまえと調べましたので、それをまとめます。

用意するのはVagrant上のCentOS 7。そこにSPECファイルを準備してrpm-buildすれば良いのですが先達がpatchやshをGitHub上で公開してくれています。

https://github.com/kteru/daemontools-rpm

詳細は上記リポジトリのREADME.mdに書かれていますので参照してください。以下CentOS 7でのRPMの作成方法です。

$ sudo yum install rpm-build redhat-rpm-config make gcc
$ git clone https://github.com/kteru/daemontools-rpm.git
$ cd ./daemontools-rpm
$ wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
$ ./buildrpm.sh

これで以下の場所にRPMが作成されます。

/home/vagrant/rpmbuild/RPMS/x86_64/daemontools-0.76-1.el7.x86_64.rpm

あとはこのRPMファイルをインストールすればOK。もちろんVagrant以外のCentOS 7にもインストール可能です。こうやって一つずつつぶしていくしかありませんね。

CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu)
CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu) サーバ構築研究会

秀和システム 2015-03-26
売り上げランキング : 4556


Amazonで詳しく見る
by G-Tools
CentOS 7実践ガイド (impress top gear)
CentOS 7実践ガイド (impress top gear) 古賀 政純

インプレス 2015-02-25
売り上げランキング : 41567


Amazonで詳しく見る
by G-Tools
uehatsu (2015年4月16日 00:06)

CentOS 7.x ではサービス起動にserviceコマンドではなくsystemctlを使うようになりました。serviceコマンドを使っても動作しますが、最終的には利用出来なくなるのではないかと思います。

apache + passenger + rails 環境を作る必要があり、従来は/etc/init.d/httpdで環境変数を設定していたのですがCentOS7では見当たりません。

systemdに変更になったので、そのあたりに環境変数をセットする方法が隠されているのだろうと色々調べましたが思ったようなサイトに巡り会えませんでした。

systemdによるCentOS 7の管理 - ドロップインによるユニットのカスタマイズ

ここに「ドロップイン」という方法で変数をセットする方法が記載されているのですが独自拡張の環境変数には対応していないのか設定が反映されませんでした。

そこであきらめかけていたところに、偶然どんぴしゃなページを発見。

CentOS7 での Tomcat8 の自動起動設定

詳細は記載のページを見て頂くとして、/etc/sysconfig/httpd に環境変数をかけば良い事が判明

LANG=C
DATABASE_PASSWORD=<rails_db_pass>
SECRET_KEY_BASE=<secret_key_base>

$ sudo systemctl restart httpd

これで思っていた通りの動作になりました。このとき注意するのは"export OPTIONS=hogehoge"ではなく、"OPTIONS=hogehoge"でexportがいらないこと。従来はbashスクリプトなのでexportが必要でした。

CentOS7はまだまだ慣れないことがいっぱいです。以下の本を読んで勉強中です。

CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu)
CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu) サーバ構築研究会

秀和システム 2015-03-26
売り上げランキング : 22542


Amazonで詳しく見る
by G-Tools