Tech Karte::

できることをひとつずつ。

NAS・Bluetoothレシーバーで即席ネットワークオーディオ環境を作る

今回は勉強から少し離れて趣味の音楽の話。

今まではPCにインポートした音楽データを外付けHDDに貯め、iTunesとHDD内のフォルダをリンクさせて使用していました。
しかし、HDDの容量の限界・老朽化による動作の不安から、先日新たにNASを買いました。

購入したNASはこちら。

NAS設定

購入後、早速ルータ(ホームゲートウェイ)に有線接続。
f:id:k-matsuda0901:20160613202426j:plain
ごちゃごちゃしてます。

初回アクセスはアカウント・パスワードの設定が必要ですが、説明書通りなので省略。
DHCPNASIPアドレスを取得後、旧HDDからNASへのデータ移行。
移行はNASのダイレクトコピー機能で200GB弱のデータ移行が約3時間…

ブラウザのNAS設定画面からiTunesサーバ詳細設定へ。
サーバ機能のON/OFFとダイレクトコピーで移動したiTunes Mediaフォルダを指定。

iTunes設定のiTunes Mediaフォルダの場所をNAS側の格納フォルダで指定。
「フォルダを整理する」にチェックを入れておくと自動でアーティスト毎に整理してくれるので便利。

  • dlnaクライアント設定

現在Autherが使用しているスマホ(FREETEL Priori3 LTE)にdlnaクライアントアプリを導入。
クライアントアプリは色々あるみたいですが、BubbleUPnPのライセンス版を選択。
BubbleUPnPの設定は以下を参照。
スマホでネットワークオーディオを操作する手順 | ハウツーIT

  • dlnaサーバ設定

ブラウザのNAS設定画面からdlnaサーバ詳細設定へ。
ここでもサーバ機能のON/OFFと配信フォルダを指定。
アクセスを許可する端末も設定できるので、自分のPCとdlnaクライアントを入れたスマホを登録。

Bluetoothレシーバー購入

中学生くらいの時に、なんかの試験に受かったご褒美に買ってもらった(記憶あいまいですが)コンポが。
昔はよくMDで音楽を聴いていましたが、最近は電源すら入れてませんでした。
電源を入れてみるとまだ動きました。が、ヘッドクリーニングなどなど諸々を怠っていたためかMD・CD再生はアウト…。
一時はネットワークオーディオを買うことも考えましたが、家電量販店でその値段を見て撃沈…
幸いにもアナログ入力(赤白端子)は生きてたのでそのまま使用することに。

購入したBluetoothレシーバーがこちら。

商品詳細はこちら。
レシーバー本体・コンセントと電源ケーブル・AUXケーブルとアナログ端子変換アダプターが付属していました。
f:id:k-matsuda0901:20160613202455j:plain

コンポとアナログ変換アダプターを使用して接続。
f:id:k-matsuda0901:20160613202445j:plain

スマホもレシーバーも値段がだいぶ安かったので接続してくれるのかそもそも不安でしたが、Bluetooth接続はまったく問題なし。

ストリーミング再生

スマホのBubbleUPnPからNASを選択すると、ビデオ・ミュージック・フォトのフォルダが。
ミュージックを選択して色々聴いてみました。
ルータから自室のコンポ(スマホ)まで距離もあって障害物もあるせいか、電波強度が安定しませんが、再生自体は可能でした。

f:id:k-matsuda0901:20160613202513j:plain
f:id:k-matsuda0901:20160614193729j:plain

ホームネットワーク内限定ですが、メディアサーバ機能が使えるようになりました。

外部でのストリーミング再生はVPNやらDDNSやら必要そうなのでもう少し勉強してから…

仕事終わって帰宅してからの自分の時間が楽しくなりました。

シェルスクリプト練習 -MySQLのテストDBにランダムに生成したデータを入れる-

しばらくぶりの更新になります。
ずっとCCNAの模擬試験問題の解答をしていてLinuxMySQLの勉強がそっちのけになっていました。

今回はシェルスクリプトMySQLのテーブルにランダムに生成したデータをINSERTしてみたのでその備忘録に。

前回のMySQLの勉強ではiTunesのライブラリを一つ一つ手入力していました。
コマンドの練習にはなったのですが、単純に物量が多くて全部入力するのに4日かけてました。
これは勉強するうえで非効率すぎるし、踏み込んだ勉強にならないと思いました。

そこで今回のシェルスクリプト作成。

以下のページを参考にしました。
memorycraft: シェルってなんじゃ?(mysqlに簡単ランダムデータ生成)

テスト用DB・テーブル作成

以前作ったiTunesライブラリとは別に「test_user」DBに[user]テーブルを作成。

>create table test_user;

>use test_user;

>create table user(
->id int(11) not null auto_increment,
->name varchar(30),
->age int(11),
->pass varchar(50),
->created_date datetime,
->primary key(id));

これでランダムなデータを入力する先ができました。

シェルスクリプト作成

CentOSのコンソールに戻って「insert_user.sh」スクリプトを作成。

vi insert_user.sh

viでスクリプトの中身を作りました。

#!/bin/sh

while((1))
do
name=$(uuidgen | tr -d '-' | cut -c 1-10)
#「uuidgen」コマンドで10桁のハイフンなしIDを出力
pass=$(uuidgen)
#uuidgenでランダムにIDを出力
age=`expr 1 + $RANDOM % 100`
#「expr」コマンドで1から100までの乱数を出力
mysql -u [USER] test_user -pPASSWORD -e "insert into user (name,age,pass,created_date) values ('${name}',${age},'${pass}',NOW());"
#MySQLに[USER]・PASSWORDでログインし、「test_user」の「user」テーブルに各ランダムな値をINSERT
echo -n "."
#INSERT時に「.」を出力
exit 1


あとはシェルの実行。

sh ./insert_user.sh

すごい勢いで「.」が表示されていました。
(※セキュリティ上問題ある風なメッセージも一緒にすごい勢いで表示されてましたが)

「たぶんこのスクリプトは永遠に続くな」と確信したのでCtrl+Cで強制終了。

その後、MySQLでテーブルを確認してみると。
f:id:k-matsuda0901:20160610163525p:plain


スクリプト実行から強制終了までは1分にも満たなかったはずですが、すごい量のデータが挿入されてました。
今回はここまで。

夏に弱いAuthor、二郎系ラーメンが大好きです。
夏バテ予防に先日も食べてきました。
https://www.instagram.com/p/BGZBX2Qklkm/

サーバ監視システム「MUNIN」の導入・初期設定確認

今回はサーバのリソース監視システム、MUNINを導入してみたのでその備忘録に。
f:id:k-matsuda0901:20160524111522p:plain

以下のページを参考にしました。
www.server-memo.net

構成

今回は自分自身のみを監視するため、munin-serverとmunin-nodeをインストール。

MUNINインストール

MUNINをインストールするために、まずはEPELリポジトリを追加。
リポジトリ追加方法は以下のページを参照。

www.server-memo.net

リポジトリの追加が完了したら以下のコマンドでMUNINをインストール。

yum --enablerepo epel install munin

MUNIN設定

1.MUNIN-Server設定

viで/etc/munin/munin.confを確認。

[localhost]
address 127.0.0.1
use_node_name yes

ループバックアドレスが指定されていたので特に変更はしませんでした。

続いてログイン用パスワードの設定。
パスワードの格納ディレクトリはインストール時にApachehttpd)に作成された/etc/httpd/conf.d/munin.confで確認が可能。

以下コマンドでMUNINログイン用のユーザ・パスワードを作成。

sudo htpasswd -c /etc/munin/munin-htpasswd [USERNAME]
New password:       ←希望パスワードを入力
Re-type new password:   ←パスワード再入力
Adding password for user [USERNAME]
MUNIN-Node設定

viで/etc/munin/munin-node.confを確認。

allow 127.0.0.1

ここもループバックアドレスが指定されていたので変更なし。

動作確認

以下コマンドでApacheとMUNIN-Nodeを起動。

systemctl start httpd
systemctl start munin-node

ブラウザ上からhttp://localhost/muninにアクセスするとBASIC認証入力が出るので、設定した[USERNAME]とパスワードでログイン。

このとき、ファイアウォール設定を忘れていたので403 forbiddenが出てしまいました。

ファイアウォール設定

MUNIN-ServerとMUNIN-Nodeは4949番ポートで通信を行うので、ファイアウォール設定で4949番ポートを許可。

firewall-cmd --add-port=4949/tcp --permanent
[success]で成功
firewall-cmd --reload
[success]で成功


再度ブラウザ上からMUNINにアクセス。
f:id:k-matsuda0901:20160524141457p:plain


リソース情報の取得はデフォルトで5分ごとになっているようです。
今回はとくに変更はしませんでした。
今回はここまで。

ApacheとMySQL(PHP)連携

今回はApacheMySQLPHPを連携してみたのでその備忘録に。

MySQL設定

rootログイン後、アクセス用ユーザー作成

>create user hoge identified by 'PASSWORD';

作成したユーザーにtest_itunesデータベースへのselect権限を付加

>grant select on test_itunes.* to hoge identified by 'PASSWORD';

アクセスページ設定

/var/www/html/adm(Apache指定ディレクトリ)下にアクセス用PHPページを作成

vi /var/www/html/adm/mysql.php

test_itunesデータベース・music_libテーブルへのアクセスページをPHPで記述。

<?php
 $connect = mysql_connect('localhost','hoge','PASSWORD') or die ('error(connect)');

 mysql_select_db('test_itunes', $connect) or die('error(select_db )');

 $data = mysql_query('select * from music_lib', $connect);

 echo '<ul style="list=style-type:square";>';

 while ($row = mysql_fetch_array($data)) {
 echo '<li>'.$row['No'].'.'.$row['Artists'].':'.$row['Album_title'].'</li>';
 }

 echo '</ul>';

 mysql_close($connect);
?>

ここで実機(Windows 10)側からデータベースへのアクセスをして確認。
ブラウザのアドレスバーに入力してmysql.phpにアクセス。

http://localhost/mysql.php

すると以下の画面が。

f:id:k-matsuda0901:20160517103214p:plain

記述したPHP(html)がどうも箇条書きスタイルになってしまっていたので、再びCentOSコンソール上からmysql.phpを修正。

=============ここから==============
 echo '<ul style="list=style-type:square";>';

 while ($row = mysql_fetch_array($data)) {
 echo '<li>'.$row['No'].'.'.$row['Artists'].':'.$row['Album_title'].'</li>';
 }

 echo '</ul>';
=============ここまで==============

↓↓↓↓↓↓↓↓修正↓↓↓↓↓↓↓↓↓↓

 echo '<table border="1" cellpadding="1" cellspacing="0";>';

 while ($row = mysql_fetch_array($data)) {
 echo '<tr><td>'.$row['No'].'</td><td>'.$row['Artists'].'</td><td>'.$row['Album_title'].'</td><td>'.$row['Disks'].'</td></tr>';
 }

 echo '</table>';

再度、実機側からmysql.phpにアクセスしてみると…

f:id:k-matsuda0901:20160517103226p:plain

test_itunesデータベースのmusic_libテーブルが表スタイルで表示されました。

MySQL初期設定~テスト用データベース作成

今回はいつぞや入れたMySQLをいじってみたのでその備忘録に。

MySQL設定

CentOSのコンソール上で以下を入力。

$mysql_secure_installation

すると対話式に設定が始まるので各設定に…。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):   <----- 起動したてでrootパスワードが設定されていないので、そのままEnter
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y  <----- Rootパスワードを設定するので「Y」
New password:       <----- パスワードを設定
Re-enter new password:  <----- パスワードを再入力
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y     <----- 匿名ユーザーを排除するため「Y」
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y   <----- RootでMySQLにリモートログインするのはセキュリティ的に危ないので「Y」
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y  <----- testデータベースは不要のため「Y」
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y    <----- 上記設定による権限の変更等を即時反映したいので「Y」
 ... Success!

Cleaning up...


All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

設定が終わったところで以下のコマンドでMySQLにログイン。

$mysql -u root -p

設定したパスワードを入力すると、MySQLのコンソールに。
早速、テスト用データベースを作ってみました。

テスト用DB作成

Authorの資源のなかで、そこそこ物量のあるiTunesライブラリの情報をデータベースに登録しようと思います。
以下のコマンドでテスト用データベース・テーブルを作成。

mysql>create database test_itunes; ←「test_itunes」というデータベースを作成。

データベース内のテーブルはカラムを設定しなければならないので、以下のカラムを設定するようにしました。
列1:No.(連番登録)
列2:アーティスト名(Artists)
列3:アルバムタイトル(Album_title)
列4:ディスク枚数(Disks)
列5:リリース年(Release_date)

mysql>create table test_itunes.music ( ←「test_itunes」データベースに「music」テーブルを作成
    ->No int auto_increment,      ←列1に「No」カラムを数値型(int)で自動採番(auto_increment)登録
    ->Artists varchar(40),       ←列2に「Artists」カラムを半角40文字までのサイズ可変文字列型(varchar(40))で登録
    ->Album_title varchar(50),     ←列3に「Album_title」カラムを半角50文字までのサイズ可変文字列型(varchar(50))で登録
    ->Disks int,            ←列4に「Disks」カラムを数値型(int)で登録
    ->Release_date date,        ←列5に「Release_date」カラムを日付型(date)で登録
    ->index(No));            ←列1の「No」カラムにインデックスを付加(※auto_increment時に必須)

作成ができたかどうか確認するため、以下のコマンドを入力。

mysql>use test_itunes;
mysql>show tables;

f:id:k-matsuda0901:20160511142707p:plain

テーブルへのレコード(データ)登録

作成したtest_itunesデータベースのmusicテーブルにレコード(データ)を入れていきました。

mysql>insert into テーブル名 (カラム1,カラム2,カラム3,…) values (カラム1データ,カラム2データ,カラム3データ,…);

という風に入力を行っていきました。

入力例が以下。

mysql>insert into music (artists,album_title,disks) ←「music」テーブルにアーティスト名:Arctic Monkeys、アルバムタイトル:AM、ディスク枚数[1]を登録
    ->values ('Arctic Monkeys','AM',1);

入力状況を確認するために以下を入力。

mysql>select * from music;

すると確かにテーブル内に情報が登録されているのが確認できました。
f:id:k-matsuda0901:20160511142735p:plain



iTunesライブラリの物量が多くてまだ全部の登録が終わってませんが、とりあえずここまで。