無題の備忘録

よく知らない技術や試したこと記録するブログです。情報セキュリティ、ネットワーク、Linux関係で消化したことを記録します。すぐ詳細を忘れるので、優れた外部記憶装置にしたいです。

Windows 10 をキオスクモードを使って1つのアプリケーションしか実行できないようにしたい

やりたいこと

Windowsのデスクトップアプリケーションを、キオスクモードとして起動させて、ユーザにはそれ以外の操作をできないようにしたい

キオスクモードとは

Windows10をキオスク端末として使う場合のモードのことです。

キオスク端末(kiosk terminal)とは

街頭や店舗内に設置される、銀行ATMのような情報端末のことです。 よくあるのはタッチパネルを使って情報を表示する、博物館・美術館での案内や観光案内ようの端末などです。 キーボードとマウスを使う場合は、図書館などでの蔵書検索ですかね。

Windows 10のキオスクモード

一番簡単な方法としては、アカウントの設定から「割り当てられたアクセス」でアカウントとそれに対して起動するアプリケーションを登録することで、利用できます。

ただし、この方法はWindowsストアアプリしか対応していないようです。使いたいアプリケーションをWindowsストアアプリに登録することで、独自の業務アプリをキオスクモードに設定することはできるようです。 今回、Windowsストアアプリを登録したいので、この方法は使えなさそうです。

Windows10のデスクトップアプリケーションをキオスクモードのように使う方法

  1. Windowsキー+Rで、gpedit.mscを起動する。
  2. ユーザの構成 > 管理用テンプレート > システム > ユーザインタフェースのカスタム設定を開く
  3. 起動したいアプリケーションを、C:\からexeファイルまで指定して、OKにする

これで次にログインしたときに、指定したexeファイルのプログラムがキオスクモードで起動します。

Nginxを学ぶ1 - 導入編

Nginxとは

シンプル、軽量、高速なWebサーバとして人気なようだ。 オープンソースの最も有名なWebサーバとしてはApacheがあるが、その性能が不満だったために、性能を重視して開発されたのがNginxだとか。

Nginxの使い道

NginxとApacheはWebサーバとして競合にはあるが、この2つのWebサーバの用途は少し違った使われ方をするようだ。Apacheは動的で、比較的も重たい処理をするようなWebサービスを提供するため。Nginxは静的で、比較的小さい負荷の処理を高速に処理したい場合に使われる様子。

よく使われる構成

Nginxをリクエストを受け取るフロントエンドに配置し、そのバックに実質処理を行わせるサーバへのリクエストを転送させるように使う。 つまり、Nginxをロードバランサーとして使ったり、リバースプロキシとして使う構成だ。

主な機能

  • キャッシュによるリバースプロキシの高速化
  • ロードバランシング
  • モジュールアーキテクチャ
  • SSLサポート
  • HTTP/2サポート

その他の機能

  • ネームベースとIPベースの仮想サーバ
  • Keep-aliveとpipelined接続のサポート
  • URLリライト
  • レスポンスレートの制限
  • IPベースのGiolocation
  • ログフォーマットの変更

インストール方法(Ubuntu 16.04LTS)

$ sudo apt install nginx

インストール後、nignxは起動しているので、WebブラウザでインストールしたマシンのIPアドレスに接続すれば、次のような画面が表示される。

f:id:storkibis:20161127221610p:plain

ブラウザがなければ次のコマンドでhtmlを取得して確認できる

$ curl http://192.168.11.13
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

設定ファイルの場所

aptでnginxをインストールした場合は、下記に設定ファイルが配置されている。

$ sudo vi /etc/nginx/nginx.conf

Nginxの起動、停止、設定ファイルのリロード

もし起動していない場合は、次のコマンドで起動する

$ sudo nginx

次のコマンドで直ちにNginxを停止する

$ sudo nginx -s stop

次のコマンドで、現在処理中のプロセスを待って停止する(graceful shutdown)

$ sudo nginx -s quit

ただし、このコマンドの実行はNginxを起動させたユーザが実行しなければならない。

設定ファイルを変更したあとに、Nginxにシグナルを送信して、設定ファイルを読み込ませたい場合は、次のコマンドを実行する

$ sudo nginx -s reload

このシグナルを受け取ったら、新しい設定ファイルのシンタックスをチェックして、設定を適用しようとする。

もし、成功すれば、マスタープロセスは新しいワーカプロセスを起動させて、古いワーカープロセスに終了するようにメッセージを送信する。

それ以外の場合は、マスタープロセスは設定ファイルを読み込みをロールバックし、古い設定のまま動作を続ける。古いワーカプロセスはシャットダウンコマンドを受け取って、新しい接続の受付を終了させ、現在のリクエストのサービスを続け、それが終われば終了する。

現在のマスタープロセスは次のディレクトリのpidファイルに記載されている aptでnginxをインストールした場合は、下記に設定ファイルが配置されている。

$ cat /run/nginx.pid 
1236

killコマンドで、graceful shutdownをする場合は、次のコマンドを使う

$ sudo kill -s QUIT 1236

今回はここまで。

次世代なファイルシステム ZFS on Linux を学ぶ2 - 導入編

はじめに

今回からLinux上でのZFSの扱いを学んでいこうと思います。 OSはUbuntu Desktop 16.04LTSで、試しています。

ZFSのインストール

下記のコマンドで、必要なライブラリがインストールされます。

$ sudo apt install zfs

これで、zfsが使えるようになりました。 zfsとzpoolコマンドが入っているはずです。

$ zfs -h
Permission denied the ZFS utilities must be run as root.

rootで操作しないと動作しないようなので、rootになっておきます。ちなみに、-hのというプションはありませんでした。 zfs listコマンドで、ZFSファイルシステムを表示できますが、今はまだないです。

# zfs list
no datasets available

次のようにZFSストレージプールをzpool listコマンドで表示できますが、まだないです。

# zpool list
no pools available

ZFSのストレージプールとファイルシステムを作成する

ZFSはストレージプールという概念で、物理的なディスクを抽象化しています。 ZFSファイルシステムを作成するときに、物理的なディスクを意識せずに扱うことができます。

ここでは、パーティションを切ったり、ディスクを用意するのが面倒なので、ディスクの代わりにファイルを用意しました。 事前にddコマンドで、/tmp/disk1.img, /tmp/disk2.imgを作成します。

# dd if=/dev/zero of=/tmp/disk1.img bs=1024 count=10485760

zpool create コマンド

testpoolというミラー化されたストレージプールを作成するときは、zpool createコマンドを使います。

# zpool create testpool mirror /tmp/disk1.img /tmp/disk2.img

zpool listコマンド

作成されたZFSストレージプールを確認します。 ここで、/tmp/disk1.imgと/tmp/disk2.img はそれぞれ10GBです。2つのファイルにデータがミラーされて管理されます。

# zpool list
NAME      SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
testpool  9.94G    50K  9.94G         -     0%     0%  1.00x  ONLINE  -

zfs createコマンド

ZFSファイルシステムを作成するコマンドです。先ほど作成したtestpoolにファイルシステムを作成します。

# zfs create testpool/home

階層的にファイルシステムを作成して、それぞれZFSファイルシステムとして管理することができます。

# zfs create testpool/home/jeff
# zfs create testpool/home/bill

zfs listコマンド

zfs createコマンドを実行した後は、zfs listコマンドでZFSファイルシステムのリストを表示することができます。

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
testpool             122K  9.63G    19K  /testpool
testpool/home         57K  9.63G    19K  /testpool/home
testpool/home/bill    19K  9.63G    19K  /testpool/home/bill
testpool/home/jeff    19K  9.63G    19K  /testpool/home/jeff

今回はここまで

次世代なファイルシステム ZFS on Linux を学ぶ1 - 概要編

ZFS on Linuxとは

もともとSolaris上で実装されていた128bitファイルシステムとのことで、そのファイルシステムを、Linux上に実装したものがZFS on Linuxのようです。 ただし、ライセンスの制限があるためいくつか制限があるらしい。 いままでのファイルシステムよりも大容量のデータをシンプルに管理できるというのがメリットですかね。 その代償として、メモリをたくさん食うらしいです。 以下、適当にZFSの特徴を箇条書きします。

ZFS on Linuxの特徴

  • 128bitファイルのシステム。大容量のデータを格納できる。
  • シンプルなコマンドで、zfsとzpoolだけ覚えれば良い。
    • zfsコマンド
    • zpoolコマンド
      • 物理ディスクからストレージプールを作成
      • ディスクの冗長構成を設定
      • データ整合のチェック
  • ストレージプールという概念を用いることで、ディスクを一元管理する
  • オンラインのままディスクの増設できる
  • 設計時にパーティション構成やファイルサイズを決める必要がない
  • RAID構成によるデータ冗長化は次の形式をサポートしている
  • スナップショットである時点のファイルシステムを保存できる

トランザクションファイルシステム採用

  • データの書き込みは上書きされずに、別のファイルに書き込まれる(コピーオンライト)
  • トランザクションが途中で失敗した場合は、無視され、以前のファイルに復元できる
  • ただし、ディスクへの書き込みが非同期なので、タイミングによってはディスク容量などで差がでる。
  • duコマンドやdfコマンドによって報告されるZFSディスク領域の消費量については注意が必要。

チェックサムとデータ自己修復

  • End-to-Endのチェックサムによる信頼性の高いデータ保護
  • データとチェックサムを異なるブロックに保存することで、チェックサム自身の信頼性が向上している
  • データの読み書き時は、チェックサムによって不正データが検出される
  • 不正データが検出された場合、冗長構成であれば、複製データから自動的にデータを修復する

muninに監視インタフェースの指定をする

ネットワークインタフェースなどを追加して、監視したいときがありました。 次のようにplugins配下のスクリプトに、_以降のファイル名として引数を指定して、/etc/munin/plugins/配下にリンクを作成します。 再起動して少し待てば、反映されるはずです。

ln -s /usr/share/munin/plugins/if_ /etc/munin/plugins/if_eth0
ln -s /usr/share/munin/plugins/if_err_ /etc/munin/plugins/if_err_eth0
/etc/init.d/munin-node restart

systemdを使ってUbuntu起動時にユーザに何かを入力させたい

systemdとは

Linuxの起動処理やサービスの管理をする仕組みです。 今回はOS起動時に、ユーザに何か入力させて、処理をしたいことがあったので、やり方を調べました。 やりたいことのほとんどは下記に書いてありました。

Execute an interactive script at boot with systemd

すぐに試せる手順

(1) 登録したいサービス用のファイルを配置する場所を作成する

# mkdir /usr/lib/systemd/system
# cd /usr/lib/systemd/system

(2)simple-window-dialog.serviceを書く

# vi /usr/lib/systemd/system/simple-window-dialog.service
[Unit]
Description=Simple interactive dialog window
After=getty@tty2.service

[Service]
Type=oneshot
ExecStart=/usr/bin/dialog-hello.sh
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes

[Install]
WantedBy=default.target

(3)起動スクリプトを書く

dialogというツールを使います。

# apt install dialog
# vi /usr/bin/dialog-hello.sh
#!/bin/sh

sleep 5    # このスクリプトが実行される前に他に実行される処理が終わるのを待つ

chvt 2  # tty2に変更する

dialog  --title "Who are you?" --inputbox "Please enter your name:" 19 73 2>name.txt

S_NUM=$(cat name.txt)

if [ "$S_NUM" = "John Doe" ]
then
        dialog --msgbox "Enjoy your Computer !" 12 30
        chvt 1
        exit 0
else
        dialog --msgbox "Sorry, I d'not know about you. See you." 12 30
        shutdown -h now
        sleep 10
fi

(4) 起動スクリプトを実行できるようにする

# chmod 755 /usr/bin/dialog-hello.sh 

(5)ブート可能なイメージを作成する。

シンボリックリンクで、有効化することができる /usr/lib/systemd/system/default.target.wants/はあらかじめ作成しておく

 # mkdir /usr/lib/systemd/system/default.target.wants/
 # ln -sf /usr/lib/systemd/system/simple-window-dialog.service /usr/lib/systemd/system/default.target.wants/simple-window-dialog.service

(6)サービスを有効化する

# systemctl enable simple-window-dialog.service

(7)マシンをリブートして、試す

# reboot

すると次のような画面が表示されて、名前の入力を求められます。 「John Doe」を入力すると、そのまま使える画面に変更されます。 それ以外を入力すると、マシンは終了します。 f:id:storkibis:20160919093449p:plain

もし、起動スクリプトを間違っている場合などは、正常に起動できなくなるので、リカバリブートをして 「root Drop to root shell prompt」を選択し、スクリプトを修正します。

UbuntuにMuninをインストールしてリソース監視をする

Muninとは

 Muninとはリソース監視ツールです。次のような項目を監視できます。

  • CPU使用率
  • メモリ使用量
  • Disk使用率
  • ネットワークの転送量

Muninの構成

  • munin : エージェントからの情報を集約してリソースの状況をグラフ化する本体です。
  • apache : Web管理画面のために使います。
  • munin-node : サーバに常駐して、サーバの情報を収集するエージェントです

 監視したいサーバにmunin-nodeをインストール必要があります。今回は、muninをインストールするのも、munin-nodeをインストールするのもUbuntu 16.04LTSで実施しています。

監視対象ノードにmunin-nodeをインストールする

次のコマンドで、munin-nodeを導入します。

$ sudo apt install munin-node

/etc/munin-node.confを設定します。

$ sudo vi /etc/munin/munin-node.conf

munin-nodeの名称の設定します。

# host_name localhost.localdomain
↓
host_name munin.node.1

外部接続の許可に munin本体のサーバのIPアドレスを追加します。

allow ^192\.168\.11\.57$

munin-nodeの再起動します。

$ sudo service munin-node restart

Munin本体のインストール

次のコマンドでMuninとApacheをインストールします。

$ sudo apt install munin apache2

Muninの本体の設定と起動の確認

Muninのディレクトリを用意します

$ sudo cp -R /var/cache/munin/www/ /var/www/munin

書き込み権限をmuninに設定します。

$ sudo chown munin:munin -R /var/www/munin

muninの設定ファイル開いて

$ sudo vi /etc/munin/munin.conf

生成されるHTMLファイルの出力先を変更します。

# htmldir /var/cache/munin/www
↓
htmldir /var/www/munin

監視するホスト名とIPアドレスを次の形式で記入します。

# a simple host tree
[munin.node.1]
    address 192.168.11.58
    use_node_name yes

muninディレクトリにあるApacheに追加する設定ファイルのシンボリックリンクを作成して、ApacheにMuninの設定を追加します。

$ sudo ln -s /etc/munin/apache.conf /etc/apache2/sites-enabled/munin.conf

Apache2に追加する設定ファイルの内容を変更します。

$ sudo vi /etc/apache2/sites-enabled/munin.conf

次のように変更します。

Alias /munin /var/www/munin/
<Directory /var/www/munin/>
        Order allow,deny
        Allow from all
        Options None

    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault M310
    </IfModule>

変更適用するためApacheを再起動します。

$ sudo service apache2 restart

次のURLでmuninが表示されるか確認します。

http://[Munin本体のIPアドレス]/munin

次のような画面が開ければ、設定完了です。

f:id:storkibis:20160908000837p:plain