2012年9月24日月曜日

[Mac Ports] 試用

MacPortsがインストールできたのでためしにgftpをインストールしてみた

portsの検索は、

ports search name gftp

インストールは、

sudo port install gftp

2012年9月23日日曜日

[Mac] コマンドラインからGUIテキストエディタ

Ubuntuでは、コマンドラインで
$ gedit hoge.txt
とかするとgeditがhoge.txtを開いてくれるのだがMacでのこのやり方が分からなかったのでメモ。

結論から言うとMacのテキストエディタは、「textedit」でこれをopenコマンドから起動するという構図

open -a textedit

でおk

[Mac] MacPortsのインストール

開発環境を整えるべくMacPortsをインストールしたのでメモ

まず、MacPortsには、Xcodeが必要ということで「App Store」からDL&インストール。(1.6Gbyte 程ある
Apple IDが必要になるのでまだ作っていない場合は、作成する。

Xcodeのインストールが済んだらMacPortsをサイトからDLしてくる。ダウンロードしたpkgファイルを開くとインストーラーが起動するので指示に従ってインストールを遂行する。

すると、インストーラがPATHを通してくれる。俺の場合は、tcshをログインシェルにしているので「${HOME}/.tcshrc」に設定を追記してくれていた。

そして、さらに「Launchpad」からXcodeを起動してインストールする。


# MacPorts Installer addition on 2012-09-23_at_18:18:55: adding an appropriate PATH variable for use with MacPorts.
setenv PATH /opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.

確認のためにMacPortsのバージョンを表示してみた。
$port version
Version: 2.1.2

そして、Apple Developperに行って自分の環境にあった「Command Line Tools for Xcode」をDL&INSTALLする。

以上で完了。

[phpMyAdmin] http error 324が帰ってくる

phpMyAdmin(Ver.3.5.2.2)を使っていると

HTTP の324エラーステータスが帰ってくる

httpのログを見てみると、
php Fatal error: Call to undefined function PMA_sanitize()とある。

調べると phpMyAdmin/libraries/Message.class.phpを修正する必要があるとのこと。
まず、バックアップを取る。

cp Message.class.php Message.class.php.org

そして、以下が既存のファイルとの差分。

*** Message.class.php.org Sat Sep 22 23:42:45 2012
--- Message.class.php Sat Sep 22 23:44:19 2012
***************
*** 537,543 ****
       */
      static public function decodeBB($message)
      {
!         return PMA_sanitize($message, false, true);
      }
 
      /**
--- 537,543 ----
       */
      static public function decodeBB($message)
      {
!         return PMA_sanitize($message);
      }
 
      /**

2012年9月22日土曜日

[php+MySQL] DBへの接続

phpにてMySQLのDBに接続しようとしたら

Undefined function mysql_connect();

と言われた。調べてみると
php5-myqlが入ってないことが分かった。
インストールして無事解決。

cd /usr/ports/databases/php5-mysql/
make config-recursive
make install


2012年9月20日木曜日

[php] APC関連のエラー

Warning: Unknown: Unable to allocate memory for pool. in Unknown on line 0
というエラーが表示され何なのか全くわからなかった。

追記:結局APCを使いこなせなかったためやむを得ず
apc.cache_by_default=0として無効化した。

Google先生に聞いてみると。PHPの中間コードのキャッシュをとるAPCというモジュールの中間ファイルのキャッシュファイルを指定していないためであった。

cd /usr/local/etc/php
touch apc.ini

でapcの設定ファイルを作成して下記を追加することでエラーはでなくなった。

apc.mmap.file_mask=/dev/zero

さらにapc.ttlの値を小さくする。これは、この値秒アクセスが無い場合、キャッシュから削除するというもの。つまりこれを現在のものより小さくする。

apc.ttl=60
これは、キャッシュサイズ。適度に大きくする。
apc.shm_size=125M

[phpMyAdmin] サンプルDBの用意

phpMyAdminにログインすると下記のようなエラーメッセージが出ている。

phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。

1.必要なデーターベースおよびテーブルの作成
これは、サンプルのsqlファイルを読み込むことで作成できる。DBServerにログインして

SOURCE /usr/local/www/phpMyAdmin/examples/create_tables.sql

2.専用ユーザー(pma)を作成
データーベースにアクセスする専用ユーザー(pma)を作成する。

GRANT ALL ON pma phpmyadmin.* TO pma@localhost IDENTIFIED BY "pma_password";

パスワード(pma_password)は、適宜変更する。

3.無効になっている機能を有効にする
サンプル設定ファイルをコピーして適宜変更する。

cp /usr/local/www/phpMyAdmin/config.sample.inc.php /usr/local/www/phpMyAdmin/config.inc.php

そして、下記のように変更する。なお、pmaのパスワードは、pma追加時に指定したパスワードに読み替える。


$cfg['Servers'][$i]['controlhost'] = ”;
$cfg['Servers'][$i]['controluser'] = ‘pma’;
$cfg['Servers'][$i]['controlpass'] = ‘pmapass’;
$cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin’;
$cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark’;
$cfg['Servers'][$i]['relation'] = ‘pma_relation’;
$cfg['Servers'][$i]['table_info'] = ‘pma_table_info’;
$cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords’;
$cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages’;
$cfg['Servers'][$i]['column_info'] = ‘pma_column_info’;
$cfg['Servers'][$i]['history'] = ‘pma_history’;
$cfg['Servers'][$i]['table_uiprefs'] = ‘pma_table_uiprefs’;
$cfg['Servers'][$i]['tracking'] = ‘pma_tracking’;
$cfg['Servers'][$i]['designer_coords'] = ‘pma_designer_coords’;
$cfg['Servers'][$i]['userconfig'] = ‘pma_userconfig’;
$cfg['Servers'][$i]['recent'] = ‘pma_recent’;
$cfg['Servers'][$i]['table_uiprefs'] = ‘pma_table_uiprefs’;
$cfg['Servers'][$i]['auth_swekey_config'] = ‘/etc/swekey-pma.conf’;

以上が終わったらphpMyAdminに再ログインする。



参考Blog: http://www.kakashi.biz/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/phpmyadmin-%E7%92%B0%E5%A2%83%E4%BF%9D%E7%AE%A1%E9%A0%98%E5%9F%9F%E3%81%8C%E5%AE%8C%E5%85%A8%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81/

[php] php.iniの用意

On FreeBSD
サンプルファイルとして下記2種類がある。
利用目的にあわせてファイルをphp.iniとして/usr/local/etc/にphp.iniとしてコピーして中身を適宜編集。
/usr/local/etc/php.ini-development
/usr/local/etc/php.ini-production

2012年9月19日水曜日

termcapについて

terminatorを使ってFreeBSDに初めてログインしてviをおもむろに使うと

「No terminal database found」

と言われた。viは、どの環境でも始めから問題なく使えると信じ込んでいたので、びっくりした。といっても悪いのは、viではないのだが。。。

UNIXおよびLinuxも含めUNIX Likeな環境は、そもそもネットワークからログインされつことを前提に今日まで発展してきており、様々な端末から接続される可能性がある。
端末によってサーバーと実際にやり取りされるエスケープシーケンスとカーソル等の挙動の対応が異なっているらしく、それぞれの端末のエスケープシーケンスと実際の挙動を定義したものがTermcapらしい。

冒頭のエラーは、terminatorのエントリが/etc/termcapの中になかったためである。

termcapにterminatorにエントリを追加するには、FreeBSDにterminatorをインストールするのが手っ取り早い。

まあ、道具は、一般的かつ普遍的なものを使うべきだということでしょうね。。。

2012年9月17日月曜日

[Mac] IMEのOn/OFFショートカットキー割当て変更

UbuntuでもWindowsでもIMEのOn/OFF切り替えは、[Shift-Space]と決めているので
Macでもそのように変更する。

今回、参考にさせて頂いたブログは、下記

http://kaworu.jpn.org/kaworu/2010-09-25-1.php

そして、ショートカットキー割当ての設定を行うツールが「KeyRemap4MacBook」
http://pqrs.org/macosx/keyremap4macbook/index.html.ja

上記URLからzipファイルをDLして適当にunzipして、dmgファイルからツールを
インストール

するとシステム環境設定に「KeyRemap4MacBook」のアイコンができるのでそこから起動してFor Japanese->Change Space Key->Shift+Space to KANA/EISU (toggle)にチェックを入れて閉じると設定が反映されている。

設定終了後に設定反映のおまじないがいらない当たりが便利だけどなんだが不安になる。

また、このツールでコピペのショートカットキーの設定変更も完了させた

2012年9月16日日曜日

vsftp from xinetd

stand-aloneではなく、xinetdからFTPサーバ(vsftp)を構築する。
今回も On FreeBSD (Ver. 9.0)

まず、xinetdをコンパイル&インストール

cd /usr/ports/security/xinetd
make config-recursive
make install


マニュアル、「man vsftpd.conf」や
 http://www.express.nec.co.jp/linux/distributions/knowledge/network/xinetd.html

参考にさせてもらいながら設定をする。
デフォルト設定ファイルを/usr/local/etc/xinetd.confを作成して、以下を記述。

#default configuration
defaults{
  instances = 60
  log_type = FILE /var/log/servicelog # syslog も指定できるみたい
  log_on_success = PID
  log_on_failure = HOST
  disabled = restatd
  cps = 35 30
}

includedir /usr/local/etc/xinetd.d


起動時にサービス起動できるように./etc/rc.confに以下を追加

xinetd_enable="YES"

つぎにvsftpのコンパイル&インストール

cd /usr/ports/ftp/vsftp
make config-recursive
make install

設定に関するドキュメントは、/usr/local/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/
以下にある。

まず、xinetdの各サービスの設定ファイルを格納するディレクトリを作成する
mkdir -p /usr/local/etc/xinetd.d

そして、xinetdのvsftpd用の設定ファイルのサンプルファイルをコピーする

cd /usr/local/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/
cp vsftpd.xinetd /usr/local/etc/xinetd.d/vsftpd

そして、コピーしたファイルに少し手を加える以下は、サンプルと手を加えた後のファイルの差分。



*** vsftpd.org Sun Sep 16 01:18:59 2012
--- vsftpd Sun Sep 16 01:03:52 2012
***************
*** 5,15 ****
          socket_type             = stream
          wait                    = no
          user                    = root
!         server                  = /usr/local/sbin/vsftpd
          per_source              = 5
          instances               = 200
!         no_access               = 192.168.1.3
!         banner_fail             = /etc/vsftpd.busy_banner
          log_on_success          += PID HOST DURATION
          log_on_failure          += HOST
  }
--- 5,15 ----
          socket_type             = stream
          wait                    = no
          user                    = root
!         server                  = /usr/local/libexec/vsftpd
!         #server_args             = start
          per_source              = 5
          instances               = 200
!         banner_fail             = /usr/local/etc/vsftpd.busy_banner
          log_on_success          += PID HOST DURATION
          log_on_failure          += HOST
  }

banner_fail は、instancesで指定した上の接続要求が来た場合のメッセージを格納したファイルをしていしており。中身は、下記のようにした。

421 Server busy , please try again later.


さらに、vsftpd本体の設定ファルサンプルをコピーする。

cp /usr/loca/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/vsftpd.conf /usr/local/etc/

そして、自分の環境に合わせてコピーした設定ファイルを変更する。下記は、サンプルファイルと変更後ファイルの差分である。

*** /usr/local/share/doc/vsftpd/EXAMPLE/INTERNET_SITE/vsftpd.conf Sat Feb  2 10:30:40 2008
--- /usr/local/etc/vsftpd.conf Sun Sep 16 00:39:40 2012
***************
*** 1,6 ****
  # Access rights
! anonymous_enable=YES
! local_enable=NO
  write_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=NO
--- 1,7 ----
  # Access rights
! listen=NO # default では、YESらしくこれは、スタンドアロンを意味するのでNOを指定
! anonymous_enable=NO 
! local_enable=YES
  write_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=NO
***************
*** 17,23 ****
  ascii_download_enable=NO
  async_abor_enable=YES
  # Performance
- one_process_model=YES # linux 用の設定なので削除
  idle_session_timeout=120
  data_connection_timeout=300
  accept_timeout=60
--- 18,23 ----

そして、下記ディレクトリ作成

mkdir /usr/share/empty



ここまでで一応設定は完了

xinetdを起動する

/usr/local/etc/rc.d/xinetd start

そして、ftpログインしてみる

ftp 127.0.0.1

無事ログイン出来ればOK

しかし、この設定では、ログイン後にホームディレクトリ以上に移動できてしまうのでそれを禁止したい。
chrootの設定をする必要がある。今回は、外部公開は、していないのでとりあえず次回。

2012年9月12日水曜日

[FreeBSD] make config-recorsiveのやり直し

タイトルの通りコンパイルオプションの指定し直しは、

rm -r /var/db/ports/*

2012年9月10日月曜日

[MySQL+PHP] 文字化け(クエッションマーク)

以前にもMySQL+PHPを扱った時には、文字化けに悩まされたが今回も悩んだ

MySQLの日本語を含むレコードがあるテーブルをダンプすると日本語部分が「?」と表示される。
DBの照合順序は、「utf-8」になっているので、mb_convert_encodingを使ったがだめだった。

my.cnfの[mysqld]節に「skip-character-set-client-handshake」を挿入してもだめだった。

結論は、「mysql_select_db」の後に「mysql_set_charset("utf8")」を挿入するだった。

2012年9月9日日曜日

[phpmyadmin] 導入

FreeBSDで導入してみた
xampp on Ubuntu しか使えない弱情な自分ですがなんとかログインまではできました


まず、コンパイル

cd /usr/port/databases/phpmyadmin/
make config-recursive
make install

すると、/usr/local/www/phpMyAdmin に配置されます。
当然普通の環境では、ここは、ドキュメントルート外なのでapacheのAliasを設定します。
httpd.confで

etc/apache22/Includes/*.conf

となっているので、etc/apache22/Includes/phpmyadmin.confを作成して以下を記入。

Alias /phpmyadmin "/usr/local/www/phpMyAdmin"

<Directory "/usr/local/www/phpMyAdmin">
Options none

Order Allow,Deny
Allow from all
</Directory>

さらに、phpMyAdminのディレクトリ以下をapacheのプロセスがアクセス可能にパーミションを適宜設定しておく。
そして、ディレクトリへアクセスした場合にindex.phpを処理するように httpd.confにindex.phpを追加

<IfModule dir_module>
   DirectoryIndex index.html index.php
</IfModule>

このindex.phpの追加に気づくまで、半日、http://localhost/phpmyadmin/にアクセスして403ステータスが帰って来るを繰り返してた。。。。(汗

あとは、設定を反映させるためにサーバーのプロセスを再実行

/usr/local/etc/rc.d/apache22 restart

そして、自分がエイリアスを設定したURLにアクセスしてログイン画面が表示されればOK!

しかし、ログインしてみると下記のようにあるのでまだ設定が足りない感じ

phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。

[apache] 実行ユーザー/グループの確認

httpd.confを確認する

私の環境では、

User www
Group www

となっていた。

[shell tips] ディレクトリのみを再帰的にchmod

find . -type d -print | chmod 755

[MySQL] ファイルに記述されたSQL文の実行

mysql -uuserName  -pyourPasswd  dataBaseName  < textFile

[mySQL] databaseの選択

USE database_name;

[FreeBSD] ports検索

以下は、nkfを探している例

cd /usr/port/

make search name=nkf

[FreeBSD] CDのマウント

/etc/fstabにCDに関する記述がある場合は、こんなことしなくてもいいらしいけどマニュアリーにやってみます。

まず、マウントポイントの作成

mkdir /media/cdrom0

そして、マウント

mount -t cd9660 /dev/cd0 /media/cdrom0


[FreeBSD] ブートメッセージの確認

/var/run/dmesg.boot

にブートメッセージが記録されている

2012年9月8日土曜日

[FreeBSD] 依存するportsも考慮したライブラリのUpdate

php5をコンパイルしていたら「libpcre」が古ぃよごらぁと叱られた
libpcreは、複数のアプリが使用しており途方に暮れた

google先生に聞いてみたところgihyo.jpのページにもろな記事があった


portmaster の場合は下記で依存ソフトウェアも含めてコンパイルできる。

env LOCALBASE=/usr/local portmaster -w -D -G --no-confirm -r pcre

-w ) ビルト後に古いライブラリを/usr/local/lib/compt/pkgに移動する

-D ) Distfileを削除しない?

-G ) make config を抑止する

--no-confirm ) update時にユーザーに問わない

-r ) 指定されたport を依存するものも含めて再コンパイル

[apache] 組み込まれているモジュールの確認

/usr/local/sbin/httpd -l

2012年9月7日金曜日

[FreeBSD] コンパイル時のオプション確認

portsのコンパイル時のオプション確認

目的のportsのディレクトリで

make showconfig

[FreeBSD] パッケージの衝突

php5インストール時にpkgconfigがインストールされているものより新しいバージョンが必要であった。

pkg-delete -f pkg-config-version


[port] 最新のソースをfetch

portsnapを使った方法

初めて使うとき

portsnap extract

2回目から

portsnap fetch update

[apache] 起動時のFQDNがしていされてないというメッセージ

apache起動時に

httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

とFQDNが指定されていないと言われる場合

httpd.confに

ServerName host-name:80

を追加

[FreeBSD] ログインシェル変更

chsh -s path-to-login-shell

なお、ここで指定するPATHは、/etc/shellsに指定されていなければいけない。

[ports] 習うより慣れろ

ということで apacheのインストールをしてみた。いくつか壁にぶつかったが本質的な問題は以下


  • ライブラリがインストールされない
  • ライブラリがインストールされているが古い
  • ライブラリがインストールされているがサーチパスに入っていない

まず一つ目 portsによるインストール方法

make config # コンパイルオプションの指定
make install clean # コンパイルしてコンパイル後に作業ファイルを削除

なお、依存関係のあるportsを再帰的にconfigしてくれる「make config-recursive」というおまじないも

追記: config-recusiveしたのを削除したいときは、
cd /var/db/ports
rm -rf *

次に2つ目
まず、古いバイナリを削除

make deinstall

そして、最新のソースを取得して、コンパイル
port fetch update
make install clean

Hint ) どこにどんなportsがあるかわからないときは、
本家サイトに行って検索

最後に3つめ

/etc/ld.so.conf

に望みのPathを追加後更新を反映するために下記を実施

ldconfig


また、portmasterというportsを管理するためのツールもあるらしい
まだまだ勉強が必要

2012年9月3日月曜日

Arduino始めました

今更感が果てしないですがArduino始めました
雑誌等で名前は聞いたことがあってこの度
あることをやりたくなってそれがArduinoでやるのが早そうなんで初めて見ました

そのあることは、だいぶ勉強が必要そうなので成功した折には、投稿するということで

秋葉原の千石電商に買いに行って来ました
事始めの課題としては、温度センサの値を「簡易Webサーバーから見れるようにする」です。

まず、買ってきたEthernetシールドのMACアドレスをメモします。
Arduino Uno上に実装してしまうと見えづらくなってしまうので注意が必要です。

こちらが、接続状況外観。Arduino Uno上にEthernetシールドを実装しております。温度センサには、「LM35DZ」(こちらは、秋月電子で購入)を使用。

こちらは、ブレッドボード側。
そして、こちらがArduino側。
きちんとLM35DZのデータシートを見て接続します。

次にArdunioのIDEのインストール。Arduinoのサイトより自分のプラットフォームの物をDLし、解凍。
なお、今回の開発は、Windowsで行なっています。次にArduinoとPCをUSBケーブルで接続します。ディバイスマニジャーを開き「不明なディバイス」と表示されているArduinoの項目を探して、プロパティより、「ドライバの更新」を選択。IDEのインストールディレクトリ内のdrivers\FTDI USB Drivers\を指定する。これでドライバのインストールは完了。ここで、セットされたCOMポートを確認しておく。

そして、\libraries\Ethernet\examples\WebServerディレクトリを自分の好きな開発用のディレクトリにコピーしてくる。これは、アナログポートの値を表示する簡易Webサーバーのサンプルである。
ここいらの情報は、適宜ググっていただきたい。

サンプルの変更ができたらいよいよ、プログラムをROMに書き込む。ここでIDEの「ツール-シリアルポート」ドライバインストール時に指定したCOMポートが選択されていることを確認する。

そして、ROMにプログラムを書き込み、Ethernetシールドに割り当てたIPアドレスにアクセスした結果が以下である。


analog input0が温度センサの出力である。Arduino のADコンバータは、量子化ビットが10bitである。そして、LM35DZは、今回の回路の場合0℃で0mV且つ10mV/℃で出力する。さらに入力電圧は、5Vである。

ゆえに温度は、

59/1024 x  5 x 1000 /  10 = 28.8 (℃)

となる。