まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2016/05

Ubuntu の標準形式でありながら、CentOS や RHEL(RedHat Enterprise Linux) ではそのままでは扱えない deb パッケージを rpm パッケージに変換する方法があります。

具体的には alien コマンドを利用します。 まずこの alien コマンドを CentOS や RHEL 環境上でビルドします:
# yum install rpm-build
# cd /tmp
# wget http://ftp.debian.org/debian/pool/main/a/alien/alien_8.92.tar.gz
# rpmbuild -ta alien_8.92.tar.gz
  :
  :
書き込み完了: /root/rpmbuild/RPMS/noarch/alien-8.92-1.noarch.rpm
  :
  :
# rpm -ivh /root/rpmbuild/RPMS/noarch/alien-8.92-1.noarch.rpm

ここまでの作業で alien コマンドがインストールできているので、このコマンドを使って deb パッケージを rpm パッケージへ変換します:
# alien --to-rpm --scripts xxx.deb
xxx.rpm generated

こうして出来上がった rpm ファイルは rpm コマンドや yum コマンドで導入可能です。
 

最近は少なくなりましたが、一部のウェブアプリではまだ Java アプレットが使われていることもあります。で、現在は作成当時のセキュリティとは違う要素を考慮する必要があったりして、アプレットがそのままでは動かない、ということが出てきます。

例えばこんな感じ。Java アプレットを実行しようとしてこのような警告メッセージが出てブロックされてしまう、というものです:
20160517


このブロックを回避するには Java のセキュリティ設定でこのサイトを例外として扱うよう指定する必要があります。コントロールパネルの Java を選び、そのセキュリティタブにおいて「サイトリストの編集」をクリックし、この警告メッセージが表示されるサイトの URL(のホスト名部分まで)を登録します。これでこのサイトに関してはセキュリティ上の例外として処理されるようになります:
2016051701


(参考)
https://www.java.com/ja/download/help/jcp_security.xml

Java で(JDBCで)MySQL データベースに日本語文字を書き込んだ時に文字化けする、という問題に遭遇した時の対処方法を紹介します。

まず、MySQL データベースを自分で用意する場合にはあまり起こらないことだと思っています。起こらないというか、起こっても自分で MySQL サーバーやクライアントの文字コード設定を変えれば対処できることだと思っています。

ところが最近は PaaS が流行っていることもあり、自分でデータベースサーバーを構築するのではなく、「用意されたデータベースのインスタンスを作って使う」という使い方が可能になり、用意された(自分で設定したわけではない)データベースを使うだけ、という手法も多く使われはじめています(IBM Bluemix とか、AWS の RDS とか、・・)。これはこれで簡単で便利なのですが、いざ問題が起こった場合にサーバーの管理者ではないため、設定を変更できる部分とできない部分があったり、そもそもどういう設定で動いているのかを確認できたりできなかったりします。そしてその結果として、今回のような文字化けの問題が発生したりします(デフォルトのデータベース文字コードが分からない、当然のように UTF-8 だと思って UTF-8 で書き込んだら文字化けした、というパターン)。

これを回避するにはデータベースの設定がどのようになっていたとしても UTF-8 前提で接続して、UTF-8 を明示して書き込む、という実装が必要になるわけです。


これが Java(JDBC) と MySQL で問題になったりします(同じ MySQL でも PHP では特に意識せずに文字化けも回避して使えていたが、同じ処理を Java で行うと文字化けする、といったことが起こります)。コードのテキストそのものが UTF-8 で記述されていても起こります。要は上記で書いたような部分が自動判別では実現できておらず、コードとして実装する必要があるからです。

Java(JDBC) で MySQL に対して UTF-8 を明示して接続するには、このように記述する必要があります:
    :
    :
  Connection conn = null;

  String dburi = "mysql://mysql.test.com/mydb?useUnicode=true&characterEncoding=utf8";

  try{
    Class.forName( "com.mysql.jdbc.Driver" );
    conn = DriverManager.getConnection( "jdbc:" + dburi, mysql_username, mysql_password );
  }catch( Exception e ){
    e.printStackTrace();
  }

    :
    :

上記青字部分が指定している箇所です。useUnicode でユニコード指定を名言し、characterEncoding でそのエンコードを utf8 に指定しています。

この方法でコネクションを取得すると、読み書き時の文字化けを回避できました。まあ全ての文字化けのケースにこの方法が有効とはいえませんが、原因不明の文字化けが発生した際の回避方法の1つとして。


Ubuntu で LXC を使ってみました。

LXC は "LinuX Containers" の略で、Linux の仮想化技術の1つです。1つのセンターホストの上で複数の Linux システム(コンテナ)を走らせる、というものです。コンテナなので、いわゆる VM(Virtual Machines) とは異なり、個別のプロセスとネットワーク空間を作り出す仮想環境です。なお Ubuntu 14.04 の 64bit 版を前提として以下を記載します(いつもの CentOS6 環境だとなぜか上手くいきませんでした):

導入は簡単。apt-get コマンド一発で LXC を導入します:
$ sudo apt-get install lxc

導入できたら中身を一度確認してみます。まず用意されているテンプレートの一覧が /usr/share/lxc/templates/ にあるのでその一覧を確認します(青字が出力結果、これだけのテンプレートが用意されています):
$ ls /usr/share/lxc/templates/
lxc-alpine     lxc-centos    lxc-fedora        lxc-oracle  lxc-ubuntu-cloud
lxc-altlinux   lxc-cirros    lxc-gentoo        lxc-plamo
lxc-archlinux  lxc-debian    lxc-openmandriva  lxc-sshd
lxc-busybox    lxc-download  lxc-opensuse      lxc-ubuntu

では今回は Plamo テンプレート(lxc-plamo)を使って、p01 という名称で Plamo Linux コンテナを作成してみます:
$ sudo lxc-create -t plamo -n p01
  :
  :
  :
morse-2.1-x86_64-P1 のインストール中
PACKAGE DESCRIPTION:

qrq-0.1.4-x86_64-P1 のインストール中
PACKAGE DESCRIPTION:

Copy /var/cache/lxc/rootfs-plamo-5.x-x86_64 to /var/lib/lxc/p01/rootfs...
Copying /var/cache/lxc/rootfs-plamo-5.x-x86_64 to /var/lib/lxc/p01/rootfs...
patching file /var/lib/lxc/p01/rootfs/etc/inittab
Setting root password to 'root'...
Please change root password!

コマンドが完了するまでしばらくかかりますが、無事に完了したようです(root ユーザーのパスワードが root で、すぐに変更しろ、というメッセージが表示されています)。 作成されたコンテナのルートディレクトリは /var/lib/lxc/p01/rootfs/ 以下に作成されています(p01 はコンテナ名):
$ ls /var/lib/lxc/p01/rootfs/
bin   cdrom  etc           home  lib64  mnt   root  sbin  tmp  var
boot  dev    etc-incoming  lib   media  proc  run   sys   usr

ではこの Plamo Linux のコンテナを実際に起動してみましょう。名前を指定して、デーモンモードで起動して、コンソールに接続します:
$ sudo lxc-start -n p01 -d
$ sudo lxc-console -n p01

Connected to tty 1
Type  to exit the console,  to enter Ctrl+a itself


Welcome to Linux 3.13.0-85-generic.

p01 login:
 

接続できました!ここで root ユーザーで(パスワード root で)ログインし、とりあえずはパスワードを変更しておきます:
p01 login: root (ユーザー名は root)
Password: (パスワードは root)
root@p01:~# passwd
Enter new UNIX password: (新パスワードを入力)
Retype new UNIX password: (同じ新パスワードを入力)
passwd: password updated successfully

で、ここからはコンテナ上に展開された Plamo Linux を1サーバーのように使うことができるようになります:
root@p01:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-1       913G   16G  851G   2% /
none            100K     0  100K   0% /dev
/media          5.8G     0  5.8G   0% /media
/tmp            5.8G     0  5.8G   0% /tmp

元の(Ubuntu の)コンソールに戻るには Ctrl+A を押し、続けて Q を押します:
root@p01:~# exit (Plamo Linux から普通にログアウト)
logout


Welcome to Linux 3.13.0-85-generic.

p01 login: (ここで Ctrl+A,Q)
$ (Ubuntu のコマンドプロンプトへ戻った)





8.9 インチという、超小型ノート PC 「東芝ダイナブック N29」を一か月ほど使ってみました(一週間の出張含む)。勘所というか、自分の利用スタイルに合わせた環境構築もできてきたので、その報告も兼ねてまとめてみました。

なお、利用開始から一週間の時点でも同様のブログエントリを書いています。その時の様子はこちらを参照してください:
ダイナブック N29 利用感想など

また、今回のブログエントリはすべて N29 のキーボードを使って編集しています。以下にも書きますが、打ちやすさは「まあまあ」です。



【主な利用用途】
端的な言い方をすると、マシンスペック的には貧弱な部類だと思っています。もともとメインマシンとして購入したつもりはありませんでした。ウェブメールを含めたウェブブラウズと、SSH などを使ったサーバー管理。加えてプログラミング環境としてどの程度使えるかなあ、という好奇心はありましたが、あまり期待していませんでした。

【導入したアプリ】
オープンソース製品というか、いわゆるフリーソフトを使ってウェブ参照、サーバー管理およびプログラミング用に以下のアプリを追加導入しています。なお全て Windows 32bit 版です。また Microsoft Office 環境は標準の Office Mobile をそのまま使っています(というか、そもそもこのマシンではあまり使っていません):

ウェブ参照用
- Google Chrome + 各種プラグイン

サーバー管理用
- OpenVPN クライアント
- TeraTerm (SSH)
- WinSCP (SCP)
- VNCViewer (VNC)

プログラミング環境用
- サクラエディタ (テキストエディタ)
- JDK 1.8 および JRE 1.8 (Java)
- Eclipse + SVN プラグイン + Jetty サーバープラグイン (統合開発環境)
- cf command line tool

その他
- 7zip
- Paint.NET
- Jane Style(2ちゃんねるビューワ)


【感想】
上記すべてインストールして、C ドライブの空きは 40GB 超といったところです。もともと 49GB 程度の空きだったことを考えると、あまり圧迫はしていません。またデータは外付け MicroSD カード(Dドライブ)を利用するようにしています。

前回も書いたのですが、常にキーボード一体(+外付けマウス)で使っています。そのおかげでバッテリーも2つ使うことができるので、電池的にも有利です。ほぼ半日使えている、という印象です。キーボードそのものは小さくて打ちにくいこともありますが、まあ許容範囲かな、と思っています。あえて言うと右 SHIFT キーがなく左 SHIFT も小さいので、SHIFT キーを使う時は、通常の左 SHIFT よりも半キーぶん程左を打つことを意識しています。また \ キーが右下(右小指の位置)にあるので、この場合も意識して打つようにしています。今のところ、打ち間違いが多いのはこの2つのキーです。あとはまあなんとか対応できています。

また、この環境(省電力の ATOM チップ + メモリ 2GB)ではサクラエディタはともかく、Eclipse を使ったアプリケーション開発には厳しいだろうな、と覚悟していました。それもあって当初は環境構築すらあきらめていました。

が、思っていた以上に他の環境が快適だったので、ダメ元のつもりで Eclipse + Java の開発環境(JDK/JRE、ソースコード管理用の Subversion プラグイン、開発用アプリケーションサーバーの Jetty まで)を導入してみました。結果としてはちゃんと動いているし、「開発用と割り切れば使える」という印象です。これが実現できたことで、普段の開発環境のかなりの割合がこの N29 上に再現できました。


欲を言えば、仮想マシン環境もこの N29 上で再現できたりすると嬉しいのですが、それはさすがに(メモリが少なすぎて)無理だと思っています。まあ欲張らずに、そのあたりはメイン機で行うことにして、この N29 では編集およびサーバー管理を持ち運んだ先で行う、と割り切って使うことにします。

このページのトップヘ