Archive for the ‘Linux’ Category

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のロゴはとてもかわいいと思った。

keyboard-key-success-online-computer-the-business

ロリポップのライトプランからスタンダードプランに変更したところ、SSH接続が使えるようになったので、使おうと思ったのですが、物凄くIDもパスワードも長いし、なおかつパスワードの変更ができないので、パスワード認証は早々に諦めました。

調べると鍵認証ができるようで、そちらに切り替えたので備忘録的に書いておきます。

鍵認証のやりかた

まずはローカルで鍵を生成します。

$ cd .ssh/
$ ssh-keygen -t rsa -f id_rsa_loli

この際、パスフレーズを尋ねられるので入力しておくのがいいと思います。
後で鍵を使ってログインする時に、はじめの一度だけ尋ねられるので、よりセキュアです。

さてそうすると

.ssh/id_rsa_loli
.ssh/id_rsa_loli.pub

ができたはずです。

次にサーバー側に移動

サーバー側のホームディレクトリに.sshディレクトリがなければ作ります。
そしてそのなかに、authorized_keysファイルを作ります。

$ mkdir .ssh
$ touch ./ssh/authorized_keys

そうしたらローカルの.ssh/id_rsa_loli.pubの情報をリモートの./ssh/authorized_keysに書き込まなくちゃいけません。
何らかの方法でファイルを転送して

$ cat id_rsa_loli.pub >> authorized_keys
$ chmod 600 authorized_keys

を行います。
ローカル側の秘密鍵のパーミッションも600にしないと、この鍵のパーミッションはtoo open(ガバガバすぎる)と警告が出て使えません。

最後に、ローカルの~/.ssh/にconfigファイルを作って
その中に

stricthostkeychecking no
Host loli
  HostName sshXXXXXX.lolipop.jp
  Port     2222
  User     hoge.piyo
  Identityfile id_rsa_loli

と書き加えます。
これで準備完了。

最後に

ssh loli

と入力したらパスフレーズを尋ねてくるので、それを入力すると接続出来ます。

以後は

ssh loli

と入力するだけでパスワード抜きで接続できます。

ロリポップ/SSHでパスワード無しで接続する(チカッパプラン) [俺の基地]

こちらの記事をおおいに参考にさせていただきました。
ありがとうございます。