2014年12月31日水曜日

ログローテーション時Apacheが突然死することがある。

バーチャルホストをたくさん切っているサーバで、年に数回Apacheが突然死することがあって、
プロセスがたくさん立ち上がっているわけでも、SWAP食いつぶしてOOMKillerさんに殺された形跡もないのに不思議だなぁ。と思っていたのですが、また落ちたので少々まじめに調べてみました。

まずは基本のerrorlogの調査。すると、なんか定期的にSIGHUP信号を受けてApacheが再起動しているようです。
お?自動再起動Cronなんて仕掛けたっけ?と調べるも該当なし。
しかも、ある時間帯に集中して、数分おきに再起動しています。
Zabbixによると、その後Apacheがお亡くなりになったようです。
バックアップの時間帯と近かったので、メモリ不足を疑いましたが、OOMKillerさんの形跡はなし。
メモリ使用率やディスクの枯渇もない様子。


ローテーションか!と/var/log/cronを調べたところ、cron.dailyが走っていました。
原因としては、

  1. cron.dailyがキックされる。
  2. ログローテーションが起動。
  3. logrotate.d配下にある各バーチャルホストたちのログローテーションが動き出す。
  4. ログローテーションのスクリプトにはApacheをreloadするように書かれている。
  5. バーチャルホストたちのログがローテーションするまで頻繁にreloadされる。(多分非同期?)
  6. Apache数分おきにreloadされコケる。

あたりと推測されます。
対策としては、

  • reloadをやめてgrasefulにする。ただし、ログ書き出しのタイミングが不明なのでsleepを入れる。参考 ただ、grasefulにした場合のsleep時間は結構問題かも。参考
  • そもそもローテーション時Apacheを再起動しない。ただし、ログファイルコピー中のログは保存されない。参考
  • ログローテーションをしない(ぉ

かなぁ。
皆さん色々苦労されているようで。

2014年12月20日土曜日

オープンセミナー2015@広島を開催します!

突然ですが告知です!

来年2月14日、オープンセミナー2015@広島を開催いたします。



参加申し込みはこちらから。

今回のテーマは「クラウド時代の構成管理入門」とし、Chef、Ansible、そしてPowerShellDSCをとりあげます。

オープンセミナーとは、2003年より中四国地域で開催されているIT技術者向けの非営利の無料セミナーです。
現在は香川県、岡山県、徳島県、広島県、愛媛県で開催されています。
企画と運営は各地域の技術系ユーザコミュニティのボランティアにより行われています。

セッション内容としては、

なぜこのテーマにしたのか?ですが、俺が聞きたい!自分が構成管理に衝撃を受けたことが大きいです。
今まで物理的なサーバをセットアップするのに、丸一日掛かることも珍しくありませんでした。
また、バージョンアップなどの作業も大変でした。
しかし、仮想化技術が進み、クラウドなどインフラをAPIで制御する、つまりインフラをソフトウエアでコントロールできるようになりました。
しかも、ミドルウエアのインストールなども構成管理を利用することによりプログラマブルに制御できるようになりました。
言い換えれば、プログラマがインフラをコントロールできるようになった。とも言えます。

自分は衝撃を受けました。
今まで物理サーバを一台一台丹精込めてセットアップしていたものが、わずか数分で出来るわけです。
開発の分野では、開発環境と本番環境が同一であることが望ましいのですが、実際には中々そうは行きません。
また、途中でミドルウエアのバージョンが変更されたりなど、その都度環境を再構築しないといけません。
しかし、クラウドやVagrantなどを利用すれば、環境のクローンを作ることも出来ますし、構成管理を利用すれば、ミドルウエアのインストールなども自動化できます。そのまま本番環境を構築することだって可能です。

これはインフラのみならず、開発者にとっても非常に有益だと思い、ぜひ多くの人に知ってもらいたいと、このテーマにしました。

構成管理はフレームワーク導入と似ているところがあると思います。
導入すれば便利なのはわかるが、いざ導入しようとすると結構難解で、まずどこから手を付ければいいのか分からない。どれを選べばいいかわからない。学習コストが・・・
だったら、講師を呼んで聞いてみよう!

この機会に、DevOpsやクラウド、構成管理などに興味があればぜひご参加ください!

2014年9月24日水曜日

Rails update時に値を変更して更新したい。

たとえば、保存時10円単位で四捨五入して保存したい場合。
ついでに登録日を1日ずらす。

日付型の項目は、年、月、日、時、分、秒と別れてパラメタに入ってくるので、
扱いづらい。
ので、一旦モデルに突っ込んで処理し、その後ハッシュに変換する。

def update
#パラメタを一旦モデルに突っ込む
tmp = Syohin.new(syohin_params)
#金額を10円単位で丸める
tmp.kingaku = tmp.kingaku.round(-1)
#日付型の登録日を1日ずらす。
tmp.record_datetime = tmp.record_datetime + (60 * 60 * 24)
#モデルをハッシュに変換する。
tmp2 = tmp.attributes
#不要なキーを削除
["id","created_at","updated_at"].each do |key|
tmp2.delete(key)
end
#updateに突っ込む
respond_to do |format|
if @syohin.update(tmp2)
format.html { redirect_to @syohin, notice: '更新完了' }
else
format.html { render :edit }
end
end
end

2014年9月23日火曜日

CloudStack勉強会、オープンソースカンファレンス、中国DB勉強会に参加してきました。

9/19:第22回 CloudStackユーザー会 in 広島
9/20:オープンソースカンファレンス広島&WebTouchMeeting
9/21:中国地方DB勉強会

っと、勉強会3連チャン参加してきました。

CloudStackユーザ会in広島

広島では初開催というCloudStackユーザ会の勉強会でした。
私自身CloudStackは何度も個人的に構築しており、またかなり苦労した経験があるので、
楽しく参加することが出来ました。

参加者がそんなにいなかったのですが、その分色々質問できました。
Citrixから来られていたのもあるのでしょうが、CloudStackとXenServerが一番相性が良い。との事。
ただ、XenServer有料だし、無料版も年一回WindowsなPCでアクティベーションしないといけないし・・・と質問したところ、今は無料版(オープンソース版)XenServerがあり、アクティベーションしなくても使用できると教えてもらいました。

また、今回Citrix様のご好意により、Citrix CloudPlatformラボ環境にて、CloudStack構築を体験できました。
スクリプトで早回しとかどうなっているんだろうと覗いてみたり・・・・
こういう検証環境が用意できると、勉強会でもかなり魅力的だなと感じました。
懇親会ではお好み焼きを食べながら、楽しくすごせました。


オープンソースカンファレンス広島

今年も多数のセミナーや展示がありました。
自分は今年はスタッフではなく、サーバーユーザ友の会(仮)として、自宅クラウドやOpenStackライブ構築などを行いました。

今年もラズパイクラスタの展示やX68kとかハードウエア系展示、CloudStackやさくらのクラウドなど、仮想技術関連、UnityやCocos2dなどゲーム関連と幅広い展示やセミナーで大盛況でした。

展示ブースでVyOSってどうなの?と質問をされたり、いろんな方と交流が出来るのがいいですね。

WebTouchMeeting

オープンソースカンファレンス広島の懇親会終了後、その足でWebTouchMeetingへ。
ひむらさんが電子書籍に挑戦されたことについて話をされました。

自分はてっきり表紙だけのネタ企画だと思っていたのですが、ガチで作ってありました。
なんでも、このために2週間集中して執筆したのだとか。
この方のバイタリティというか、なんか、凄いとしか言い様が無いです。

槌本さんによる、Webサービスの立ち上げと長期運営という内容で、学生時代に自分用に立ち上げたWebサービスが、どのような変遷を経て、今に至ったのかを丁寧に話されました。
本業は高エネルギー物理学で、100本以上の論文を共著されたというすごい経歴の方でした。
問題に直面した際の状況分析能力や、省力化のための分散コンピューティングシステム構築などは流石学者さんだなと思いました。
本業が忙しくなると、サービスを放置や畳んでしまうところが多い中、継続させつづけたのは凄いことだと思います。
産休などの制度も充実させているが、1日30分でも、働ける時間に働くというスタイルから、仕事へのブランク期間が短い点が評価されているなど、従業員を大切にしているなぁと感じました。


中国地方DB勉強会

すでにフラフラになりながら、朝からリアルゴールドと牛丼大盛りで挑みました(笑)

Oracleデータベースのトラブルシューティングでは、特に新しいことはありませんでしたが、
逆に言うと、見るところは変わらないということ。
普段から正常値を把握しないと、異常値の検出ができない。
スナップショットを取るのに負荷が掛かる。最初の見積もり時にはバックアップやスナップショットなどの負荷も入れておく。負荷がかかるから取らないのではなく、取る前提でシステムを構築する。
アプリケーション側でもエラーログ出力しておくほうが良い。
など。
昨今の情報漏洩などから、Oracleもセキュリティ周りは充実してきている感じでした。

MySQLトラブル解析入門では、入門と言いながら全然入門じゃない(笑)
クラッシュやデータ破壊については、なかなか解説しているところがないので、参考になりました。

他にもPostgreSQLやSQL Server、MongoDBと非常に内容の濃い盛り沢山な内容でした。

懇親会ではDBあるあるな話で各自盛り上がりました。









・・・・・・・・疲れた・・・

2014年9月17日水曜日

Rails4+DeviseでActiveDirectory(LDAP)認証を試してみた。

Rails4+Deviseで、ActiveDirectory認証を試してみました。

ActiveDirectoryはユーザ名がcnではなくてsAMAccountNameなんて項目に入っていたり、
標準でうっかり日本語でユーザつくろうものなら嵌ること間違いなしな罠が地味にあります。

幸いRubyは日本製なので、日本語でも問題ありませんでしたが・・・


詳細はWiKiにまとめておきます。

2014年9月15日月曜日

Vagrant起動時に、[Error relaunching VirtualBox VM process: 5]と表示されて起動しない。

本日これで3時間ほど無駄にしたわけですが・・・

結論から言いますと、Windows7+VirtualBoxのバージョン4.3.14で発生します。

なんかアンチウイルスソフトが原因??・・・

対処法は、最新の4.3.16に上げることです。


てっきり仮想マシンがお亡くなりになったと思って、泣く泣く再構築したのですが、結果症状変わらず・・・・








俺の休みが・・・・・



俺的メモ:RailsでCronで動かすバッチ処理を書きたい。でもActiveRecordは使いたい。

RailsなWebアプリケーションフレームワークでcronで動かす前提なバッチ処理プログラムを書くという変態奇特な方がいらっしゃったのでメモ。

【Rails】バッチ処理を実装したいけどActiveRecordを中で使ったりもしたいし


RAILS_ROOT/lib/tasks/直下にdel_user.rbってな感じで作成する(実は/lib配下ならどこでもいい)
実行は

rails runner Tasks::DelTmpUsers.execute

な感じ。
クラス名は、/lib/に作成したディレクトリ名の先頭大文字にしたもの::Hogehogeって名前にしないといけない。

例えば、/lib/crontask/hogehoge.rbに配置したら、
クラス名は
Crontask::Hogehoge
になる。

注意点は、モデルクラスの読み込みはされないので、使うモデルはrequireしないといけない。

Railsのテストサーバ(WEBric)はシングルスレッド?!

このところ、Rails漬けな生活を余儀なくされつつあって、四苦八苦しながら日々少しづつ山を崩していますが、地味にハマったのでメモ。

Railsな人には常識なのかもしれませんが、Railsの開発サーバである、WEBrickは、実はシングルスレッドで動作しているので、同時に複数のリクエストを処理できません。

なお、当然これはWEBrickの制約なので、Rails自体がマルチスレッドで動作しないわけではありません。

簡単に実験してみました。(Ruby 2.1.2 + Rails4)

rails g controller test1 index
rails g controller test2 index
っと、2つページを作成し、test1のindexアクションにこんな感じでスリープを入れます。


class Test1Controller < ApplicationController
  def index
    sleep(30)
  end
end

rails s
でWEBrickを起動し、localhost:3000/test2/indexにアクセスします。
普通にtest2のページが表示されるはずです。
では、その状態で別のブラウザまたは別のタブを開いて、localhost:3000/test1/indexにアクセスします。

開くのに30秒ほどかかるはずです。

では、test1にアクセスして、読み込み中のときに、test2を開いてみましょう。
おそらくtest2も応答待ちになったと思います。

ちなみに、Productionモードで起動しても同じでした。

開発用簡易サーバということで、あまり負荷がかかるのを想定されていないのでしょうが、
コントローラに重いトランザクション処理をさせて、別ブラウザで他のページを参照するテストが全く動かなくて焦りました・・・
(RubyというかRails的には、そもそも長時間サーバを専有するようなコードは書くべきではないし、やるなら別スレッドで非同期処理しろってことなんでしょうけど。)

なお、Apache+Passengerの環境では、普通にマルチスレッドで処理されるので、上記のような問題はありませんでした。

開発サーバでもマルチスレッドで動作させたい場合は、unicornなどを使用すると良さそうですが、
開発マシンのメモリがガシガシ食われるのでvagrant環境だとちょっと厳しい。


2014年8月31日日曜日

Windows7+VagrantでRails4の開発環境構築

Vagrant+Rails4での開発が思った以上に快適だったのでメモ。

まずは、この辺りからVertualBoxをダウンロードし、インストールします。




次に、Vagrantをダウンロードし、インストールします。
*古いブログとかで出てくるDLサイトは古いバージョンなので注意!



開発用ディレクトリを適当に作成し、コマンドプロンプトでそのディレクトリに移動します。
以下コマンドを実行。
vagrant box add centos6 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-i386-v20131103.box

他のOSや64bit版がほしいとかは、この辺りを参照して、DL用のURLを適宜セット。
centos6の部分はラベルなので、適当な名前をつける。

なお、DLはかなり時間がかかるので注意!

DLが完了したら、開発するディレクトリ上でvagrant init centos6を実行。(centos6の箇所はラベルなので以下略)

実行したディレクトリ内にvagrantfileというファイル(仮想マシンの動作を設定するファイル)が作成される。
vagrant upコマンドを実行すると、しばらく後仮想マシンが起動する。

TeraTermなどのSSHクライアントで、127.0.0.1:2222にアクセスする。


ID:PWはともにvagrant。鍵認証でも入ることが出来る。
(鍵ファイルの場所はvagrant initした際に画面に表示されている)



こんなかんじでログインできます。
sudo su -でrootになれます。

デフォルトで入っているRubyは1.8系と古いので、rbenvでサクッと最新を入れます。

まずはgitを入れます。(操作はvagrantユーザ)

sudo yum -y install git
rbenvを入れます。

git clone git://github.com/sstephenson/rbenv.git .rbenv
環境変数をセットします。

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ./.bashrc
echo 'eval "$(rbenv init -)"' >> ̃/.bashrc
セットした環境変数を読み込ませます。

source ̃/.bashrc
ruby-buildをインストールします。

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
インストール可能なリストを表示します。

rbenv install --list
今回はRuby 2.1.2をインストールします。

rbenv install 2.1.2
自動的にソースのDLとコンパイル、インストールが走ります。しばらく待ちましょう。

終わりましたら、忘れずrbenv rehashを打ちます。
毎回打つのは面倒なので、便利なgemを入れます。

gem install rbenv-rehash
vagrantは、/vagrantディレクトリと、windows上のvagrantfileが置いてあるディレクトリが共有されています。
なので、

ln -s /vagrant /home/vagrant/deverop

とシンボリックリンクを貼って、

cd deverop
rails new new-app
っとかすると、windows上でファイル編集しながら、vagrant上で動かせます。

最後に、vagrantでポートフォワードをする方法です。
vagrantfileに

  # config.vm.network "forwarded_port", guest: 80, host: 8080
という行があるので、その下に

config.vm.network "forwarded_port", guest: 3000, host: 3000

って感じで記述し、保存後、

vagrant reloadして、仮想マシンを再起動させると、仮想マシン上の3000ポートが、localhostの3000ポートにポートフォワードされます。


*Tips

仮想マシンにvagrantユーザでSSH接続ができなくなった場合、
virtualboxを起動し、該当マシンを強制電源断後、virtualboxで起動させ、
root/vagrantでログインし、復旧させます。








Windows7にオープンソースなメモアプリTomboyを入れてみた。

Ubuntuなどでデフォルトで入っているマルチプラットフォームなノートアプリTomboy
勿論Windowsでも動くのだが、久々にインストールしようとしたら地味にハマったのでメモ。


まずはgtk-sharp-2.12.22.msiをこの辺りから入手し、インストールします。
次に、Windwos版のTomboyを入手

後はインストールすればOK。

Tomboyには、DropBoxなどを経由して、ノートを共有する仕組みがあるのと、非常にシンプルなので、使い勝手が良いです。

EvernoteはLinuxで動かないし、互換アプリは出来がいまいちだし・・・

2014年8月3日日曜日

メモ:oVirtでホスト名を変更する場合。

要oVirt 3.3.0以上ですが・・・

とある事情による、oVirtのコントロールサーバとNFSサーバのホスト名を変更する羽目になり、地味に悩んだのでメモ。

oVirtは、内部DBにホスト名を持っています。なので単純にホスト名を変更するだけだと、oVirtからのリンクが古いままになったり色々不都合が出ます。
また、SSL接続する際の証明書が更新されないので、SSL接続時ホスト名が違うよと怒られます。


まぁやり方はここに書いてあるのですが、

ISO_DOMAINをoVirtサーバにしている場合は、いったんメンテナンスモードにします。

右クリックをして、破棄します。登録されているISOはすべて消えるので、再登録が必要になります。


DNSを新しいものに書き換える。(自分の場合は新旧残しました)
ホスト名を変更
以下のコマンドを叩き、リネームする。
[root@ovirt ~]# /usr/share/ovirt-engine/setup/bin/ovirt-engine-rename --newname=<新しいホスト名> --otopi-environment="OSETUP_RENAME/forceIgnoreAIAInCA=bool:'True' \
   OVESETUP_CORE/engineStop=bool:'True' \
   OSETUP_RENAME/confirmForceOverwrite=bool:'False'"
[ INFO  ] Stage: Initializing
          Welcome to the ovirt-engine-rename utility
          More details about the operation and possible implications
          of running this utility can be found here:
          http://www.ovirt.org/Changing_Engine_Hostname
[ INFO  ] Stage: Environment setup
          Configuration files: ['/etc/ovirt-engine-setup.conf.d/10-packaging-aio.conf', '/etc/ovirt-engine-setup.conf.d/10-packaging.conf', '/etc/ovirt-engine-setup.conf.d/20-setup-ovirt-post.conf']
          Log file: /var/log/ovirt-engine/setup/ovirt-engine-rename-20140803115019.log
          Version: otopi-1.2.0 (otopi-1.2.0-1.fc19)
[ INFO  ] Stage: Environment packages setup
[ INFO  ] Stage: Programs detection
[ INFO  ] Stage: Environment setup
[ INFO  ] Stage: Environment customization
[ INFO  ] Stage: Setup validation
[ INFO  ] The following files will be updated:
          /etc/ovirt-engine/engine.conf.d/10-setup-protocols.conf
          /etc/ovirt-engine/imageuploader.conf.d/10-engine-setup.conf
          /etc/ovirt-engine/isouploader.conf.d/10-engine-setup.conf
          /etc/ovirt-engine/logcollector.conf.d/10-engine-setup.conf
          /etc/pki/ovirt-engine/cert.conf
          /etc/pki/ovirt-engine/cert.template
          /etc/pki/ovirt-engine/certs/apache.cer
          /etc/pki/ovirt-engine/keys/apache.key.nopass
          /etc/pki/ovirt-engine/keys/apache.p12
[ INFO  ] Stage: Transaction setup
[ INFO  ] Stopping engine service
[ INFO  ] Stopping dwh service
[ INFO  ] Stopping websocket-proxy service
[ INFO  ] Stage: Misc configuration
[ INFO  ] Stage: Package installation
[ INFO  ] Stage: Misc configuration
[ INFO  ] Generating post install configuration file '/etc/ovirt-engine-setup.conf.d/20-setup-ovirt-post.conf'
[ INFO  ] Stage: Transaction commit
[ INFO  ] Stage: Closing up
          --== SUMMARY ==--
          Rename completed successfully
          --== END OF SUMMARY ==--
[ INFO  ] Starting engine service
[ INFO  ] Restarting httpd
[ INFO  ] Generating answer file '/var/lib/ovirt-engine/setup/answers/20140803115032-rename.conf'
[ INFO  ] Stage: Clean up
          Log file is located at /var/log/ovirt-engine/setup/ovirt-engine-rename-20140803115019.log
[ INFO  ] Stage: Pre-termination
[ INFO  ] Stage: Termination
[ INFO  ] Execution of rename completed successfully
こんな感じで、スクリプトが走ってホスト名が変更されます。
いったん削除したISO_DOMAINを再度登録しなおします。
その前に、前の残骸を削除する必要があります。
NFSでisoを公開していたディレクトリにある、__DIRECT_IO_TEST__と、ディレクトリを削除します。
新規ドメインから再度登録しなおします。

engine-iso-uploader -i ISO_DOMAIN upload *.iso
な感じで、isoファイルを再度アップロードします。


追記:
[ ERROR ] Failed to execute stage 'Misc configuration': invalid literal for int() with base 10: 'None'
ってなエラーでスクリプトがこけた場合、
engine-setupで再度セットアップしなおした後、再実行するとうまく行きます。

2014年7月15日火曜日

CentOS7が出ましたねー

地味にはまったのでメモ。
NICの名前変更といい、サービスの起動方法変更といい、
こっちのほうもついてこないと置いてかれてしまう。
しかし慣れぬ・・・
http://d.hatena.ne.jp/enakai00/20140712/1405139841

2014年7月6日日曜日

実験:oVirtのサーバOSをCentOS6からFedora19に変更し、グラフを表示できるようにしてみた。


管理サーバをCentOS6からFedora19に変更し、グラフを表示できるようにしてみました。
コンピュータノードがCentなのがいけないのか、NICの通信量は表示されず。
今のところ、CentOS6では、JasperReportのリポジトリ追加は出来るものの、依存関係が解消できないので、動作させられませんでした。
このグラフというかレポート機能、カスタマイズができて、Web上から自由に作成できるっぽい。
ついでに、動かなかったWebコンソールも動くようにしてみました。
まぁやり方はここに書いてあるのですが・・・

これ、いくつか罠があって
engine-setupのときにWebsocketProxyを有効にしないといけない。
https://<oVertサーバ>/ca.crtにアクセスし、証明書をDLして、信頼する証明書に登録しないといけない。
当然ホスト名と証明書のホスト名が異なるとアウト
って、オレオレ証明書デフォ駄目なのかよ!
罠だった・・・

2014年6月8日日曜日

広電電車祭りに行って来ました。

広電電車祭りが今年も開催されていましたので、ふらっと寄ってみました。

広電のすごいところは、国内外の電車を自社工場で部品を自作、時には電動機のコイルも自前で巻いて修理しているし、運転士は様々な電車を運転できるスキルを要求されるというところです。
そして、最新のNC旋盤。ではなく古くて巨大な旋盤があったり、明らかに自作したような測定器があったり、古い機材が現役で使われていたりと機械好きには・・・(略

2014年6月5日木曜日

Rails4メモ

Rails4に限らず、Rails周りのメモ書きをWiKiにまとめ中・・・

LMDEにVirtualBoxをインストールする方法

地味にハマったのでメモ。

Linux mint debian edition (以下LMDE)にVirtualBoxをインストールしようとして、
sudo apt-get install virtualbox
としたのだが、何故かインストールされない。
正解は
sudo apt-get install virtualbox-qt
しかし、起動させると、
Starting VirtualBox kernel modules[....] No suitable module for running
とエラーが出て起動しない。
どうやら別途カーネルモジュールが必要なようです。
 sudo apt-get install virtualbox-dkms
これで無事インストールが出来ました。

2014年6月1日日曜日

Railsで自己認証局+自己証明書を発行するWebシステムを作ってみた。

このところ色々忙しくて、ネタはあったのですが中々書けていませんでした。
まぁ表題の通りなのですが、練習がてら、Railsで自己認証局(CA)+自己証明書を発行する俺得ツールを作成してみした。

実はRailsで作るのは初ですw
ソースはこちら
作りたい!という勢いだけで作ったので、まだバグや動作がおかしいところがあります。
当初Herokuにおいておいたのですが、どうもデータが永続的に保存できないようで、
自宅サーバに試験的においています。

これはなんなのか?というと、AWSなどの仮想サーバにChefなどでサーバを大量生産できるのに、SSL証明書のテストをするためにいちいちOpensslコマンド叩くのがいい加減面倒になったのと、地味に自己認証局を建てるのがしんどかったので。

SSLのテストだけであれば、自己証明書だけでいいのですが、実際のサーバにはCAもセットします。
Chefのレシピとかで証明書のセットを作成していると、そこのテストができないんですね。
適当につくると、最近のブラウザは賢くて開かなかったりしますし・・・

あと、Webアプリなので、手元にLinuxやCygwinがいらないですし、いつどのサーバの証明書を作成したのか管理できるようになります。

現在、証明書の有効期限は意図的に短く設定しています。
これは、さすがに自己証明書を1年を超えて使わないだろうという前提があるからです。

応用すれば、クライアント証明書を発行したりもできると思います。

2014年5月24日土曜日

ジャンク屋によってみました。

今日は松本無線ジャンクセンタにて黄金色に輝く部品を買い占めました。
占めて1000円也。
叔父さんカープぼろ負けで不機嫌でした…

M723が11個
AA01と書かれたNEC製のよく分からない奴が18個
ゲルマっぽい2SC281
レギュレーター?かモノラルアンプっぽいジャンク基板2個。


TL431でフォノアンプ??



TL431でフォノアンプ・・・
確かにシャントレギュレータの中身はアンプだし、
基準電圧を元に動くけど、なんか納得いかねー

http://www.radiomuseum.org/tubes/tube_tl431.html

2014年5月2日金曜日

AWSのEC2インスタンスをスケールアップ、ダウンするRubyスクリプトを作成してみた。

GW中のサーバ高負荷に対応するため、実質自宅待機を命ぜられたので昨夜ついカットなって作ってしまった。(ほぼ丸パクリですがw)
AWSでオートスケールでない単独サーバをいったんストップし、インスタンスタイプを変更して起動させます。
ソースはここにおいておきます。



これのいい点は、オートスケール組める程の予算がない又はアプリの制約で複数台構成が取れない場合で、予めイベントなどでアクセス集中が予想される場合、従来は深夜ゼロ時に手動切り替えしていたものがスケジュール化出来ます。

2014年4月28日月曜日

ジャンパラで仕入れた動かないDVDドライブを直して見た。

ジャンパラで仕入れた動かないDVDドライブを直してみました。

 100円ですw
電源は入りますが、ドライブは一切反応せず。ちゃんと壊れていました。



開けてみると、なんとSATAでした。この手の不良はフレキケーブル断線かレーザー死亡と相場が決まっています。

予想通り、フレキ断線。当然予備などないので、無い物は作るしかない。
断線部を切断。ストレート結線だったので、元の配線を上下逆にし、破断したドライブ側をインターフェース基板側にする。
非常に薄いので、紙やすりで丁寧に表面のコーティングだけはがす。
この時、下から上へ一方向に動かすこと。
横方向や上から下へ動かすと、中の配線が切れたり曲がったりします。
同様に、面倒だからとリューターとか持ちだすと、結構悲惨なことになるので止めたほうがいい。
後忘れずもとのにくっついていたプラ板も裏にくっつけること。
厚みの調整と横幅の調整をしないとコネクタにちゃんと刺さらないので注意。

こんな感じで両面テープで接着。若干斜めなのはご愛嬌ということでw
滑りを多少なりとも良くする為、両面テープにティッシュを貼り付けていたりと細かな調整を行う。
動作試験。
配線がショートしていないか若干不安だったが、一発で動作。
こいつはDVDーDLマルチドライブ(?)らしいのだが、たちまち手元にあったCDーRは動作した。

2014年4月5日土曜日

燃えたスイッチングHUBを修理してみた。

今どき100Mの8Portスイッチングハブなんて修理するより買ったほうが安いし性能が云々は分かりきっているのですが・・・

俺は修理してみたいんだ!!

っということで(笑)
某所より、使用中突如電源が入らなくなったらしいスイッチングハブの修理依頼が来ました。

 久々に激しい液漏れですなぁ〜
 液漏れで錆びてます。
ってか外装は某C社ですが、中身は某A社なんですね。(まぁ当然か)

 丸焦げな基板・・・
 左のが臭いですねぇ。
 案の定吹いています。
 これは珍しい。1次側のケミコンがパンクするのは見たことありません。
 駆動用FETが電解液の影響か、錆びてます・・・
ってかここまで激しいのは初めてかも。
 基板裏側。
FET周りは炭になっています。
他のところは辛うじてパターンは生きている様子。
 こっちも錆びてます。
さて、まずは故障箇所の判定です。
電源を外し、直接HUBの基板へ外部電源装置より電源供給すると動作したので、HUBはとりあえず生きている。
電源基板ですが、
外見から

  • FET死亡
  • ケミコン全滅
  • 抵抗変色->多分死んでる
  • ヒューズ断線

あたりの推測はつきますので、それらを除去します。
次に、トランスを外し、断線がないかチェックします。
というのは、トランスが断線していると、まず入手不可なので、その時点で修理不可となります。
今回は幸い断線していませんでした。
次に、ざっと回路を追いかけます。
今回は1次側のFET周りが派手に焦げているので、FET周りを調査します。
多分駆動用TRも死んでいると推測されるので、除去します。
それ以外のCRたちは、特に変色していなかったり、外見からヒビが入っていたりはなかったので、恐らく無事と判断。あいつら熱とか比較的強いし。
あと、半導体と、ケミコンはすべて交換措置(ダイオードは除く)をとりました。
と言っても、1次2次のパンクしたケミコン、FETと駆動用TR、2次側の基準電圧生成ICくらいですけど。

秋月とか千石では同じ規格のFETが入手できなかったので、今回初めてRSオンラインという通販を利用しました。(digikeyは使い方がよく分からなかった・・・)
最小購入数が決まっているので、1つ単位とかでは購入できませんが、送料とか比較的安く、日本語のページで購入できたので安心でした。
FETについては、調査の結果定格ギリっぽかったので、一回り大きい物を選択。
内部抵抗も下がって、発熱が抑えられることを期待。
ただ、トランジスタの時みたいに、互換表があるようではなかったので、
耐圧と駆動電圧、あと速度が同等かそれ以上あればいいだろうと適当にw選びました。
部品数点なので、メール便で来るかなと思ったのですが、以外にもしっかりとした箱で来ました。

届いた部品を実装。
適当に選んだFETが火を吹くんじゃないか?
燃えて値がよく読めなかった抵抗をそれっぽい値ので代用したが、
読みを間違えていないか?
など、おっかなびっくり電源を入れてみる。
意外とあっさり直ってしまった・・・
(マイクロヒューズ買い忘れたので、通常のヒューズで代用)
今回の故障診断としては、コンデンサ液漏れでFETに電解液がかかる。
FET異常発熱。ケミコン潮吹き加速。
焦げ具合から100度くらいになったんじゃないかな。
FETが腐食しショート。大電流が流れる。
抵抗熱損。ヒューズ飛ぶ。駆動トランジスタ死亡。

っと推測。トランスが焼き切れていなかったのは幸いですね。
ってか通常使っていてここまで悲惨な壊れ方する電源って・・・
C社大丈夫か??


最後に
何一つ具体的なこと書いてねーじゃねーか!
なんですが、
電源はしくじると火災とか感電とかマジ危険です!
AC100Vナメるとやばいです。

たかが数千円以下で入手できるHUBごときに命かけなくてもいいと思いますよ。