Archive for the ‘Linux’ Category

terminal

いやー、久しぶりにかなりハマりました。
sambaを介してLinuxと接続しているNASに対し、
ファイルを圧縮して保存するシェルスクリプトをcronで回して実行しようとしたんですが、
手動では動くのに、cronでは全然動いてくれない。

/var/log/syslogを見たら、cronはちゃんと実行されているのにー!

さて、これの原因はユーザー権限の問題でした。
sambaで接続したNASには、ユーザーの個別のidで接続の許可が振られているらしく、

root権限で回しているcronではシェルスクリプトの実行もrootで行われるので、sambaでの接続deniedになっていた

従って

sudo crontab -e

ではなく

crontab -e

でcronの設定をして上げる必要があったのでした。
おわり

terminal

あるディレクトリの中の検査データを圧縮して、同じネットワーク内のNASに保管するようにしました。

シェルスクリプトで実装したのですが、そのファイル自体はシステムのどこにでも置けるようにしたかったので、ターゲットのファイルまでは絶対パスで記述していました。

しかし、絶対パスで圧縮をかけると、ファイルの展開時に/からのツリー構造がまるっと出力されるのでした。

調べてみると、展開時に必要な部分のみを取り出すような方法もあるようなのですが、面倒くさそうだったので、以下のように実装しました。

#backup.sh
#! /bin/sh
cd /home/foo/targetDir;
zip /network/nas/$(date +"%Y%m%d_%H%M").zip ./targetFile
#$(date +"%Y%m%d_%H%M").zip は 20170804_1122.zipのように現在時をファイル名とする

何か、ルートからのツリー構造を含めないように絶対パスで圧縮指定をする方法はあるのかな?

ちなみにZIPよりtar玉にしてしまった方が、サイズは半分くらいになったのですが、Windowsからデータにアクセスする人もいるのでzip圧縮を選びました。

あとは

crontab -e

を実行して

0 19 * * * /home/foo/bin/backup.sh

で毎日19時にバックアップを実行するようにしました。

余談だが、sambaを介してのNASへのアクセスはユーザー毎の権限が定められている様子。
つまり、

sudo crontab -e

などとして、システム(root)の権限で動くcronによってシェルスクリプトを実行すると、NASにアクセスができない。
あくまで、ログイン権限のある個別ユーザーでのアクセスをする必要がある。

$ crontab -e

で実行する事が重要です。

index(2)

LinuxMint 17.1 RebeccaにDockerをインストールして、centosを導入してみる

まず、LXC (Linux Container)をインストール

sudo apt-get install lxc

つぎに、Dockerをインストールする

sudo apt-get install docker.io

インストールが終わったらDockerのデーモンを起動する

sudo service docker start

デーモンが立ち上がったらcentosのイメージをリポジトリからPULLする。

sudo docker pull centos

ちゃんとイメージがPULLできたかどうか、

sudo docker images

で確認できる。

さて、centos上でhelloworldを行うことにする

sudo docker run centos echo "hello world"

するとエラーが出た

FATA[0000] Error response from daemon: Cannot start container ac403b642da98d0e211e54a20718199bf02d6d70c7255f5f6f9e17dc5c1d8c7c: [8] System error: mountpoint for devices not found 

調べてみるとどうやら、cgroupを使える必要があるらしい。

cgroup を使うと、CPU時間やメモリ、ネットワークなどといったリソースを、 グループ単位で割り当てたり、制限をかけることができるとの事。

これとLXC(Linux Container)は依存関係にあるらしいのでこれをインストールする

sudo apt-get install cgroup-lite

これにて、centos上からのhello worldが実行出来た。

どうでもいいが、Dockerのロゴはとてもかわいいと思った。