敵のいない勉強部屋

勉強記録用。土日を中心に更新。

ラジオサーバー構築記③ どがらじ インストール & セットアップ

どがらじは、https://dogaradi.123net.jp/ からダウンロードできる。

f:id:im_not_enemy:20190210191807p:plain

現在のバージョンは 1.16.0 だ。

インストール方法は簡単で、上記のサイトからダウンロードした SetupDogaradi.exeを実行するだけだ。

セットアップ

セットアップも非常に簡単で、下記の手順を実施するだけだ。

  1.  番組表から録音したい番組を選ぶ
  2.  定期的に自動録音されるように "繰り返し設定" を入れる
  3.  録音したファイルを自動的に .aac(.m4a)ファイルに変換する設定を入れる  ※デフォルトでは、.flvファイルで保存されてしまう

録音する番組

上記の手順をひたすら繰り返し、録音する番組はこちら。

  • きらクラ
  • 名曲スケッチ
  • 名曲の小箱
  • 音楽の泉
  • 現代の音楽
  • 名演奏ライブラリー
  • ブラボー! オーケストラ
  • クラシックの迷宮
  • 古楽の楽しみ
  • ベストオブクラシック
  • クラシックカフェ
  • リサイタル・ノヴァ
  • オペラ・ファンタスティカ
  • ビバ!合唱
  • N響 ザ・レジェンド

さすが NHKといった感じで、ここまでクラシックの番組が充実している局はほかにない。

他の局にも全くないわけではないのだが、とりあえず今は運用の初期段階ということで、録音するのはNHKの番組だけにしておくことにした。(他局はradikoでも聴けることだし)

 

そして、設定した結果がこちら。

f:id:im_not_enemy:20190210193155p:plain

 

録音ファイルの保存先はデフォルトのまま C:\Users\Administrator\Documents\RADIO 直下にしておいた。

これでどがらじ側のセットアップは完了したので、一旦ここに録音ファイルがたまっていくのを待つことにする。

そのあとは、ファイルをHTTP経由で公開する方法を考えて行くとしよう。

ラジオサーバー構築記② windows server 2016 インストール

windows server 2016のインストールに意外にも手間取ってしまった。

 

インストール用イメージファイルがDVDに焼けない問題

手間取った原因は、windows server 2016の インストール用イメージファイル(.iso)が 6.68GBもあり、容量オーバーでDVD-R(片面一層)に焼けなかったからだ。

f:id:im_not_enemy:20190210183133p:plain

そのため、初めてUSBからのOSインストールにチャレンジすることになった。

 

インストール用USB作成

インストール用のUSBを作るにあたっては、下記のサイトが大変参考になった。

Create a USB Stick for Windows Server 2016 Installation - Thomas Maurer

f:id:im_not_enemy:20190210183510p:plain

私はサーバー機として古いデスクトップ(ThinkCentre m90p)を使っている。そのため旧式のBIOSに合わせてパーティションの形式をMBRで作成する必要があるということを、今回の作業で学んだ。(UEFIの場合はGPT形式)

 

また、FAT32ファイルシステムでは一つのファイルの最大サイズが 4GBまで、という制限がある。 ただし、インストール用イメージファイル(.iso)に含まれる install.wimというファイルが 5.76GBもあった..

f:id:im_not_enemy:20190210185306p:plain

そんなときのために、dismコマンドを使ってファイルを分割することで対応できるようだ。(microsoftのドキュメントにも記載あり)

 

無事インストール完了

なんとかインストール用USBを作成することができたので、USB からブートするようにBIOSを設定し、サーバ機の電源を入れた。

結果、インストール画面が無事に開いたので、Windows Server 2016 Standard Evaluation (デスクトップ エクスペリエンス) をインストールして、作業を完了した。

f:id:im_not_enemy:20190210190526p:plain

f:id:im_not_enemy:20190210190841p:plain

Windows10と同じようなデスクトップだった。

次は どがらじ をインストール & セットアップするとしよう。

 

 

ラジオサーバー構築記① クラシック音楽の番組をもっと聴きたい

NHKのラジオ放送にはクラシック音楽の番組が多く、簡単な曲の解説とともに様々なクラシック音楽を紹介してくれる。

 

他局にもそういった番組は存在するものの、番組枠が5分~15分以内の番組がほとんどであるため、交響曲など比較的長い曲は紹介されることがない。

 

クラシック音楽好きにとってNHKは貴重な情報源の一つなのである。

 

ただし、一般的なサラリーマンにとってラジオの番組をリアルタイムで聴くのは難しい。最近では らじるらじる の機能で時間を問わずNHKの番組を聞けるようになったが...対応する番組はごく一部で、クラシック音楽の番組はほとんど対応していない。

 

そこで、自分用のラジオサーバーを立てて、いつでもスマホNHKのクラシック番組を聴けるようにしようじゃないかと思い立った。

 

ラジオ番組を定期録音できる どがらじ をwindows server にインストールして、録音データをIIS(自分だけがアクセスできるように)公開しようと考えている。

 

構築する過程で勉強になることもいろいろあるかと思うので、その過程を記録していくことにした。

Cloud book

メインで使っているノートPC(Inspiron 15 7000)が大きくて重いので

とにかく小さくて、安くて、windows10が入ってるPCを探していたら、

ちょっと古いけど秋葉原で見つけた。

 

ASUS Vivobook E200HA

https://www.asus.com/jp/Laptops/ASUS-Vivobook-E200HA/

 

クラウドサービスを積極的に利用することを前提に作られたモデルらしい。

 

これはまさに私が求めるものではないか。

 

そしてこういうモデルを総称して、 Cloud bookというらしい。

 

かっこいいではないか。

 

積極的にクラウド使っていこう。

インスタンスから外部へ接続ができない [CloudStack]

外部接続ができない…?

デフォルトで用意されているNetworkOfferingである "Offering for Isolated networks with Source Nat service enabled" 指定してIsolatedNetworkを作成し、その配下にインスタンスを作成したところ、インスタンス→外部ネットワークへの通信ができなかった。

 

インスタンス→VRへのping疎通は可能だ。

また、VR→外部ネットワークへのping疎通も可能だった。

どうもVRで通信が制限されている模様。

 

Egress rulesの存在を知る

調べてみると、デフォルトではインスタンス→外部への通信はすべて遮断される仕様のようだった。許可したい接続はNetwork毎に"Egress rules"を追加する必要がある。

今回はすべての宛先IPアドレス/Portに対して通信を許可する設定を追加した。

結果、外部疎通が可能となった! 解決できて満足です。

f:id:im_not_enemy:20170927035437p:plain

 

おまけ

上記の操作により、VRのiptablesに許可設定が追加されていた。

root@r-93-VM:~# iptables -nL FW_EGRESS_RULES
Chain FW_EGRESS_RULES (1 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0

 

/etc/profileとscriptコマンド

ターミナルのログを残すために/etc/profileにscriptコマンドを書いて運用していたが、

書き方が原因でcloudstackの起動スクリプトがフリーズしたため対処法をここに記録。

 

・これまでの悪い書き方

# grep script /etc/profile

script /var/log/script/`date "+%Y%m%d%H%M%S"`.log

 この書き方ではscriptコマンドが無限ループし、最悪の場合サーバ全体がダウンするそうな…笑

結構恐ろしいことをしていたようだ。

 

・新しい書き方

P_PROC=`ps aux | grep $PPID | grep sshd | awk '{ print $11 }'`
if [ "$P_PROC" = sshd: ]; then
script -q /var/log/script/`whoami`_`date '+%Y%m%d%H%M%S'`.log
exit

参考サイトの内容を引用させてもらった。

scriptコマンドの親プロセスがsshdの時だけ作動するように分岐しているようだ。

whoamiを使うとGood,ということも勉強になった。

参考サイト

scriptとpsacctでオペレーションログを記録する | Developers.IO

CloudStackAPIを使うには

クラウドAPI

CloudStackのようなクラウド基盤ソフトウェアでは、
APIを通じてインフラを管理(操作)できる。 (※CloudStackGUIも結局は裏でAPIをコールしているだけ)

ここではbashスクリプトを使ってAPIをコールし、

ターミナル上の操作でインスタンスを作成するまでの流れを紹介する。

 

APIキー,SECRETキーの取得

CloudStackGUIから、APIを使いたいユーザのAPIキーとSECRETキーを生成する。

f:id:im_not_enemy:20170916232837p:plain

f:id:im_not_enemy:20170916233026p:plain

②リモートPC(linux系)にスクリプトを作成

エディタを開き、こちらのコードを貼り付けるだけ。
https://gist.github.com/keithseahus/6201354

# vi cloud-api.sh

③必要箇所の書き換え

書き換えるのは前半部分のみ。
ADDRESS -> cloudstackのURIを指定
API_KEY -> ①で生成したAPIキーを指定
SECRET_KEY -> ①で生成したSECRETキーを指定
USE_XMLLINT -> こちらはお好みで0か1を指定(1にするとAPIの結果をxmllintで自動生成してくれます)

・編集前

ADDRESS="https://"
API_KEY=""
SECRET_KEY=""
USE_XMLLINT=0 # true => 1, false => 0

・編集後

ADDRESS="http://192.168.70.250:8080"
API_KEY="ki4nHumoJvC28UG5zVoV6m7Cq3MHF0IQCU-ohd08K9nWrY-FVurx2rOjubmbsOL7VutQPUGnJsoEY50JjQ2e8w"
SECRET_KEY="-g8OejVXQtC_uiHgEJVXafKcvAYRwpMeQV2x0VhyivQBIeeFhpWANR31slAghUs_Kap_D7cbVvuI2tBTPwIkCQ"
USE_XMLLINT=1 # true => 1, false => 0

④実行権限を付与

# chmod a+x cloud-api.sh

スクリプトの実行

・例えばZoneの一覧を取得したい場合
作成したスクリプトの引数の"command="部分で実行したいAPIの名前(listZones)を指定
# ./cloud-api.sh command=listZones

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 484 100 484 0 0 4382 0 --:--:-- --:--:-- --:--:-- 4400
<?xml version="1.0" encoding="UTF-8"?>
<listzonesresponse cloud-stack-version="4.9.2.0">
<count>1</count>
<zone>
<id>0b17bf01-fecb-4d79-bbeb-9632641b7eba</id>
<name>cloud-zone01</name>
<networktype>Advanced</networktype>
<securitygroupsenabled>false</securitygroupsenabled>
<allocationstate>Enabled</allocationstate>
<zonetoken>957d6ba3-fa65-34f8-ba7c-aa428316becf</zonetoken>
<dhcpprovider>VirtualRouter</dhcpprovider>
<localstorageenabled>false</localstorageenabled>
</zone>
</listzonesresponse>

 

・サービスオファリングの一覧を取得したい場合

# ./cloud-api.sh command=listServiceOfferings

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2379 100 2379 0 0 43597 0 --:--:-- --:--:-- --:--:-- 44055
<?xml version="1.0" encoding="UTF-8"?>
<listserviceofferingsresponse cloud-stack-version="4.9.2.0">
<count>4</count>
<serviceoffering>
<id>d32187cd-044b-4c3c-9284-0ddd928d3733</id>
<name>Medium Instance (HA)</name>
〜以下略〜

 

・テンプレートの一覧を表示したい場合
"command="以外にも引数が必要となる
# ./cloud-api.sh command=listTemplates templatefilter=self

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1081 100 1081 0 0 16620 0 --:--:-- --:--:-- --:--:-- 16890
<?xml version="1.0" encoding="UTF-8"?>
<listtemplatesresponse cloud-stack-version="4.9.2.0">
<count>1</count>
<template>
<id>66bad79b-e298-4e4e-9741-c768f7ddf8eb</id>
<name>web-linux-01-temp</name>
〜以下略〜

 

インスタンスを作成したい場合
サービスオファリング、テンプレート、ゾーンも引数で指定する必要がある
# ./cloud-api.sh command=deployVirtualMachine serviceofferingid=d32187cd-044b-4c3c-9284-0ddd928d3733 templateid=eac558b0-5ee5-11e7-ba23-90fba6067579 zoneid=0b17bf01-fecb-4d79-bbeb-9632641b7eba

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 225 100 225 0 0 380 0 --:--:-- --:--:-- --:--:-- 380
<?xml version="1.0" encoding="UTF-8"?>
<deployvirtualmachineresponse cloud-stack-version="4.9.2.0">
<id>f8056f37-489c-4b6d-83d5-eb8f366d5bae</id>
<jobid>a0d870b1-fb34-49a9-9633-29167bd10832</jobid>
</deployvirtualmachineresponse>

このようにjobidが返ってくる。

hypervisorやSystemVMが裏でプロビ処理を行っており、その完了を待つ必要があるのだ。

※これを非同期ジョブ(AsyncJob)と呼ぶ。

処理の成否はこのjobidを使って確認する。

・処理の成否確認

# ./cloud-api.sh command=queryAsyncJobResult jobid=a0d870b1-fb34-49a9-9633-29167bd10832

※処理中 jobstatus=0
※処理成功 jobstatus=1 ★今回はこちら
※処理失敗 jobstatus=2

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2419 100 2419 0 0 25138 0 --:--:-- --:--:-- --:--:-- 24938
<?xml version="1.0" encoding="UTF-8"?>
<queryasyncjobresultresponse cloud-stack-version="4.9.2.0">
<accountid>190363c5-edd4-4341-ad9a-84ff5866f4df</accountid>
<userid>42814bac-434e-4396-affb-fd4f62348af1</userid>
<cmd>org.apache.cloudstack.api.command.user.vm.DeployVMCmd</cmd>
<jobstatus>1</jobstatus>
〜〜以下略〜〜

インスタンスが作成されている

今回、インスタンス名はCloudStackが自動で生成しているが、
任意の名前を付けたい場合はcommand=deployVirtualMachineAPIコール時に引数"name="と"displayname="を追加で指定すれば良い。

f:id:im_not_enemy:20170916234817p:plain

・使用可能なAPI一覧

CloudStack API Reference

APIのコール時に必要な引数等や、返り値のxmlの読み方なども確認できる。

API名に(A)がつくものは、非同期ジョブであることを指している。

・他製品(ツール)との連携

今回はbashスクリプトAPIをコールしたが、APIキーとSECRETキーを使えばより様々なツールとの連携が可能になる。 (例: Jenkins, Terraform, Packer ...)
こちらについても今後、使用例を紹介していきたい。