a tomato

トマトが大好きです

raspberry pi zero whをUSB経由でインターネットに接続する

前回はraspberry piにOSインストールまで行いました。 このままだとraspberry piIPアドレスがなく、インターネットに接続出来ない状態のままとなり困るので、 USBを通してインターネットに接続する設定を行います。

続きを読む

raspberry pi zero whにOSをインストールする

raspberry pi zeroの最新版であるwhを購入したので、インストールしてカメラ動作の確認、各種センサーの動作を確認まで行います。 今回のテーマは、OSのインストールです。

f:id:kzdev:20180811204021j:plain

購入した機種

機材使用は以下のページの通りです。
whはGPIOが標準搭載された機材なので、センサー周りの追加なども簡単に行うことが出来ます。

www.switch-science.com

続きを読む

monitを使ったサービス簡易監視の設定

本格的な監視をするならzabbixですが、スモールサービスで簡易な監視を行う場合はmonitがお手軽です。

実行環境

CentOS Linux release 7.5.1804 (Core)

インストール

# epel install
[root@vmhost01 ~]# yum install -y monit
Installed:
  epel-release.noarch 0:7-11                                                                                                                                                                                        

Complete!

# monit install
[root@vmhost01 ~]# sudo yum -y install monit
Installed:
  monit.x86_64 0:5.25.1-1.el7                                                                                                                                                                                       

Complete!

ディレクトリ構成

path 役割
/etc/monitrc monitの基本設定
/etc/monit.d 各種監視の設定

プロセス監視

httpdの設定を例にした場合は、以下のように設定する

[root@vmhost01 ~]#  vim /etc/monit.d/httpd
check process httpd with pidfile /var/run/httpd/httpd.pid
        start program = "/bin/systemctl start httpd"
        stop program  = "/bin/systemctl stop httpd"
        if failed
          host localhost
          port 80
          protocol http
        then restart

リソース監視

リソースを監視する設定を例にした場合は、以下のように設定する

[root@vmhost01 ~]#  vim /etc/monit.d/sysresrc
check system 127.0.0.1
## cpu/mem check
 if loadavg (15min) > 2 then alert
 if cpu usage (user) > 90% then alert
 if memory usage > 80% then alert 
## service restart when high load
 if loadavg (1min) > 2 then exec "/etc/init.d/postgresql restart" 
 if loadavg (1min) > 2 then exec "/etc/init.d/httpd restart"
 
##disk check
check device disk_/ with path /
 if space usage > 90% for 5 times within 15 cycles then alert 
 if space usage > 98% then stop

構文チェック

設定した記述が正しいかチェックを行う。

[root@vmhost01 ~]# monit -t
Control file syntax OK

起動設定

# monit起動
[root@vmhost01 ~]#  systemctl start monit

# monit自動起動設定
[root@vmhost01 ~]#  systemctl enable monit

状態確認

現在サーバがどのような状態なのか、以下のコマンド結果で確認が可能です。

[root@vmhost01 ~]# monit status
Monit 5.25.1 uptime: 1m

Process 'httpd'
  status                       Initializing
  monitoring status            Initializing
  monitoring mode              active
  on reboot                    start
  data collected               Fri, 10 Aug 2018 22:33:32

System 'vmhost01'
  status                       OK
  monitoring status            Monitored
  monitoring mode              active
  on reboot                    start
  load average                 [0.05] [0.05] [0.05]
  cpu                          0.3%us 0.3%sy 0.0%wa
  memory usage                 694.2 MB [37.8%]
  swap usage                   7.5 MB [0.4%]
  uptime                       13d 12h 11m
  boot time                    Sat, 28 Jul 2018 10:22:23
  data collected               Fri, 10 Aug 2018 22:33:32

ansibleを使うためのssh周りの設定

ansibleを使う時に必要なsshの設定です。

SSH用の公開/秘密鍵生成

兎にも角にもまずは、鍵認証によるログインが必要ですので、 公開鍵と秘密鍵を作成します。

% ssh-keygen -t rsa -b 4096                        
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kzdev/.ssh/id_rsa): /Users/kzdev/.ssh/iscdhcp/id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/kzdev/.ssh/iscdhcp/id_rsa.
Your public key has been saved in /Users/kzdev/.ssh/iscdhcp/id_rsa.pub.
The key fingerprint is:
SHA256:mQUfAGwyCJ68bFD9gQvkozUTZNiPZyhiTknP5+Wgr4s kzdev@MacBook-Pro
The key's randomart image is:
+---[RSA 4096]----+
|.**o o..o..      |
|+==.= +  o .     |
|o+X= * .  o      |
|=*+*=o.. +       |
|*= o+ + S        |
|.. . . .         |
|    .            |
|  .  .           |
| E oo            |
+----[SHA256]-----+
公開鍵を構築対象サーバに登録

作成した公開鍵を構築対象となるサーバに登録します。

% ssh-copy-id -i  /Users/kzdev/.ssh/iscdhcp/id_rsa.pub  root@10.211.55.6          
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/kzdev/.ssh/iscdhcp/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.211.55.6's password: 

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'root@10.211.55.6'"
and check to make sure that only the key(s) you wanted were added.
SSH接続確認

パスワード入力無しでSSH接続が可能となることを確認します。

% ssh -i /Users/kzdev/.ssh/iscdhcp/id_rsa root@10.211.55.6            
Last login: Sat Aug  4 01:34:38 2018 from 10.211.55.2
[root@localhost ~]# 
構築対象側のSSH設定

これで最低限の準備は整いましたが、基本は鍵認証でログインするのでパスワード認証をOFFにします。セキュリティ観点においても、パスワード認証は様々な脆弱性に晒されるので、やはりオフにしておいた方が良いと思います。

[root@localhost ~]# sed -i -e 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
[root@localhost ~]# sed -i -e 's/^ChallengeResponseAuthentication yes/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config

iptablesでアクティブモードFTPが通るように設定する

ftpクライアント側でiptablesを利用するケースが発生し、ftp通信を許可する設定(tcp:20, tcp:21)をしたところ、ls等のデータコネクションで通信を行うコマンドがエラーになってしまいました。

ftp 192.168.10.1
Connected to 192.168.10.1 (192.168.10.1).
220 (vsFTPd 2.2.2)
Name (192.168.10.1:kzdev): xxxxx
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
425 Failed to establish connection.

これは、クライアント側からデータコネクションを確立にいくため、ランダムポート(1024〜65535)から動的に選択されてしまいます。そのため、tcp:20, tcp:21を開いてもランダムポートでの通信が通らないのです。

これだと、通信を行うには、iptablesを無効にしてしまうか、ランダムポートを全て許可しなければならず、ファイアウォールの意味をなさなくなってしまいます。 こんな時に使えるのが、ip_conntrack_ftpです。

このモジュールは、制御ポートを通してクライアントから通知されるデータコネクションやパッシブモードで利用するポート番号を自動的に開閉してくれる便利なモジュールです。

まずは、モジュールが存在しているか確認を行います。

$ lsmod | grep ftp

ない場合は、以下を実行してカーネルモジュールをロードする

$ modprobe ip_conntrack_ftp 
$ lsmod | grep ftp
nf_conntrack_ftp       11953  1 nf_nat_ftp
nf_conntrack           79206  4 nf_nat_ftp,nf_nat,nf_conntrack_ipv4,nf_conntrack_ftp

参考

Linuxコマンド集 - 【 modprobe 】カーネルモジュールをロードまたはアンロードする:ITpro

iptablesの起動スクリプトである/etc/sysconfig/iptables-configに以下の行を記述する。

IPTABLES_MODULES="ip_conntrack_ftp"

iptablesにモジュールをロードさせるため、サービスを再起動させる。

$ service iptables restart

これで、iptablesが有効な状態でFTP接続とデータコネクションの通信が無事に通るようになりました。

PostgreSQL10をansibleでインストールする

先日、PostgreSQL10がリリースされました。
早速インストールして追加機能を試したいのですが、DBは試験環境等々で何度もインストールが 発生するのでansbileで構築を自動化します。

f:id:kzdev:20171018002149p:plain

続きを読む

macOSX Hish sierraにアップデート後にvimが起動しない件について

f:id:kzdev:20171015232735p:plain

先日、macOSXにアップデートした後にvimを起動した所、以下のエラーで起動不能となっていました。

dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
  Referenced from: /usr/local/bin/vim
  Reason: image not found
Abort trap: 6

どうも、homebrewでinstallしている場合は、macvimをアップデートする必要があるとのことなのでアップデートするとまたもエラーが、、

$brew upgrade macvim

** BUILD FAILED **


The following build commands failed:
        StripNIB English.lproj/MainMenu.nib
(1 failure)
make[1]: *** [macvim] Error 65
make: *** [first] Error 2

READ THIS: https://docs.brew.sh/Troubleshooting.html

Error: GitHub
The GitHub credentials in the macOS keychain may be invalid.
Clear them with:
  printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
Or create a personal access token:
  https://github.com/settings/tokens/new?scopes=gist,public_repo&description=Homebrew
and then set the token as: export HOMEBREW_GITHUB_API_TOKEN="your_new_token"

メッセージの通り、キーチェイン内のgitに関する認証が無効になっているようなので、以下の操作で一度削除してからgit configにkeychainの情報を設定します。

$ printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase 

これで、リトライするとまたエラーが・・

$ brew upgrade macvim                                                                                                                                                                                                                                                                                                +[master]
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
solr                                                                                                                                                            solr@5.5
==> Deleted Formulae
solr@5.4

==> Upgrading 1 outdated package, with result:
macvim 8.0-138
==> Upgrading macvim --with-lua
==> Downloading https://github.com/macvim-dev/macvim/archive/snapshot-138.tar.gz
Already downloaded: /Users/k-goto/Library/Caches/Homebrew/macvim-8.0-138.tar.gz
==> ./configure --with-features=huge --enable-multibyte --with-macarchs=x86_64 --enable-perlinterp --enable-rubyinterp --enable-tclinterp --enable-terminal --with-tlib=ncurses --with-compiledby=Homebrew --with-local-dir=/usr/local --enable-cscope --enable-luainterp --with-lua-prefix=/usr/local/opt/lua --enable-python
==> make
Last 15 lines from /Users/k-goto/Library/Logs/Homebrew/macvim/02.make:
    cd /tmp/macvim-20171016-46768-q6ljo1/macvim-snapshot-138/src/MacVim
    builtin-copy -exclude .DS_Store -exclude CVS -exclude .svn -exclude .git -exclude .hg -strip-debug-symbols -strip-tool /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip -resolve-src-symlinks /tmp/macvim-20171016-46768-q6ljo1/macvim-snapshot-138/src/MacVim/icons/MacVim.icns /tmp/macvim-20171016-46768-q6ljo1/macvim-snapshot-138/src/MacVim/build/Release/MacVim.app/Contents/Resources

CopyPlistFile build/Release/MacVim.app/Contents/Resources/KeyBinding.plist KeyBinding.plist
    cd /tmp/macvim-20171016-46768-q6ljo1/macvim-snapshot-138/src/MacVim
    builtin-copyPlist --outdir /tmp/macvim-20171016-46768-q6ljo1/macvim-snapshot-138/src/MacVim/build/Release/MacVim.app/Contents/Resources -- KeyBinding.plist

** BUILD FAILED **


The following build commands failed:
        StripNIB English.lproj/Preferences.nib
(1 failure)
make[1]: *** [macvim] Error 65
make: *** [first] Error 2

xcodeが更新されていなかったので、更新してリトライしたところ、以下の通り正常にインストールできました。

Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
faac                                                                            imagemagick@6                                                                   menhir                                                                          snort

==> Upgrading 1 outdated package, with result:
macvim 8.0-138
==> Upgrading macvim --with-lua
==> Downloading https://github.com/macvim-dev/macvim/archive/snapshot-138.tar.gz
Already downloaded: /Users/k-goto/Library/Caches/Homebrew/macvim-8.0-138.tar.gz
==> ./configure --with-features=huge --enable-multibyte --with-macarchs=x86_64 --enable-perlinterp --enable-rubyinterp --enable-tclinterp --enable-terminal --with-tlib=ncurses --with-compiledby=Homebrew --with-local-dir=/usr/local --enable-cscope --enable-luainterp --with-lua-prefix=/usr/local/opt/lua --enable-python
==> make
 /usr/local/Cellar/macvim/8.0-138: 2,139 files, 34.1MB, built in 3 minutes 1 second

MacはOSの更新が入る度に色々と動かないものが出るので、時間のある時にアップデートするようにしないといけないですね。