次のトピックは

次のトピックは監視系で行こうとだいぶ前からユーザとして触ったりして気になっていた Prometheus と Grafana で監視を組もうと考えて手を出してみた。

Prometheus本体のインストールと監視対象にNode Exporterの仕込みはそんなに大変じゃないけど、Grafanaでグラフを用意するのがとても面倒だった~

Node Exporterのバージョンがバイナリパッケージでダウンロードしたもの、バージョン違いのUbuntu/Debianでaptでインストールしたもので違っていてmetricsの名前が微妙に違っていてそこに気がつくまでにも少し時間がかかったのと、それによるGrafanaのグラフの定義にまごついたのが面倒だった要因。

 

カテゴリー: その他, テック | コメントする

Pythonの環境が壊れた?

先日、とあるサーバで実行していたPythonの環境がなぜだかおかしくなって、ある日を境にPythonを一部に使って動いているスクリプトが正常動作しなくなったんですよ。おかしいなと思って、同様にPythonで動いているaws cliのコマンドを叩いてみると、単に実行しただけなのにStack吐いてエラーになってしまう状況。

何かでPythonの環境が壊れたかと考えてaptで修復しようと考えて、改めてaptでPythonをインストールしようとしても、こんどはaptの中の処理でPythonが動くところでエラーになりaptも正常に動作しない。これ以上環境を変更するような作業をすると、修復できない状況に陥りかねないのと、幸いPythonが絡んでいないコマンド関係は特に問題が起きていないので、該当する処理は別のサーバに移動させたりして当面の問題は回避。

とは行っても壊れたままだと色々問題が起こりかねないので解決の為の調査は継続。

しばらくして、改めて修復しようとaptを実行してみたり、単にPythonを起動してみたりして出てくるエラーメッセージを検索にかけて調べてみると、出てくる記事の1つに光明が。そのエラーメッセージは

EOFError: marshal data too short

というもので、その記事の中には「.pycファイルが原因で、削除すれば解消できる」旨が書かれていました。「そうか実行時の中間キャッシュファイルか!」と言う事でエラーになる状況を(何となく)理解。

というのも上記の環境がおかしくなったサーバで、丁度エラーが出始めたのと同じタイミングに一回ディスクフルの障害をやらかしていて、そのタイミングでPython関連のスクリプトが実行されていたらキャッシュも壊れていてもおかしくはない。ただ、この情報を見るまでは、ディスクフルになったとしても逆にそのタイミングで環境を変更するようなapt update/upgradeは実行していないし、それに準ずるような作業などもしていないのでPythonの実行環境がおかしくなるなんてことは通常は考えられないと調査の線から少し話しておいたんですよ。実行時の中間キャッシュであれば実行のタイミングによっては更新されることもあるだろうし、更新のタイミングでディスクフルになったら変な状態のキャッシュファイルなってしまう事もありそう。

早速.pycフィあるを削除する準備に。確認したところ、このファイルはとりあえず削除しても問題ないらしく、仮に問題のない.pycを消したところでその後実行されるときに再度作られそうなので副作用もキャッシュが消えたことで若干実行に時間がかかるかもしれない程度。そういうわけで、早速サーバ全体で.pycファイルを探して削除!

sudo find / -name *.pyc | sudo xargs -I {} rm {}

で、改めてPythonを空実行してみると、先に出ていたエラーメッセージは出なくなり、別のエラーが・・・。と行っても見慣れたエラーでモジュールが足りないというやつでこれは多分aptを-fつけて実行すれば大丈夫!?な筈。

sudo apt-get -f upgrade

ついでにupgradeもしちゃう勢いで実行すると.pycファイルを消す前は途中でエラーがでて実行できなかった処理が止まる事無く処理完了。

おそるおそる今度はaws cli(awsコマンド)を空実行してみると、何のエラーもでず情報が表示されて正常終了。止めていたPythonを利用するスクリプトも問題でないし、aws cliも使える!ということで回復、一件落着!

いやぁ~、キャッシュって怖いですねw

 

カテゴリー: テック | コメントする

Redmine を Respberry Pi にインストール

Redmine内蔵のWikiが個人的に一番馴染むという理由で、低コストでWikiを使いたい時にRedmineを使っているのですが、これまで使ってきたRedmineのバージョンが古くて新しくしたいという理由で、Raspbian(Respberry Pi)にRedmineをインストールした時の作業記録です。

だいぶ前にインストールした時は、真面目にインストール手順を調べず、勢いだけでインストールして動かしてしまったので、今回は色々と確認してそれなりに手間はかかるけど色々応用が効きそうな手順を調べてみました。

0.前提&準備

  • Respberry Pi に Raspbian をインストール』の手順でRaspberry PiにRaspbianをインストールしたものを用意
  • Rubyより上のレイヤーは利用するバージョンを選択したいので、aptを使わずにインストール、今回初代のRaspberry Pi Model Bにインストールしたんですが、バイナリパッケージのインストール以外にもソースのコンパイルとか入るので初代Model Bだと時間がかかるかかる。さらにビルド途中で512MBのメモリを使い切ってしまってほぼフリーズ状態になり、Swapを増強する事に。
    • 因みにRaspberry Pi4で作業した時はある程度の時間はかかるけれど、Swap追加することもなく、想定よりはあっさり。
  • データベースはMySQLを使おうかと思いましたが、インストールする初代Raspberry Piはメモリが512MBしかないのでSQLiteを選択。個人的かつ限定的な用途でしか使わないし。
  • 参考URL

1.Ruby以外の必要ソフトウェアをインストール

  • aptでRuby関連(Ruby,Rails,Redmie)以外の必要なソフトウェアをインストール
    • postfixはとりあえずローカル配送を選択して、
      後で必要に応じてちゃんと設定してください
# apt install build-essential git subversion postfix \
 libsqlite3-dev apache2 apache2-dev libssl-dev \
 libreadline-dev libcurl4-openssl-dev libapr1-dev \
 libaprutil1-dev fonts-ipafont-gothic imagemagick \
 libmagickwand-dev

2.グループの作成

  • 深く考えずにグループ作成
# groupadd ruby
# usermod -a -G ruby your-account

3.rbenvのインストール

  • 任意のバージョンのrubyを楽してインストールするべくrbenvをインストール
  • 深く考えずにコマンドを叩く、あまり悩む必要のある分岐はない、と思う
# cd /usr/local/
# git clone git://github.com/sstephenson/rbenv.git rbenv
# mkdir rbenv/shims rbenv/versions rbenv/plugins
# cd rbenv/plugins/
# git clone git://github.com/sstephenson/ruby-build.git ruby-build
# cd ruby-build/
# ./install.sh

4.rbenvの設定

  • rbenvが宜しく動作してくれるように設定
  • 最後のechoでPATHに/usr/local/rbenv/binが入っていればここまでは大成功
# cd /usr/local/
# chgrp -R ruby rbenv
# chmod -R g+rwxX rbenv
# echo 'export RBENV_ROOT="/usr/local/rbenv"'     >> /etc/profile.d/rbenv.sh
# echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
# echo 'eval "$(rbenv init -)"'                   >> /etc/profile.d/rbenv.sh
# source /etc/profile.d/rbenv.sh
# echo $PATH

4.rubyをインストール

  • rbenvを使って任意のバージョンのRubyをインストール
  • インストールできるRubyを確認
# rbenv install --list
  • リストからVer.2.6.4を選択してインストール
    • コンパイルがあるし、メモリ512MBだし、だいぶ時間かかります
# rbenv install -v 2.6.4
  • インストール出来たか確認して、それを(rbenv管理下のユーザが)全体で使えるように選択
# rbenv versions
# rbenv global 2.6.4
  • rehashして、選択が有効になっていることを確認
# rbenv rehash
# rbenv versions
  • さらにRubyを起動してバージョンを確認
    • Ver 2.6.4だよね?!
# ruby -v

5.Rails(Ruby on Rails)のインストール

  • まずはbundlerをインストール
  • 続いてインストールできるRailsのバージョンを確認
# gem install bundler
# gem query -ra -n "^rails$"
  • そしてRailsをインストール
    • SQLite3のモジュールもここでインストール
# mkdir /usr/local/rails_v5.2.3
# cd /usr/local/rails_v5.2.3
# bundle init
# echo 'gem "rails", "5.2.3"' >> Gemfile
# gem install sqlite3 -v '1.3.11'
# bundle install --without development test --path vendor/bundle

6.スワップを増強

  • ここで思い出したかのようにスワップを増強します
  • Raspbianをインストールしてそのままだと多分スワップは100MBしか確保されておらず、そのまま次のPassengerのインストールに進むとメモリ512MBのRaspberry Piだと途中でメモリ不足で止まります
  • ので、重くなっても処理が完了するようにスワップを1GB程度確保
  • /etc/dphys-swapfileを下の内容に修正して、おもむろにRaspberry Piをリブート!
    • 100MBしか確保していない CONF_SWAPSIZE の設定行をコメント
    • CONF_SWAPFACTORを3に設定(有効メモリの3倍のスワップを確保するという設定)
    • CONF_SWAPSIZEを1024(MB)に設定でも良いかもしれない
      • Passengerのビルド中、最高でもスワップの消費量はtopコマンドによる確認800MB程度だった
#CONF_SWAPFILE=/var/swap
#CONF_SWAPSIZE=100
CONF_SWAPFACTOR=3
#CONF_MAXSWAP=2048

7.Passengerのインストール

  • Passengerのインストールです
  • 今回の手順の中で最も時間がかかる処理だと思う、先ほどスワップを追加したとは言え、メモリは512MBだし、シングルコアの初代Raspberry Pi Model Bには過酷な処理です。
  • gem install passengerの処理時間は大したことないです、passenger-install-apache2-moduleが果てしなく時間がかかります。果てしなくと言っても半日あれば終わります、多分。
# cd /usr/local/
# gem install passenger
# passenger-install-apache2-module --auto

8.Redmineのインストール

  • インストールはSubversionのリポジトリをチェックアウトすれば良いので楽。あとは設定ファイルを二つほど用意して後、順にコマンド実行
# svn co http://svn.redmine.org/redmine/branches/4.0-stable /var/lib/redmine
# vi /var/lib/redmine/config/database.yml
# vi /var/lib/redmine/config/configuration.yml
# bundle update
# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate
# RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
# chown -R www-data:www-data /var/lib/redmine
  • /var/lib/redmine/config/database.yml
production:
adapter: sqlite3
database: /var/lib/redmine/db/redmine_default
encoding: utf8
  • /var/lib/redmine/config/configuration.yml
    • your.domain は適当なものを設定
default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: 127.0.0.1
    port: 25
    domain: your.domain

rmagick_font_path: /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf

9.Apacheの設定

  • 設定ファイルを新規作成or修正
    • 設定ファイルの内容は下にあります
  • 変更後Apacheをリスタート
    • リスタート前にapachectl configtestで設定のチェックするのもアリ
# vi /etc/apache2/mods-available/passenger.load
# vi /etc/apache2/conf-enabled/passenger.conf
# vi /etc/apache2/sites-available/000-default.conf
# a2enmod passenger
# a2enconf passenger
# systemctl restart apache2
  • /etc/apache2/mods-available/passenger.load
    • passenger-install-apache2-module –snippet を実行した時のLoadModule部
LoadModule passenger_module /usr/local/rbenv/versions/2.6.4/lib/ruby/gems/2.6.0/gems/passenger-6.0.4/buildout/apache2/mod_passenger.so
  • /etc/apache2/conf-enabled/passenger.conf
    • passenger-install-apache2-module –snippet を実行した時のIfModuleブロック
    • 通常のサーバでは PassengerStartTimeout 設定は不要だけど(無くても基本的に問題ない)、Raspberry PiはPassengerの起動に時間がかかりすぎるのでTimeoutをかなり長くする為に追加設定
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.6.4/lib/ruby/gems/2.6.0/gems/passenger-6.0.4
  PassengerDefaultRuby /usr/local/rbenv/versions/2.6.4/bin/ruby
  PassengerStartTimeout 600
</IfModule>
  • /etc/apache2/sites-available/000-default.conf
    • ServerNameが無いって怒られたら適当に設定してください
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/lib/redmine/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/lib/redmine/public/">
        Options FollowSymlinks Includes
        AllowOverride All
        AddType text/html .html
        Require all granted
    </Directory>

</VirtualHost>

10.テストアクセス

  • http://[インストールしたRaspberry PiのIPアドレス or FQDN]/
  • 上のURLでアクセスしてRedmineへの動作&接続を確認
  • 遅いモデルだったりメモリ搭載量が少ないRaspberry PiだとApache起動直後はPassengerの反応が返ってくるまで落ちているんじゃないか?と思うほど時間かかる
  • インストール直後の管理ユーザ&パスワードはadmin/adminです

 

カテゴリー: PC関連, テック | コメントする

Respberry Pi に Raspbian をインストール

自宅で動かしているRaspberry PiのOS(Raspbian)がだいぶ古くなったので新しくするべくことにしたのでインストール手順のメモ

0.前提&準備

  • 以下の手順は初代Raspberry Pi Model B, Raspberry Pi 2 Model B とRaspberry Pi 4 Model Bで確認
  • SDカードへの書き込みと初回起動時のSSH接続、有線LANのIPアドレスを固定化する作業用にLinuxマシンを用意(作業後は普段の作業PCからSSH接続)
  • 初回起動時に楽にSSH接続できるように作業用Linuxマシンにはavahi-daemonを導入(IPアドレスを調べるの面倒だからw)
# apt install avahi-daemon
  • インストール時に接続する有線LANにはDHCPが稼働している事

1.OS(Raspbian)入手

  • 公式サイトのダウンロードページからイメージを入手
    • https://www.raspberrypi.org/downloads/raspbian/
    • 以下の手順は、(私が)デスクトップは使わないので”Raspbian Buster Lite”のイメージをダウンロード
  • 作業用Linuxマシンで、wgetで最新版のRaspbianイメージをダウンロード
    • URLは配布サイトを確認
    • ダウンロードしたZIPファイルを解凍
      • 確認時点では2019-07-10-raspbian-buster-lite.imgというファイルができる
# wget https://downloads.raspberrypi.org/raspbian_lite_latest
# unzip raspbian_lite_latest.zip

2.OSイメージをSDカードに書込

  • ddでイメージファイルを書込み
    • 解凍したファイル名は2019-07-10-raspbian-buster-lite.img
    • SDカードのデバイスファイル名は/dev/sdc
    • ブロックサイズ(bs)は指定しなくても可
# dd if=2019-07-10-raspbian-buster-lite.img of=/dev/sdc bs=8192

3./bootパーティションにssh起動用にファイル作成

  • そのままだとsshdが起動しないので、起動時にsshdが起動するように/bootパーティションに”ssh”というファイルを作成
  • SDカードにイメージを書込後、/bootパーティションをマウントしてファイルを作成
  • 作るファイルは空でOK
# mount /dev/sdc1 /mnt/temp
# cd /mnt/temp/
# touch ssh
# cd ~
# umount /mnt/temp/

4.Raspberri PiにSDカードを差し替えて起動

  • Raspberri PiのSDカードスロットにイメージを書きこんだSDカードをセット
  • LANケーブルを差し込んでから、電源ケーブルを差して電源オン
  • ネットワークにはDHCPが機能していることが前提

5.初回起動後の設定の為のSSH接続

  • 作業用Linuxからsshコマンドで接続
    • ここで事前にインストールしたavahiが生きてきます
    • avahiについて詳細を知りたい人は別途調べてください
  • デフォルトで用意されているpiユーザでまずはログイン
    • パスワードは raspberry です
$ ssh pi@raspberrypi.local

6.Raspbianの更新

  • 本当にリリース直後でなければ更新が出ていると思うので更新
  • ついでに(私は)使わないnanoエディタを削除
    • vim-tinyで十分
  • さらについでに不要なパッケージを削除
    • autoremoveで依存関係にはずれたものを削除
$ sudo apt update
$ sudo apt upgrade
$ sudo apt remove nano
$ sudo apt autoremove

7.タイムゾーンとロケールの設定更新

  • タイムゾーンを日本(Asia/Tokyo)に設定
    • Geographic areaはAsiaを選択
    • Time zoneはTokyoを選択
  • ロケールをUTF-8に設定
    • Locales to be generated
      • en_GB.UTF-8 UTF-8を選択解除
      • ja_JP.UTF-8 UTF-8を選択
    • Default locale for the system environment
      • ja_JP.UTF-8 UTF-8を選択
$ sudo dpkg-reconfigure tzdata
$ sudo dpkg-reconfigure locales

8.ホスト名を変更

  • /etc/hostnameの内容を新しいホスト名に修正
    • 修正後、再起動等を実施して新しいホスト名が有効になったらavahiにも情報が行くので、新しいホスト名でsshなど接続できる
  • 修正したホスト名を/etc/hostsの127.0.1.1のホスト名に追加
$ sudo vi /etc/hostname
$ sudo vi /etc/hosts

9.IPアドレスを設定

  • IPアドレスを固定する為に/etc/dhcpcd.confを修正
    • Example static IP configurationのセクションがあるのでコメント参考に変更
$ sudo vi /etc/dhcpcd.conf
  • 例:変更前
    • dhcpcd.confの次の部分を修正
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
  •  例:変更後
    • IPアドレスは192.168.1.11
    • ネットワークマスクは/24 (=255.255.255.0)
    • デフォルトルートは192.168.1.1
    • DNSサーバは192.168.1.1
    • IPv6のアドレスは明示しない(無効にはしてない)
# Example static IP configuration:
interface eth0
static ip_address=192.168.1.11/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

10.ユーザ追加

  • piユーザをそのまま使うのは色々な理由で避けたいので普段用のユーザを追加
  • “yourname”は普段使いするユーザ名に置き換えてください
  • 普段使いするシェルがbashを設定(通常bashなので不要と言えば不要な手順)
  • piユーザは後ほどログイン出来ないようにするのでsudoを設定
$ sudo useradd -m yourname
$ sudo passwd yourname
$ sudo chsh -s /bin/bash yourname
$ sudo cp /etc/sudoers.d/010_pi-nopasswd /etc/sudoers.d/yourname
$ sudo vi /etc/sudoers.d/yourname
  • /etc/sudoers.d/yournameの内容
    • NOPASSWD設定つけてます
yourname ALL=(ALL) NOPASSWD: ALL
  • 追加したユーザでログインしてsudo設定確認
    • su で設定したパスワードを確認
    • sudo でsudo設定が意図通りか確認
$ su - baki
$ sudo date

11.piユーザの無効化

  • デフォルトで用意されているpiユーザを無効化
    • インターネットから接続できるように設定する場合は半ば必須かと
    • パスワードをデフォルトから十分な長さ&複雑さのものに変更
    • ログイン出来ないようにシェルをログイン不可シェルに変更
$ sudo passwd pi
$ sudo chsh -s /usr/sbin/nologin pi

12.リブート

  • 上記設定を再確認後リブート
  • 再起動後に追加したユーザでSSH接続できることを確認して初期導入完了

 

カテゴリー: PC関連, テック | 1件のコメント

忘れないうちに

忘れないうちにお試し無料期間と言うことで立ち上げたIDCFクラウドのRDBのインスタンスを落としておかないと!調子にのってプライベートでは絶対に立ち上げられないグレードのインスタンスタイプを上げちゃっていたから。

ギリギリまで試そうと始めは考えていたけど、結局常用しているゾーンでは未だに提供が始まっていないからあきらめました。

 

カテゴリー: テック | コメントする

IDCFクラウドのRDB

IDCFクラウドのRDBがリリースされて今日から使えるぞ!

「IDCフロンティア、オールフラッシュの高性能クラウドリレーショナルデータベースを提供」
https://www.idcf.jp/pressrelease/2018/20180531001.html

ということで、ブログのDBを自前で用意したDBサーバから移行させるべく試そうとしたんですが、よくよくみると開始当初の提供ゾーンがブログサーバ群をおいているゾーンはハブられており、順次展開ということになっているものの少なくとも現時点では移行できない・・・。

「IDCフロンティア、「データベース無料おためしキャンペーン」がスタート」
https://www.idcf.jp/pressrelease/2018/20180628001.html

DBインスタンスは7末まで無料だから試してみるのも手か~

 

カテゴリー: テック | コメントする

Google Compute Engine でサーバ

ふと先日、インスタンスタイプは一番下のグレードになりますが、Google Compute Engineでサーバが1台無料で使えることに先日気がつきました。というわけで、だいぶ前にGCPを少しかじったときに作ったアカウントがあるので、GCEでインスタンスを立ち上げること決定。

立てたインスタンスを最初は何に使うか考えずに立てたんですが、検討した結果NextCloud使って自分専用プライベートクラウドストレージを用意して使うことにしました。自分専用のクローズドなストレージなんでパフォーマンス的に非力なインスタンスでも最悪我慢すれば良いし!

あと、Google Cloud Storageに興味もあるのでそのベースインスタンスにも使える!

 

 

カテゴリー: テック | コメントする

新しいファイラーを調査中

現在とあるファイラーをメインで使っているんですが、結構長いことバージョンが更新されていないので、そろそろ新しいファイラーを探すタイミングなのかな?と考えて調査中。

何度か同じ事を考えて調査しているけれど、「As/R」なるファイラーが大変良さげ。
ただ、自分好みに設定を煮詰めていくのが大変そう。

 

カテゴリー: PC関連 | コメントする

Debian 9 (stretch)を使い始めてみた

Debian 9 (stretch) がリリースされて、IDCFクラウドのテンプレートにイメージが登録されたので既存の環境で使っているwheezyをリプレイスするべく、新しいインスタンスをDebian 9で立ち上げてみた。

IDCFクラウドのテンプレートを使ってのインストールなのでブートからストレージに流し込んで、初期設定までは特に作業はなく、メールで通知されたrootのパスワードでログインするところから開始。なんか、一番時間がかかるところはスキップ出来ている感じですね。

rootでログインしたあと、ひとまずやった事リスト

  • apt remove nano
    • > vim使うから要らない
  • apt update & apt upgrade
    • > もはやおまじない
  • 常用アカウントの作成
    • > 鍵ファイルの作成
    • authorized_keysの作成
    • > 自宅の拠点サーバから接続を楽するため
    • /etc/sudoers.d/ に設定ファイル追加
    • > いつもvisudoするのと悩む
  • apt install fail2ban
    • > 痛くない腹を探られるのは嫌だよね
  • 一般ユーザでもdmesgできるように/etc/sysctl.confに設定追記
    • > 出来ないメリットよりも出来るメリットの方が勝る

と、こんな事かな。

カテゴリー: テック | コメントする

『晴れた日には運河で昼寝』開設

新ブログ『晴れたには運河で昼寝』を開設!

そう言えば『晴れた日には運河で昼寝』は今までに何度か使った事があるような気がする・・・

 

カテゴリー: その他 | コメントする