orz.conf

技術メモ✍

logrotateがうまくいかない

今回はシェル(bash)の問題です。
普段全然シェルを書く機会がないくらいの人が対象です。

/etc/logrotate.dのsyslogとかhttpdを設定したはずなのに
うまくlogrotateしてくれない。
(CentOSやRedHatEnterpriseLinuxとか)

初歩的ではありますが、httpd.orgとかsyslog.20150601とかのまま
別ファイルとしてバックアップしておくとその情報でもログローテート
されてしまいます。
(どちらからログローテートされるのかわかりませんが)

なので~~.orgとか~~.日付とかになっているファイルを
.~~.org(又は日付)というドットファイルにするシェルを書いてみよう
というのが今回のお題です。


これをググらずに書きたいところです。

まずshellのfor文の書式

for f in 入力
do
  処理
done

他の言語でいうfor each的な動作です。
各ファイル名は$fとして扱われます。


続いて~~.orgとか~~.日付とかを正規表現で取得
.~~なんてつけてるのはバックアップファイルのみだと判断しています。
なのでこれ

*\.*


リネーム部分ですがドットファイルにするだけなので簡単です。

mv $f \.$f


これを組み合わせると下記のようになります。
普段シェルを使わないと一行目(シバン)ですら忘れてしまうんですよね。

#!/bin/bash
cd /etc/logrotate.d
for f in *\.*
do
	mv $f \.$f
done


これをさらにターミナルから直接実行できるよう一行に書き直してみます。

cd /etc/logrotate.d/;for f in *\.*;do mv $f \.$f;done

改行の箇所に;(セミコロン)を入れるのかと思いきや、doの後には入れません。
それくらいでしょうか。


また間違えて別のディレクトリのファイルを全てドットファイルにしてしまった。
とりあえず全てドットを取り除きたいという場合はどうでしょうか。


まずファイル名置換の方法です。

mv $f ${f/正規表現/置換後}

これを用いてこうなります。

mv $f ${f/\.*/}

後はforのファイル名取得箇所をin \.[0-9a-zA-Z_]*としてやればよいでしょう。

シェルが苦手なのでまたこういった内容のものを書いていきたいと思います。

SoftEther VPNの不具合??

さてSoftEtherVPNの設定が終わりました。

あれ、なんだかパソコンが熱いな・・・・?
このパソコンではvpnsambaくらいしか動かしてないはずだけどな。
夏だからかな?

ちょっとプロセス使用率確認

$ top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 2600 root       0 -20 1166588 170944   5220 S 119.1  8.8   5:34.77 vpnserver

信じられないCPUの使用率!
SoftEtherVPNってこんな使用率になるの???
しょうがないのでCPU使用率下げるよう小細工しましょう(後々この判断が間違いだったと気付きます)

以下はその小細工です。

CPU使用率を制限する為にcgroupを導入しました。
これを使うとCPUリソースやらメモリやらに制限をかけることができます。

$ apt-get -y install cgroup-bin

続いてcgroupのコンフィグを作成。
このファイルはうちの環境では存在しなかったので、新規作成しました。

$ vi /etc/cgconfig.conf

group limit {
    cpu {
        cpu.cfs_quota_us = 200000;
        cpu.cfs_period_us = 1000000;
    }
    cpuacct {
    }
}

1000000マイクロ秒(つまり1秒)あたり200000μ秒(0.2秒)単一のCPUにアクセス
出来るようになります。20%までこのプロセスにCPUを割いてくれるらしいです。

続いて何やらおまじない

$ cgconfigparser -l /etc/cgconfig.conf

これをやらないと

cgroup change of group failed

って出てきます。

そしてcgroupを使ってvpnserverを起動します。

$ cgexec -g cpu:limit /usr/local/vpnserver/vpnserver start

これで完了なんですが、そうです。
起動スクリプトも修正してやらないといけません。

最終的にこのような形になりました。

再起動後にスマホからVPNアクセス出来て、topも20%に収まりました。

とここでまた問題が発生しました。
スマホOpenVPN ConnectのConnection statsに表示される
Bytes inが異常に増えるという現象が発生しました。

みた感じ200kByte/sくらいのスピードでどんどん通信量が増えていきます。
あれこれ設定を見直しましたが、結局SoftEtherVPNのサーバのバージョンを変更すると状況が改善しました。
うちの環境ではBuild 9546でこの事象が発生しました。
以前試していたBuild 9529に戻して確認していますが今のところこの事象は発生していません。

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 6294 root       0 -20 1036472  21984   5032 S   0.7  1.1   0:50.98 vpnserver

クライアントがガンガンアクセスするような環境なら当然負荷は高いでしょうが、個人でたててるサーバだとこんなもんなでしょう。(core2duoでもね)

結局cgroupの設定なんて必要なかったですね・・・・
まあお勉強ということで。

Ubuntu 12.04 LTS (ubuntu15.04) にsoftether vpnをインストール(その7) 起動スクリプト

7.起動スクリプトと設定

数か月前にUbuntu 12.04 LTSにsoftether vpnをインストールという記事を
書きましたが、起動スクリプト回りを書いていなかったので書いてみます。
あの時はまだ12.04でしたが、15.04でもほぼ同じだと思います。

基本的にはsoftether.orgに書いてある通り進めます。
7.3.8 スタートアップスクリプトへの登録
https://ja.softether.org/4-docs/1-manual/7/7.3

ですが、今回はtapを使用しますので、起動スクリプトにそれを記載します。

8行目からがstart時の処理です。
11行目、12行目に処理を追加しました。
vpnserver起動後ちょっとsleepさせて、tapへネットワークの設定を行います。

この2行だけ追加すれば問題ないでしょう。
(必要であればrestartの部分にも同様に処理を追加してください。)

作成した/etc/init.d/vpnserverへ実行権限を付与します。

$ chmod 755 /etc/init.d/vpnserver

後はOS起動時にvpnserverを稼働させる設定をするだけです。

$ /sbin/chkconfig --add vpnserver 
/sbin/chkconfig: そのようなファイルやディレクトリはありません

あれれ、ubuntuにはchkconfigが無いんだっけ。
そこでsysv-rc-confを使用します。

$ apt-get install sysv-rc-conf
$ sysv-rc-conf vpnserver on
$ sysv-rc-conf --list vpnserver
vpnserver    2:on       3:on    4:on    5:on

動作確認の為に再起動してみましょう。
スマホなどからVPNサーバにアクセス出来れば大丈夫でしょう。

うちの環境だけだと思いますがちょっと問題が発生したので
その問題については別の記事に記載したいと思います。

toshtone.hatenablog.jp

Ubuntu 15.04 でGitHubの設定

GitHubのアカウント作成がまだのようなら作成します。
https://github.com/

下記の順番で設定します。
SSH KEYの作成
  ubuntu上で作成します。
SSH KEYの設置
  公開鍵をGitHub秘密鍵をローカルに設置します。
・ローカル(pushする側)の設定
  gitの設定を行います。

SSH KEYの作成

まずはssh keyを作成します。

今回はubuntussh keyを作成しました。
接続時にパスワードを問われたくなかったので空で設定しました。

$ ssh-keygen -t rsa -b 4096 -C "mailaddress@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):そのままenter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):そのままenter
Enter same passphrase again:そのままenter
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX mailaddress@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
|    ++==.        |
|   ..NYAN        |
|    +.*+         |
|   . A .C        |
|    * o S        |
|   o . . .       |
|                 |
|                 |
|                 |
+-----------------+

これで公開鍵を作成できました。

$ cat ~/.ssh/id_rsa.pub

ちなみにid_rsa秘密鍵になります。

このid_rsa.pubの中身をコピーしてGit Hubに追加します。

SSH KEYの設置

GitHubにサインインします。
右上のほうにあるsettingボタンをクリックします。
続いて左のほうにSSH keyがあるのでそれをクリック。
Add SSH Keyをクリックします。

Titleはなんでもいいです。私は"Personal Thinkpad"としました。
Keyに先ほどのid_rsa.pubの中身を張り付けて下さい。
GitHub側の設定はこれで終わりです。

ローカル(pushする側)の設定

さてubuntuに戻ります。
下記のようにsshgithub.comに接続します。
ユーザ名はgitとなっていて良いです。

ssh -T git@github.com
Hi XXXXXX! You've successfully authenticated, but GitHub does not provide shell access.

このようになれば設定に問題はありません。
うちではこのようなレスポンスが1秒くらいで返ってきました。

さてそれでは.gitが生成されているディレクトリに移動します。
もしgitの設定を終えていないようであれば、下記の記事を参照して
設定を行ってください。toshtone.hatenablog.jp

$ git remote add origin ssh://ユーザ名@github/home/ユーザ名/workspace/first_app

これでoriginにurlが設定できたようです。
万が一originに指定するurlを間違えてしまった場合は

$ git remote rm origin

としてoriginを一旦削除して正しいものを再度addしてください。

HTTPSで接続する場合は下記のようにoriginを設定してください。

$ git remote set-url origin https://ユーザー名:パスワード@github.com/ユーザー名/first_app.git

それではいよいよソースをpushします。

$ git push -u origin master

これでGitHubにソースが追加されました。

ブラウザからGitHubにアクセスして確認しましょう。
トップページのPopular repositoriesからアップロードした
プロジェクト名をクリックしてファイルを確認してください。

以上で設定は終わりです。

Ubuntu 15.04 のプロンプト表示が長い

Ubuntu15.04のプロンプト表示が長くてディレクトリの階層が深いところだと
こんな感じになる。

workUser@Server:/home/workUser/workspace/script#

カレントディレクトリさえ表示されていれば良いですよね。
まずUbuntu15.04のプロンプト表示を確認します。

$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

なんだか分からないけどとても長いです。
このくらいにしようと思います。(centosがこうなっていました)

[workUser@Server script]#

bashrcにPS1へのexportを記載します。

$ sudo vi ~/.bashrc

最終行に追加したらよいでしょう

export PS1="[\u@\h \W]\$ "

Ubuntu 15.04 にruby on rails をインストール

Ubunturuby on railsをインストールしていきます。
わたしはこれまでruby on railsを触ったことが無く
全くの初心者の段階でインストールを行いました。

最初にパッケージマネージャのアップデートします。

# apt-get update

Ruby on Railsをインストールする方法はいくつかあるみたいなのですが
今回はRVM(Ruby Version Manager)を用いてRubyRailsをインストールします。
そしてそのRVMはCurlを用いてインストールするので
Curlが入っていないようならインストールしてください。

# apt-get install curl

RVMをインストールします。

# \curl -L https://get.rvm.io | bash -s stable --ruby

それでは2015年5月16日現在最新である2.2.2のRubyをインストールします。

# rvm get stable --autolibs=enable
# rvm install ruby
# rvm --default use ruby-2.2.2

うちでは一行目のrvmコマンド打ったところエラーが表示されました。

コマンド 'rvm' は見つかりませんでしたが、似たものが 20 個あります。
rvm: コマンドが見つかりません

似たものってなんなんだよ
うーん、pathが通ってないだけなのかな?
よく分からないのでcurlコマンドを打った後のログをよくよく見てみます。

gpg: 2015年03月31日 06時52分13秒 JSTにRSA鍵ID BF04FF17で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません
Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found.
Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).

GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.26.11.tgz' - 'https://github.com/rvm/rvm/releases/download/1.26.11/1.26.11.tar.gz.asc'!
try downloading the signatures:

    gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

or if it fails:

    command curl -sSL https://rvm.io/mpapis.asc | gpg --import -

シグネチャーが何か知りませんが、とりあえずダウンロードしてみます。

# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
gpg: 鍵輪「/root/.gnupg/secring.gpg」ができました
gpg: 鍵D39DC0E3をhkpからサーバーkeys.gnupg.netに要求
gpg: /root/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵D39DC0E3: 公開鍵“Michal Papis (RVM signing) <mpapis@gmail.com>”を読み込みました
gpg: 絶対的に信用する鍵が見つかりません
gpg: 処理数の合計: 1
gpg:               読込み: 1  (RSA: 1)

絶対的に信用する鍵が見つかりませんとか出ましたが気にせず進めます。

# command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
gpg: 鍵D39DC0E3:“Michal Papis (RVM signing) <mpapis@gmail.com>”変更なし
gpg: 処理数の合計: 1
gpg:              変更なし: 1

これでいいのかな?
もう一度RVMをインストールします。

# \curl -L https://get.rvm.io | bash -s stable --ruby

何か長々と画面に表示され始めました。
時間にして8分くらいでしょうか。

Install of ruby-2.2.1 - #complete
らしき文字が見えました。
多分これで大丈夫なはずだと思い、再びrvmコマンドを実行して
いきたいと思います。

# rvm get stable --autolibs=enable
# rvm install ruby
# rvm --default use ruby-2.2.2

あれれ再び先ほどと同じエラーが出ました。

コマンド 'rvm' は見つかりませんでしたが、似たものが 20 個あります。
rvm: コマンドが見つかりません

さっきcurlコマンドでrvmをインストールした時に一番最後に下記のように
出力されていました。

  * To start using RVM you need to run `source /usr/local/rvm/scripts/rvm`
    in all your open shell windows, in rare cases you need to reopen all shell windows.

なので下記のコマンドを入力します。

# source /usr/local/rvm/scripts/rvm

3度目の正直、コマンドを実行!

# rvm get stable --autolibs=enable
# rvm install ruby
# rvm --default use ruby-2.2.2

2行目のrvm install rubyを入力した時のログが

Already installed ruby-2.2.1.
To reinstall use:

    rvm reinstall ruby-2.2.1

2.2.1がインストールされちゃったのかな?
まあ、じゃあ2.2.1を使おう

# rvm --default use ruby-2.2.1

ということでrubyのインストールが完了しました。

Rails 3.1からUbuntuで開発するにはJavaScriptランタイムが必要になりました。
JavaScriptの環境としてNode.jsは最高らしいのでNode.jsをインストールします。

# apt-get install nodejs

こうやってインストールするとnodejsというコマンドになってしまう(nodeにしたい)のでちょっと付け足します。

# update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

これでnodeコマンドが使えます。node -vとかしてみてください。

続いての新しい単語ですが、gemのバージョンをチェックします。
gemはライブラリみたいなもんで、gemのコマンドをこれから
色々使うので準備が必要です。

# gem -v

うちでは2.4.7と出ました。

gemをアップグレードしましょう。

# gem update --system

RVM Gemsetsというのがあるのですがなんだかよく分かりませんが
おすすめだそうなので使うことにします。

# rvm gemset list

と入力すると

gemsets for ruby-2.2.1
=> (default)
   global

と表示されるようです。

もし"無い"って出てきたら一度コンソールを閉じてください。

global gemsetに何がインストールされているか見てみます。

# rvm gemset use global
# gem list

リストにいくつか表示されるのでそれらをアップデートします。

# gem outdated
# gem update

次に、ドキュメントをインストールしないような設定をします。

# echo "gem: --no-document" >> ~/.gemrc

次にBundlerをインストールします。
細かいこと気にせずインストールします。

# gem install bundler

Nokogiriをインストールします。
鋸だなんて物騒な名前ですね。
Nokogiriは他のgemの役に立つgemだそうです。
そもそもまだgemが何か分からない人はとにかくインストールしましょう。

# gem install nokogiri

エラーメッセージが出ないか、10分以上待たされなければインストール出来てると
思います。

Railsのインストールです。

# rvm use ruby-2.2.1@rails4.2 --create
# gem install rails
# rails -v


さてRailsワークスペースディレクトリを作ってください。
優柔不断な人はworkspaceとしてください。
場所は/home/ユーザ名/にしました。

# mkdir workspace
# cd workspace

それではアプリケーションを作っていきます。
まあ最初なのでhelloとしてください。

# rails new hello
# cd hello
# rails s -b 0.0.0.0

webブラウザでこのサーバにアクセスします。
http://192.168.100.2:3000みたいな感じでアクセスすると
Welcome aboardが表示されると思います。

下記のように-pオプションを記載することでポート指定することも
出来ます。

# rails s -b 0.0.0.0 -p 80

これでhttp://192.168.100.2でアクセスすることが出来ます。
今回はこの辺で終わりたいと思います。