Raspberry Pi 3 B+ に gitlab をインストールする

subversionを使っていますが、いい加減、gitに切り替えないとと思いつつ幾星霜…
ようやく重い腰を上げて、gitlab をインストールしてみようかと思い立ちました。
が、予想外に四苦八苦。

一つ目は、ラズパイの起動ディスク。
SDカードに全部突っ込むのはさすがにどうかと思い、USB-HDDからの起動とします。
mpd用のラズパイでは、USBストレージからいとも簡単に起動したので、すんなりいくだろうと思ったのですが…
システムが起動したりしなかったりします。どうやらHDDケースのせいのようです。
オートパワーオフなどの機能が入っているケースだとうまくないようです。
ずっと以前に買った、USB/IEEE1394兼用ケースにしたら、うまく起動するようになりました。

二つ目は、gitlabのメモリ使用量。
gitlabのデフォルトの設定のままだと、ラズパイではメモリ不足でスワップしまくって、かえって遅くなってしまうらしいです。
ということで、先人達の記事にあるとおり、postgresqlにアサインするバッファ容量を減らして対応しました。

ようやく、gitlabのスタートラインに建てました…
こんな遠回りしているから、イカンのですよね(笑)

カテゴリー: サーバーまわり | Raspberry Pi 3 B+ に gitlab をインストールする はコメントを受け付けていません。

Ubuntu 18.04 LTSがインストールできない件

先日、Ubuntu 18.04.2をインストールしようとしたところ、以前の記事と同じく、途中でループしてインストールできないという症状が起きました。

ぐぐってみたところ、こんな記事にたどり着きました。
https://forums.ubuntulinux.jp/viewtopic.php?pid=119684
インストールの言語を日本語にすると、この現象に遭遇するようです。

ということで、言語を英語のままインストールを続行すると、すんなりインストールできました。
わかってしまえばなんと言うことないですが…

カテゴリー: サーバーまわり | Ubuntu 18.04 LTSがインストールできない件 はコメントを受け付けていません。

Raspberry Piで温度計測(その2)

先日のラズパイ温度計、延々と温度計測を続けています。
一日の温度変化は、測定データを全て取得すればよいですでが、週間とか月間といった長いスパンになると、データをはしょったほうがよいです。
ということで、測定データの移動平均を取ってみようと思い立ちました。

色んなサイトを参考にさせて頂いて、なんとか実装することができました。
CakePHP3でのコードはこんな感じです。

$hm_data = $this->ondo_data->find( )
->join( [      .....(3)
'table' => 'temperature_histories',
'alias' => 'subtbl',
'type' => 'LEFT',
'conditions' => [
'TIMESTAMPDIFF(MINUTE, TemperatureHistories.measuring_datetime, subtbl.measuring_datetime) BETWEEN -35 AND 35',
'TemperatureHistories.sensor_id = subtbl.sensor_id',
],
] )
->select([
'dayhhmm' => "DATE_FORMAT(TemperatureHistories.measuring_datetime, '%d %H:%i')",
'hourAvg' => 'AVG(CAST(subtbl.temperature AS SIGNED))',      .....(5)
'measuring_datetime' => 'TemperatureHistories.measuring_datetime',
])
->where(function ($exp, $q) use ( $sdate, $edate ) {      .....(1)
return $exp->between( 'TemperatureHistories.measuring_datetime', $sdate, $edate );
})
->where( ['MINUTE(TemperatureHistories.measuring_datetime)' => '00', 'TemperatureHistories.sensor_id' => $sensor_id ] )      .....(2)
->group([ 'TemperatureHistories.measuring_datetime' ])      .....(4)
->order([ 'TemperatureHistories.measuring_datetime' => 'ASC' ])      .....(6)
->all();

temperature_histories はテーブル名。
temperature へ計測結果が入ります。
measuring_datetime は計測日時。
sensor_id は、温度センサーのIDです。

大ざっぱな解説は…
(1)集計期間は、$sdate と $edate の間です。
(2)データを取得するのは、$sensor_id 指定されるセンサー、時間は正時(00分)毎とします。
(3)subtblという別名で自分自身をjoinしますが、その際に、測定時間の前後35分間の測定値も取得します。
(4)joinしたテーブルからは複数のデータがくるので、TemperatureHistories.measuring_datetime でグループ化します。
(5)上記(3)でjoinしたsubtblから取得したデータの平均値を計算します。
(6)当たり前ですが、測定時間でソートします。

temperature を CAST しているのは、temperatureが数値型ではなく文字列型のためです。
最初に、あまり深く考えずに、文字列型にしてしまったので、こんなことになっています。
dayhhmm はグラフ化する時に横軸で使用するためです。

で、得られたデータをグラフ化したら、こんな感じになりました。

カテゴリー: Webコンテンツ | Raspberry Piで温度計測(その2) はコメントを受け付けていません。

Let’s EncryptのTLS-SNI-01無効化

色々あって、Let’s EncryptはTLS-SNIを無効にしますよと、メールが届いていました。
当たり前ですが、放置するわけにもいかんので対応しました。

以下、備忘録代わりです。

といっても、
https://certbot.eff.org/
にアクセスして、Webサーバとディストリビューションを選ぶと、手順が表示されます。
それに従って実行するだけですが…

カテゴリー: サーバーまわり | Let’s EncryptのTLS-SNI-01無効化 はコメントを受け付けていません。

Raspberry Piで温度計測と在席確認

取引先の方から、室温を測ってグラフ化したいんだけど…という相談を受けました。
その話は実施には至らなかったのですが、いろいろ調べてみると、温度センサーは安価でしかもAmazonあたりでも売られています。
また、ぐぐってみると、それほど難しい作業でもないようです。

ということで、ユニバーサル基板や端子台などを買ってきて、組んでみることにしました。
なんだかんだで20年ぶりくらいの電子部品の半田付けです。
買ってきたばかりの半田ごて、最初にハンダをなじませることをしなかったもんで、すぐに黒さびが吹いてしまうというチョンボからのスタートです。
すったもんだがありましたが、三本の温度センサーのプローブと人感センサーを取り付けました。


温度センサーと人感センサーの出力を10分間隔で取得して、データベースに保存させて、それをグラフ化するというプログラムを組んでみました。
これらのプログラムはPHPで組んでいます。

グレーの網掛けの部分は、僕がPCの前にいるということを示しています。
グラフの生成は、Chart.jsを使用しました。

これはなかなか楽しいです。

カテゴリー: その他 | Raspberry Piで温度計測と在席確認 はコメントを受け付けていません。

mpcbridge ver 5.8 リリース

mpd(Music Player Daemon)のリモコンとして動作するWebアプリ、mpcbridge ver 5.8をリリースしました。

mpcbridgeの詳細は、こちらをご覧ください。

↓↓ダウンロードはこちら
https://mpcbridge.fourthgate.jp/files/download/mpcbridge.zip

ver 5.7から以下の修正、変更を行っています。
1) タグにアルバムタイトルが空または存在しない場合に、DB構築でエラーになる問題を解消
2) mpdの楽曲DBをMySQLデータベースにインポートする際のパフォーマンスをちょっとだけ改善
3) フリーテキスト検索の処理を、CakePHP3本来の構造に近づけました
4) アーティスト情報を更新
5) CakePHPコアを3.6.14にアップデート

カテゴリー: PCオーディオ, サーバーまわり | mpcbridge ver 5.8 リリース はコメントを受け付けていません。

Raspberry Pi 3をTimeMachine用に

これまでRaspberry Pi 3 BをTimeMachine用に使っていましたが、これをRaspberry Pi 3 B+に変更しました。
設定内容を備忘録として…

公式サイトからRaspbian Stretchをダウンロードして、SDカードに書き込みます。
Raspberry Piを起動させて、必要があればネットワークの設定を行います。
僕は、IPアドレスをdhcpから固定に変更しました。

まずは、sshを起動させます。

sudo systemctl enable ssh.service
sudo systemctl start ssh.service

とりあえず、インストール済みパッケージを更新。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install rpi-update

次に、netatalkのインストールに必要なツール類をインストールします。

sudo apt-get install build-essential

次は、netatalkのビルドに必要なライブラリ類をインストールします。
詳細は、http://netatalk.sourceforge.net/wiki/index.php/Install_Netatalk_3.1.11_on_Debian_9_Stretchを参照してください。

sudo apt install libevent-dev libssl-dev libgcrypt20-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmariadbclient-dev avahi-daemon libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libio-socket-inet6-perl tracker libtracker-sparql-1.0-dev libtracker-miner-1.0-dev

netatalkのソースコードをダウンロードして展開し、ビルドします。

./configure \
–with-init-style=debian-systemd \
–without-libevent \
–without-tdb \
–with-cracklib \
–enable-krbV-uam \
–with-pam-confdir=/etc/pam.d \
–with-dbus-daemon=/usr/bin/dbus-daemon \
–with-dbus-sysconf-dir=/etc/dbus-1/system.d \
–with-tracker-pkgconfig-version=1.0

make
sudo make install

ひとまずインストールは完了。
次は、TimeMachine用のHDDの接続とフォーマットして、マウントします。
ここでは、/mnt/timemachine としておきます。

netatalkの設定ファイル( /usr/local/etc/afp.conf )を編集します。

[Global] セクションに、以下を追加します。

mimic model = AirPort

これで、アイコンがTime Capsuleになります。
また、以下を追加します。

[RaspberryTimeMachine]
path = /mnt/timemachine/backup
time machine = yes

以上で設定は終了したので、netatalkを起動します。

sudo systemctl enable avahi-daemon
sudo systemctl enable netatalk
sudo systemctl start avahi-daemon
sudo systemctl start netatalk

Macからは、これでTime Machine先に選べるはず。

カテゴリー: サーバーまわり | Raspberry Pi 3をTimeMachine用に はコメントを受け付けていません。

オープンソースカンファレンス2018 Fukuoka

今年もオープンソースカンファレンスに参加してきました。
百道のSRPで開催だったのですが、学生さんが多かった印象です。
オジサンは少なかったですが、ラズパイオーディオの話だけはオジサンがそれなりにいたような…

お昼過ぎまでしか会場にいなかったんで、そんなに沢山の話は聞けませんでした。

MySQL 8のGIS系のお話は、緯度経度が測地系によって微妙に違う話や、平面に投影する座標系の話とか、昔地理の授業で習ったような話で面白かった。
また、その昔ガラケーの位置情報で今いる場所を調べようとしてた時に、いくつかの座標系があって面倒だったのですが、その経緯も知れました。
また、東経135度の話も面白かった。建前上は、明石の天文台が東経135度にあることになっているけど、地図で使われている測位系では明石市役所付近が東経135度らしい。
もっとも、米軍が使っているWGS84と、日本が使っているJGD2011では、またすこし違うらしいですが。
というわけで、MySQLのGIS関数では、どの測地系を使うかの設定もできるようになってるとか。

git超入門も拝聴いたしました。
gitは使ってはいるものの、pullして、ちょこちょこっと変更して、commit、pushしているだけなので、わかっているとは到底言いがたく(笑)
大変勉強になりました。。

BaserCMSは、いよいよCakePHP3化ということだそうです。
一部のホスティングサービスでは、いまだにPHP 5.4が使われている現状では、CakePHP3ベースに移行するのはどうかということだったそうです。
さすがに最近はそれもなくなり、PHP7が主流になりつつあるから、いよいよ移行ということでした。
最先端の案件だと、こんなことは気にしなくて良いのでしょうが、中小企業のWebサイトだと、ずっと昔からのホスティングサービスを使っていたりしますからね。
次バージョンでは、プラグイン化してcomposerでインストールできるようにするということでした。
とはいえ、Cakeは2から3でかなり変わるので、大変だろうなあ。
僕もCakeの2から3では四苦八苦しています。。。

カテゴリー: その他 | オープンソースカンファレンス2018 Fukuoka はコメントを受け付けていません。

CakePHP3.6 で画像表示

備忘録として…

CakePHP3で画像をストリームとして吐き出す場合のコード。
この辺、CakePHPがアップデートする度に、結構変わってて、ググっても古い情報が結構ヒットするので…

ファイルを吐き出す場合

use Zend\Diactoros\Stream;

$this->autoRender = false;
$imageinfo = getimagesize( $imagefile );
$stream = new Stream($imagefile, ‘rb’);
$response = $this->response->withType($imageinfo[‘mime’]);
$response->getBody()->write($stream);
return $response;

データベースから読み込んだ場合、

$this->autoRender = false;
$data = $this->Model->get( $id );
$imagestream = stream_get_contents($data->image);
$response = $this->response->withType($data->mime);
$response->getBody()->write($imagestream);
return $response;

カテゴリー: 未分類 | CakePHP3.6 で画像表示 はコメントを受け付けていません。

Microsoft Edgeのふしぎなバグ

MicrosoftのWebブラウザーEdgeでちょっとおかしな現象に遭遇しました。

Basic認証されたページへ、target=”_blank”でジャンプされた場合、Basic認証が効かずにエラーになって何も表示されません。
同一ページで遷移した場合には、正常にBasic認証に進みます。

ちょっと分かりにくいですが…

↓こちらは正常に動作します。

<a href=”Basic認証がかかったページのURL”>すすむ</a>

↓これだとエラーになります。

<a href=”Basic認証がかかったページのURL” target=”_blank”>すすむ</a>

謎です。
この現象はWindows 10のみで、WIndows 8ではおきないみたいです。

同じ現象に遭遇した方いるようです。
https://answers.microsoft.com/ja-jp/edge/forum/edge_other-edge_win10/%EF%BD%85%EF%BD%84%EF%BD%87%EF%BD%85/89da0630-31d6-42ba-ad67-b01d8df9aad2

カテゴリー: Webコンテンツ | Microsoft Edgeのふしぎなバグ はコメントを受け付けていません。