レンタルサーバーでgitを使う(その2)「fatal: Unable to find remote helper for ‘https’」の解決

このエントリーをはてなブックマークに追加

プロジェクト管理、ソースコード管理において欠かせない存在であるGit。
自前のサーバーで使う場合は特に何も考えずyumでさくっとインストールしてしまえばいいんですけど、ルート権限のないレンタルサーバーで運用するときにどうするか、というのが問題。

これについては、以前に書いたこちらのエントリー
エックスサーバーでGitをインストール | CentOS & Fedoraテクニック
で基本的にはOKなんですが、今回問題が発生しました。

これまでは、GitレポジトリサーバーをSSH接続できる自前の別サーバーにしていたんですが、Bitbucketという無料のGitレポジトリサービスを使わせてもらうことにしました。

すると…

HTTPSのエラーが発生

fatal: Unable to find remote helper for ‘https’
Clone of ‘https://bitbucket.org/linux-tech/myproject.git’

httpsに対するリモートヘルパーが見つからない、とのことです。これは同じくHTTPSプロトコルで接続するGithubにも起こりえますね。

プロトコルの解決といえばCurl。どうやらcurl-develパッケージが存在しないために、curl をリンクできていないようです。

curl-develをインストール

$ wget http://curl.haxx.se/download/curl-7.46.0.tar.gz
$ tar zxvf curl-7.46.0.tar.gz
$ cd curl-7.46.0
$ ./configure –prefix=/home/[ユーザ名]/opt
$ make
$ make install

これでうまくいくようになりました。
もしこれでもうまく行かなかったら、Gitをインストールし直すといいでしょう。

$ wget https://github.com/git/git/archive/master.zip
$ unzip master
$ cd git-master
$ make configure
$ ./configure –prefix=/home/[ユーザ名]/opt –with-curl=/home/[ユーザ名]/opt
$ make all
$ make install

[warn] RSA server certificate CommonName (CN) `ドメイン名’ does NOT match server name!? が出たら…

このエントリーをはてなブックマークに追加

Webサーバー(Apache)のエラーログを見ていると、サーバー再起動やApacheリスタートの際などに、SSL周りのエラーが発生しているのを発見。

[Tue Nov 17 12:51:29 2015] [warn] RSA server certificate CommonName (CN) `example.com’ does NOT match server name!?

RSA暗号化サーバーのコモンネーム証明書がサーバーネームと違いますよ!?

と。おや、そうでしたか。
https://www.weblogy.co.jp/ への接続は問題なくできているし、ブラウザ上ではSSL証明書エラーも出ないんですけど、それはApacheの方で「どうやら違ってるけど証明書と鍵は合ってるからうまいこと融通きかせときまひょ」という感じのようです。
エラーログに記されているメッセージは、つまり「ホンマはあかんねんで?」ということですね。

まあ、毎回こんなエラーが発生しているのはよろしくないので、解消しましょう。

/etc/httpd/conf.d/ssl.confの記述を見てみると…

/etc/httpd/conf.d/ssl.conf

NameVirtualHost *:443

<VirtualHost *:443>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /home/www/html/
        ServerName example.com
        ServerAlias www.example.com
SSLEngine on
(中略)
</VirtualHost>

となっていました。

この記述で、ApacheとしてはServerNameとServerAliasとどちらも同じDocumentRootで処理することができるので、httpの場合ならこれでもいいんですけど、httpsの場合はコモンネーム(CN)がサーバーネームと一致しているひつようがあるのでまずいんですね。

NameVirtualHost *:443

<VirtualHost *:443>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /home/www/html/
        ServerName www.example.com
        ServerAlias example.com
SSLEngine on
(中略)
</VirtualHost>

wwwありをサーバーネームに、なしをエイリアスにしてApache再起動。

[root@www5254ue logs]# service httpd restart

エラーが出なくなり、解決です。

エックスサーバーでGitをインストール

このエントリーをはてなブックマークに追加

vimに引き続き、開発者視点ではGitでバージョン管理できないと甚だ不安です。
そこでgitもローカルディレクトリにインストールしてみます。

Gitを入れる前にGNU gettextが必要なのでインストールします。

$ cd ~/tmp
$ wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.2.tar.gz
$ tar zxvf gettext-0.18.2.tar.gz
$ cd gettext-0.18.2
$ ./configure –prefix=$HOME
$ make install

.bash_profileにパスが通っていることを確認します。

PATH=$PATH:$HOME/bin

Git をインストール

$ wget https://github.com/git/git/archive/master.zip
$ unzip master
$ cd git-master
$ make configure
$ ./configure –prefix=$HOME
$ make all
$ make install

これでGitコマンドが使えるようになりました。

参考ページ
Xserver で git を使う | 3.1415.jp

エックスサーバーにVimをインストールする

このエントリーをはてなブックマークに追加

大容量&低価格、安定したレスポンスで評価の高いレンタルサーバー『エックスサーバー』。
しかし我々技術者にとっては、容量がいくつとかMySQLがいくつとか言うスペックよりも、一番重要なのは
『SSHが使えるかどうか』
ですよね。

で、エックスサーバーはSSH接続は可能なんですが、エディタがViしか入っていないので不便です。syntaxがないとコードを書いてても不安でしょうがないので、Vimを入れてみました。
レンタルサーバーのため、当然ローカルユーザーなのでYumなどのパッケージ管理は使えないので、ソースからインストールする必要があります。

Vimをソースからインストール

まずローカルディレクトリに一時ディレクトリを作って、そこにソースをDLします。

$ cd ~
$ makedir tmp
$ cd ./tmp
$ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
$ tar jxvf ./vim-7.3.tar.bz2

vimは現在7.4が出てるんですが、Patchが出てなかったので7.3にしました。
解凍してできたvim73の中に入ってPatchをDLして当てます。

$ cd ./vim73
$ mkdir patches
$ cd ./patches
$ curl -O ‘ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.[001-502]’
$ cd ..
$ cat patches/7.3.* | patch -p0

次にconfigureしてmakeでインストール…のはずだったんですが。

$ ./configure –enable-multibyte –enable-xim –enable-fontset –with-features=big –prefix=$HOME

ここでエラーが出て叱られます。

no terminal library found
checking for tgetent()… configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with –with-tlib.

「ターミナルライブラリーがない、例えばncurse的な。それか–with-tlibオプションでターミナルを指定せよ」
とのことなので、じゃあncurseを入れようか…と思うも

yum install ncurse-devel

はもちろん使えません。(root権限がある普通のサーバならこれでOKです)
rpmパッケージからのインストール

ももちろん不可です。

–with-tlibオプションでncursesを指定してみたらどうかな?と一応試してみましたが

$ ./configure –enable-multibyte –enable-xim –enable-fontset –with-features=big –with-tlib=ncurses –prefix=$HOME

checking whether stack_t has an ss_base field… no
checking –with-tlib argument… ncurses
checking for linking with ncurses library… configure: error: FAILED

無いものは無いということでした。

というわけでncursesもソースを探してきてインストールします。

ncursesをインストール

$ cd ~/tmp
$ wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.7.tar.gz
$ tar zxfv ncurses-5.7.tar.gz
$ cd ncurses-5.7
$ configure –prefix=$HOME
$ make
$ make install

インストール完了。
これでvimインストールの準備が整ったので、再度configureに挑戦します。

今度こそVimをインストール

$ cd ~/tmp/vim73
$ ./configure –enable-multibyte –enable-xim –enable-fontset –with-features=big –prefix=$HOME
$ make
$ make install

インストールが終わりました。
念の為「vim」と打ってみると

$ vim
version 7.3.502
by Bram Moolenaar 他.
Vim はオープンソースであり自由に配布可能です

ウガンダの恵まれない子供たちに援助を!
詳細な情報は :help iccf<Enter>

終了するには :q<Enter>
オンラインヘルプは :help<Enter> か <F1>
バージョン情報は :help version7<Enter>

インストール成功です。

あとは.bashrcにvimのエイリアスを追加すれば完了です。

# User specific aliases and functions
 alias ls='ls -G'
 alias vi='vim'

SSLのパスフレーズ(Pass Phrase Dialog)入力を省略してApacheを起動する

このエントリーをはてなブックマークに追加

パスフレーズ付きでSSLの鍵を作ると、Apache再起動の際にパスフレーズの入力を求められます。

こんな感じです。

通常の起動プロセス

[root@www5254ue ~]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server weblogy.co.jp:443 (RSA)
Enter pass phrase:

Apache:mod_ssl:Error: Pass phrase incorrect (5 more retries permitted).
Enter pass phrase:

OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

でもこれだと再起動の際に毎回入力するのは面倒だし、何より自動再起動の際にここでストップしてしまいます。

そこでこのパスフレーズの入力を省略して起動できるようにしてみましょう。

方法は2つあります。

1.パスフレーズ無しの鍵にする
2.パスフレーズ応答スクリプトを設定する

1.パスフレーズ無しの鍵にする

1については、最初からパスフレーズなしで作る方法と、後からパスフレーズを消す方法とあります。

1-A パスフレーズなしで鍵を生成する場合

通常の作成方法

# openssl genrsa -des3 -out ./ssl.key/xxxxxxx.key 2048

パスワードなしの作成方法

# openssl genrsa -out ./ssl.key/xxxxxxx.key 2048

1-B パスフレーズを後から解除する場合

元ファイルのバックアップ

# cp xxxxxxx.key xxxxxxx.key.org

パスフレーズの解除

# openssl rsa -in xxxxxxx.key -out xxxxxxx.key

これで、パスフレーズ無しの鍵ができます。

パスワード自動応答スクリプトを設置する

まず、パスワードを自動的に応答するシェルスクリプトを書きます。シェルスクリプトと言っても、パスフレーズをエコーするだけの単純なものです。
これはどこに設置してもいいんですが、SSL関連の設定が置いてある/etc/ssl/certs/に置くことにします。

vi /etc/ssl/certs/pass_phrase.sh
#!/bin/sh
echo "your passphrase"

実行権限を与えておきます。

chmod 500 /etc/ssl/certs/pass_phrase.sh

次に、SSLの設定を変更します。

# vi /etc/httpd/conf.d/ssl.conf
#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
#SSLPassPhraseDialog  builtin
SSLPassPhraseDialog  exec:/etc/ssl/certs/pass_phrase.sh

SSL設定の中野、パスフレーズダイアログの部分を、「builtin」から、先ほどのスクリプトの実行指定に変更しました。

これで完成です。再起動を試してみましょう。

# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

Windows7のPoderosaで設定ファイル(options.conf)が見当たらない場合

このエントリーをはてなブックマークに追加

「Windows7でPoderosaをインストールすると、設定の保存ができない」という話はよく耳にします。
これは権限の問題なので、C:\Program Files (x86)\Poderosa のユーザー権限をいじればOK、と言われています。

が、設定は保存できているのに、他のPCに移行しようと思って
C:\Program Files (x86)\Poderosa
を探してみるも、設定ファイルが見当たらない。でも設定は保存できている。

この場合、設定ファイルはPoderosaのインストールフォルダではなく、ユーザー環境フォルダに入っています。

C:\Users\ユーザー名\AppData\Roaming\Poderosa

ですね。

poderosa_options

これにて解決です。

Linuxのテキストブラウザで表示を確認 [elinks]

このエントリーをはてなブックマークに追加

GUI環境が使えないターミナルでも、実はブラウザは用意できます。それがこのelinks。
使い方は、elinksコマンドにURLを引数で与えるだけです。

elinks http://www.yahoo.co.jp/

これでこんなふうに表示されます。

elinks2

これで例えば、IP制限をしているWebサイトがちゃんと思ったとおりの挙動になっているか、新しく公開したドメインのDNSが浸透しているかどうか、などを、わざわざ別の接続環境を用意したりすることなく確認することができますね。

elinksコマンドが存在しない、と言われたらyumでインストールしましょう。

yum -y install elinks

viの編集時に自動的にインデントがネストされるのを停止する noautoindent, nosmartindent

このエントリーをはてなブックマークに追加
オートインデントを無効にする

:set noautoindent
:set nosmartindent

vi,vimで編集時に、前の行のインデントをそのまま引き継いでくれる便利な設定があります。
それが autoindent です。

これ、コードを書いている時にはとても便利なんですけど、別のところからクリップボードにコピーしたコードを貼り付ける時は、インデントが二重になってしまって困ったことになります。

そんなときは、

:set noautoindent

でautoindentをオフにします。

でも、なぜかnoautoindentが効かない!という時があります。いや、僕の場合そんな場合のほうが多くて、諦めてダウンロードして別のエディタで開いたりしていたんですけど、最近ようやく気付きました。

vi,vimのインデントには、autoindentとsmartindentという二つのインデントスタイルがあったんですね。

というわけで、smartindentを解除したいときは

:set nosmartindent

でOK。

コピペしたらこうなってしまっていたものが…

</div>                                                                                                                       
<script type="text/javascript">
  var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-99999999-1']);
      _gaq.push(['_trackPageview']);

        (function() {
                    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
                        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
                            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
                              })();

                              </script>
</body>
</html>

綺麗に貼り付けられるようになりました。めでたし。

</div>
</div>                                                                                                                       
<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-99999999-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
</body>                                                                                                                      
</html> 

ちなみに、今どんな環境がセッティングされているかは、
:set
で一覧表示させることができます。

また、毎回noautoindentをするようでしたら、.vimrcでデフォルトの設定を変更したほうがいいでしょう。

ロリポップのSSH接続でviの文字化けを解消する

このエントリーをはてなブックマークに追加

低価格大容量でナウなヤングに人気のレンタルサーバー、ロリポップ。
チカッパプランでは、SSH接続もできて便利そうなので試しに借りてみました。

レンタルサーバー会社によっては、SSH接続はできても使えるコマンドが厳しく制限されていたり、公開鍵認証が使えなかったりと、思うように使えないこともよくあります。(最近だとサーバーカウボーイがそうだった)
ロリポップは、2週間のお試し期間があるのでその点安心です。公開鍵認証もGitも使えるので、正式利用することにしました。

が、ファイルを編集してみようとすると日本語部分が文字化けします。
どうやら、サーバーのエンコーディングがEuc-JPになっているようです。
WordPressを始め、最近のWebアプリ事情はUTF-8が基本なので、ここもそれに合わせましょう。

ログインしたところ、ユーザーのホームディレクトリに、.vimrcを新しく設置します。

$ vi .vimrc
syntax on
set nobackup
set termencoding=utf-8
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,utf-8,ucs2le,ucs-2

これでファイルの編集、保存も問題なくできるようになりました。

まとめて複数のパスワードを生成する

このエントリーをはてなブックマークに追加
for文で繰り返し実行

以前紹介したランダムパスワードを自動生成するコマンドのテクニックでランダムパスワードが生成できます。
サーバ管理者としては、複数のユーザ向けに大量のパスワードを生成しなければいけない場面がたまにあります。
そんなとき、1件ずつ作ってコピペするのは大変ですね。端末上でfor文を回してまとめて作りましょう。

[user@myserver] $ for var in 1: 2: 3:
&gt; do
&gt; echo -n $var
&gt; mkpasswd
&gt; done
1:)H0rj1Sgx
2:9Oz8zu%gO
3:ve%5yH7xC

1行で書いて実行もできます。

[user@myserver] $ for var in 1: 2: ; do echo -n $var; mkpasswd; done
1:)H0rj1Sgx
2:9Oz8zu%gO
3:ve%5yH7xC