ジョコビッチのテニスレッスン動画

1ショットずつしか映ってないけどこれはいい。

A Free Lesson With: Novak Djokovic

LPIC レベル2 覚えられないコマンドとオプションメモ

あー全然オプションが覚えられない。覚えられない。

netstat [オプション]

実行システム上のネットワーク状態について様々な情報を表示できるコマンド

-l 待ち受け状態のソケットのみを表示
-a 待ち受け状態によらずすべてのソケットを表示
-c 情報を毎秒更新して最新状態を表示
-i ネットワークインターフェースの統計を表示
-r ルーティングテーブルを表示
-n ホスト名などを名前解決せずに数字(IP)で表示

これに関連して、、、ネットワーク関連のユーティリティコマンドの概要

ping ターゲットホストまでの疎通を確認
traceroute ターゲットホストまでの経路を確認
tcpdump ネットワークを監視してパケットをキャプチャ
nc TCP/UDPを利用して様々な低レベルの操作を行う(telnet的な)
nmap ネットワークのスキャンを行う

ログインしているユーザへの情報通知方法

/etc/issue ログインプロンプトの手前に表示される内容を設定するファイル
/etc/motd ユーザがシステムにログインした直後に、コンソールに表示される内容を設定するファイル
wall コマンド ログインしているユーザ全員のコンソールに、引数で指定したメッセージを表示
shutdown コマンドの -k オプション wall と同様にログインしているユーザ全員にメッセージを送る

※-k オプションを指定した場合にはシャットダウン・再起動などの動作はキャンセル

tcpdump [オプション] [監視対象の条件式]

host ダンプ対象とするホストを指定
port ダンプ対象とするポートを指定
tcp TCPのパケットを対象とする
udp UDPのパケットを対象とする
icmp ICMPのパケットを対象とする
arp ARPのパケットを対象とする

オートマウントの動作を設定するためのメイン設定ファイル

/etc/auto.master

nmap [スキャンタイプ] [オプション] 対象

スキャンタイプ(何も指定しないとデフォルトでは TCP SYN スキャン)

-sT TCPスキャン
-sU UDPスキャン
-sP Pingスキャン

オプション

-p 続けて対象ポート範囲を指定
-F 有名ポートを対象とした高速スキャン
-O 対象ホストのOS識別を試みる

メモリ上に配置する特殊なファイルシステム

tmpfs

OpenVPN のメイン設定ファイル

/etc/openvpn/server.conf

/etc/inittab のアクション指定子

initdefault デフォルトランレベルを指定
once 指定ランレベルになったら一度だけ実行
wait onceと同様。ただしプロセスの終了を待つ
boot ブート時に実行する
bootwait boot時と同様だが、プロセスの終了を待つ
sysinit bootと同様だが、より先に実行する
respawn プロセスが終了しても自動的に再起動

/etc/inittab は以下の形式

ID:ランレベル:アクション指定子:コマンド

sysinit, boot, bootwait はランレベルによらない設定のためランレベルは無視される。
※空欄にしておくらしい。

XFS関連のコマンドのややこしさが異常。。

xfs_check XFSをチェックする
xfs_admin XFSの設定を行う
xfs_info XFSの情報を表示する
mkfs.xfs XFSを作成する
xfsrestore バックアップから XFS ファイルシステムの復元を行う
xfsdump XFS ファイルシステムのバックアップを行う

ソースからのカーネルのビルドとインストール(再構築)の基本的な手順

1. 設定を初期化 make mrproper で設定ファイルを含めてディレクトリ内を初期化。
展開したソースにあらかじめ不適切な設定が含まれている可能性や、
古いカーネルの設定が残っている可能性を考慮し、はじめに必ず実行する。
2. 設定を行う 初期化された設定を今回の再構築用に設定する。
make oldconfig など。
ほかに make config で対話的に設定する方法、
make menuconfig でコンソール上のメニューから設定する方法などなど。
3. ビルドを行う make もしくは make all とすることで、依存関係の解消、
カーネル本体とモジュールのビルド、一時ファイルの削除が自動で行われる。
4. システムにインストールする ビルドを行っただけではシステムに配置されてはいないので、インストールを行う。
通常、make modules_install としてモジュールをインストールしてから、
make install としてカーネル本体をインストールする。
make install によって /boot 以下にカーネルイメージが配置され、
ブートローダに新しいカーネルを使う起動設定が追加される。

LPIC:ncコマンド

全然知らなかったのでメモ。

ncコマンド

TCP/UDP を使って任意の通信を行わせることのできる、汎用性の高いコマンド

もともとnetcatだったらしい。

書式

nc [オプション] ホスト ポート

オプションを指定せずにホストとポートを指定するとtelnetのように対話型になる。

標準出力の内容を送信するのでシェルのパイプで自動実行させることも可能。

$ cat ./commandstring | nc mail.example.com 25

ポートスキャンもできる。

$ nc -vz target.com 100-200

代表的オプション

オプション 説明
-v 接続に成功した際のログメッセージなどを出力させるためのオプション
-z 接続のみを試み、データを送信することはしないというオプション
n1-n2 ポートの範囲を指定

ncとnmapでポートスキャンができる。

■参考URL
ncコマンド (netcat)

WordPressで手軽に表(table)を作りたい。TinyMCE Advanced

WordPressで手軽に表(table)を作りたい。そんなときのメモ。

今までなにも考えずに記事を書いてきたけど、表組みは無かった。

デフォルトでは表組み用のボタンが無いので、表作りたいときに直で
タグ打つのは無いなーと思ってプラグイン探したら発見。

「TinyMCE Advanced」プラグインで追加できるツールの使い方

WordPressで表組み(テーブル)を作るテキストエディターツール解説

管理画面で「プラグイン」⇒「新規追加」⇒「検索」⇒「TinyMCE Advanced」で検索すればでてくる。

通常通りFTPやらでインストールができます。

■設定画面

■表関連を追加した投稿の編集画面の様子

■表組み実験

zenback導入してみた

zenback導入してみた

zenback

PV(ページビュー)で悩むならzenbackで一発解決!

zenbackは、たった1行のコードを埋めるだけで、ブログ記事ののPVが10%向上する魔法のサービス。しかも無料!

本当かな~と疑いつつとりあえず導入。

上記サイトではMTへの導入だったけど
このブログはWordpressなのでWordpress用
に簡単なプラグインが無いか調べてみたらやっぱりあった。

ブログ記事下にzenbackを表示する簡単方法 WordPressプラグイン「EZ zenback」

プラグインの検索で「EZ zenback」を検索してインストール

設定でzenbackのタグを埋め込み

その他項目の調整

設定の保存で終了

zenbackのエリアがちゃんと表示されるには時間がかかるみたい
なので気長に待つ。

./jqをインストールする

./jqをインストールする

MOONGIFT:JSONを使った開発のお供にどうぞ「jq」

JSONデータ構造を見やすくしてくれるコマンド。

本家サイト

jq is like sed for JSON data – you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.

■環境確認

# cat /etc/redhat-release
CentOS release 5.7 (Final)
# uname -a
Linux xxxxxxx.com 2.6.32-042stab049.6 #1 SMP Mon Feb 6 19:16:12 MSK 2012 i686 i686 i386 GNU/Linux

■ソースのダウンロード(今回の環境ではDownload source)

# cd /usr/local/src/
# wget http://stedolan.github.com/jq/download/source/jq.tgz
--2012-11-02 14:02:39--  http://stedolan.github.com/jq/download/source/jq.tgz
stedolan.github.com をDNSに問いあわせています... 204.232.175.78
stedolan.github.com|204.232.175.78|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 450943 (440K) [application/octet-stream]
`jq.tgz' に保存中

100%[===================================================================================================================>] 450,943      339K/s 時間 1.3s

2012-11-02 14:02:41 (339 KB/s) - `jq.tgz' へ保存完了 [450943/450943]

■ソースの展開

# tar xzvf jq.tgz
stedolan-jq-95a0074/
stedolan-jq-95a0074/.gitignore
.....ずらずら.....
stedolan-jq-95a0074/testdata

■フォルダに入ってmake

# cd stedolan-jq-95a0074/
# ls
COPYING    builtin.h   compile.h  forkable_stack.h    jv.c       jv_parse.c    jv_unicode.h          lexer.l    opcode.h       parser.gen.info
Makefile   bytecode.c  docs       frame_layout.h      jv.h       jv_parse.h    jv_utf8_tables.gen.h  locfile.h  opcode_list.h  parser.h
README.md  bytecode.h  execute.c  gen_utf8_tables.py  jv_dtoa.c  jv_print.c    lexer.gen.c           main.c     parser.gen.c   parser.y
builtin.c  compile.c   execute.h  jq_test.c           jv_dtoa.h  jv_unicode.c  lexer.gen.h           opcode.c   parser.gen.h   testdata
# make
gcc -Wextra -Wall -Wno-missing-field-initializers -Wno-unused-parameter -std=gnu99 -ggdb -Wno-unused-function -O -DJQ_DEBUG=0 -o jq parser.gen.c lexer.gen.c opcode.c bytecode.c compile.c execute.c builtin.c jv.c jv_parse.c jv_print.c jv_dtoa.c jv_unicode.c main.c
# ll
合計 860
-rw-rw-r-- 1 root root   2957 10月 22 03:52 COPYING
....
-rwxrwxr-x 1 root root 292707 11月  2 14:04 jq
....

■「jq」が出来たので「/usr/local/bin/」にシンボリックを貼ってコマンドを登録

# cd /usr/local/bin/
# ln -s /usr/local/src/stedolan-jq-95a0074/jq
# ll
合計 5932
.....
lrwxrwxrwx 1 root root      37 11月  2 14:05 jq -> /usr/local/src/stedolan-jq-95a0074/jq
.....

■サイトのサンプルを試す

# curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[0]'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5192  100  5192    0     0  11854      0 --:--:-- --:--:-- --:--:-- 2708k
{
  "to_user_name": null,
  "to_user_id_str": "0",
  "to_user_id": 0,
  "id": 264231272392581120,
  "geo": null,
  "from_user_name": "Chris Johnson",
  "from_user_id_str": "911210857",
  "from_user_id": 911210857,
  "from_user": "CHRISpy_Json",
  "entities": {
    "user_mentions": [],
    "urls": [],
    "hashtags": [
      {
        "indices": [
          103,
          121
        ],
        "text": "accomplishedtweet"
      }
    ]
  },
  "created_at": "Fri, 02 Nov 2012 05:03:39 +0000",
  "id_str": "264231272392581120",
  "iso_language_code": "en",
  "metadata": {
    "result_type": "recent"
  },
  "profile_image_url": "http://a0.twimg.com/profile_images/2777986607/635aaa3cc2f805fb9f642d6e616e3ce0_normal.jpeg",
  "profile_image_url_https": "https://si0.twimg.com/profile_images/2777986607/635aaa3cc2f805fb9f642d6e616e3ce0_normal.jpeg",
  "source": "<a href="http://twitter.com/download/iphone">Twitter for iPhone</a>",
  "text": "It's 1 in the morning, i just finished all of my hw, i got to skype ailise and i'm not even that tired #accomplishedtweet",
  "to_user": null
}

出来たー

LPIC レベル2関連-カーネルコンパイルについて

LPIC レベル2関連-カーネルコンパイルについて

■カーネルの再構築を考慮するケース
・必要なデバイスドライバがカーネルに含まれていない
・使用しているハードウェアに最適化したカーネルを利用したい
・カーネルの最新の機能を利用したい
■カーネルコンパイル(再構築)の流れ

ハードウェアの確認
必要な機能の確認
カーネルの確認
コンパイルに必要なツールの準備
カーネルソースの入手
カーネルソースコードの展開
パッチの適用
既存カーネルの設定を反映させる
/usr/src/linuxへのシンボリックリンクを張る
カーネルを設定する
コンパイルを実行する
カーネルに動的に組み込むモジュール(ローダブル・モジュール)を/lib/modules/[カーネルバージョン]以下に格納する
カーネルに導入する
ブートローダに登録する
システムを再起動して起動を確認する

■メモ
・カーネルコンパイルの難所はカーネル・パラメータの指定内容とコンパイル時の依存関係
・静的に組み込む、組み込まない、動的に組み込むモジュールがある
・設定に迷ったらモジュールにする
・入手したカーネルは慣習として/usr/srcディレクトリに展開する
・カーネル・パラメータの設定は「menuconfig」を推奨?
・カーネルを再構築する場合はカーネルモジュールもカーネルにあわせてコンパイルしなおす必要がある
・kernel.orgで配布されているディストリビュータの手が入っていないカーネルのことをvanilla kernelという

■参考URL

Linuxカーネル・コンパイル入門 前編

Linuxカーネル・コンパイル入門 後編

Linuxカーネルの設定パラメータ

CentOSに最新カーネルを導入する(カーネル再構築)

[LPIC]カーネルの再構築(実際に実施したメモ)

The Linux Kernel Archives(カーネル開発グループが配布しているオリジナルのカーネル・ソース)

■自分でコンパイルしたログ

◇フォルダ移動
# cd /usr/src/
◇カーネルソースの取得
# wget http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.60.tar.bz2
◇ソース展開
# tar xjvf linux-2.6.32.60.tar.bz2
◇フォルダに入る
# cd linux-2.6.32.60
◇現在のカーネルの設定をコピー
# cp /boot/config-2.6.18-308.el5 .config
◇現在のカーネルの設定を新しい設定に反映させる
# make oldconfig | tee oldconfig.log
◇カーネルコンフィギュレーション
これやら無いと起動時にkernel panic出てびっくりした。
# make menuconfig
General setup --->
[*] enable deprecated sysfs features to support old userspace too
◇設定が反映されているか確認(yになってることを確認)
# cat .config | grep CONFIG_SYSFS_DEPRECATED
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
◇makeする(カーネルとカーネルモジュールのコンパイル)
# make | tee make.log
◇カーネルモジュールのインストール
# make modules_install | tee modules_install.log
◇カーネルのインストール
# make install | tee install.log
◇起動の順番を変える(default値の変更)
# vim /boot/grub/menu.lst
◇再起動
# reboot
◇確認
# uname -r
2.6.32.60

※LPICレベル2の順番だと出来なかったので以下のサイトを参考に実際にコンパイルを行った。
centosのkernel再構築 2.6.18→2.6.37(stable)

メモ:SymfonyではじめるDIを読んだので実際に写経した。

vol.71は楽しい記事が多いなぁ~。
WEB+DB PRESSでSymfonyではじめるDIを読んだので実際に写経する。

■まずphpのバージョン確認(Composerの兼ね合いで。。)

$ php -v
PHP 5.3.3 (cli) (built: Jul  3 2012 16:40:30)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

■Composerのインストール

$ curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
Some settings on your machine may cause stability issues with Composer.
If you encounter issues, try to change the following:

Your PHP (5.3.3) is quite old, upgrading to PHP 5.3.4 or higher is recommended.
Composer works with 5.3.2+ for most people, but there might be edge case issues.

Downloading...

Composer successfully installed to: /path/symfony_DI/composer.phar
Use it: php composer.phar

バージョンで文句言われたけど無視。

■Composer用の設定ファイル作成
$ vim composer.json

{
        "require":{
                "symfony/dependency-injection": "2.1.*",
                "symfony/config": "2.1.*",
                "symfony/yaml": "2.1.*"
        }
}

 

$ ll
total 632
drwxrwxr-x 2 takeuchi takeuchi   4096 Oct 31 15:21 ./
drwxrwxrwx 8 takeuchi takeuchi   4096 Oct 31 15:18 ../
-rw-rw-r-- 1 takeuchi takeuchi    118 Oct 31 15:21 composer.json
-rwxr-xr-x 1 takeuchi takeuchi 631264 Oct 31 15:18 composer.phar*

■依存パッケージの取得

$ php composer.phar install
Loading composer repositories with package information
Installing dependencies
  - Installing symfony/dependency-injection (v2.1.3)
    Downloading: 100%

  - Installing symfony/config (v2.1.3)
    Downloading: 100%

  - Installing symfony/yaml (v2.1.3)
    Downloading: 100%

Writing lock file
Generating autoload files
$ ll
total 644
drwxrwxr-x 3 takeuchi takeuchi   4096 Oct 31 15:23 ./
drwxrwxrwx 8 takeuchi takeuchi   4096 Oct 31 15:18 ../
-rw-rw-r-- 1 takeuchi takeuchi    118 Oct 31 15:21 composer.json
-rw-rw-r-- 1 takeuchi takeuchi   4939 Oct 31 15:23 composer.lock
-rwxr-xr-x 1 takeuchi takeuchi 631264 Oct 31 15:18 composer.phar*
drwxrwxr-x 4 takeuchi takeuchi   4096 Oct 31 15:23 vendor/

■依存のないクラスの実装とかそれ以降のコード
$ vim initial.php

namespace App{
         class Controller{
                private $memberRegistration;
                private $router;
                private $templating;
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function registerAction(){
                        echo __METHOD__.PHP_EOL;
                        $memberData=$this->getRequestData();
                        $this->memberRegistration->register($memberData);
                        $html=$this->templating->render('register');
                        return $html;
                }
                public function setMemberRegistration(\Domain\MemberRegistration $memberRegistration){
                        echo __METHOD__.PHP_EOL;
                        $this->memberRegistration=$memberRegistration;
                }
                public function setRouter(\App\Router $router){
                        echo __METHOD__.PHP_EOL;
                        $this->router=$router;
                }
                public function setTemplating(\App\Templating $templating){
                        echo __METHOD__.PHP_EOL;
                        $this->templating=$templating;
                }
                private function getRequestData(){
                        return array();
                }

        }

        class Templating{
                private $router;
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function render($templateName){
                        echo __METHOD__.PHP_EOL;
                        $url=$this->router->generateUrl('test');
                }
                //セッターインジェクション
                public function setRouter(\App\Router $router){
                        $this->router=$router;
                }
        }

        class Router{
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function generateUrl(){
                        echo __METHOD__.PHP_EOL;
                }
        }
}

namespace Domain{
        class MemberRegistration{
                public function __construct(){
                        echo __METHOD__.PHP_EOL;
                }
                public function register($memberData){
                        echo __METHOD__.PHP_EOL;
                }
        }
}

namespace{
        require_once 'vendor/autoload.php';
        use Symfony\Component\DependencyInjection\ContainerBuilder;
        use Symfony\Component\DependencyInjection\Reference;

        $container=new ContainerBuilder();

        $container->register('app.controller', '\App\Controller')
                ->addMethodCall('setTemplating', array(new Reference('app.templating'),))
                ->addMethodCall('setRouter', array(new Reference('app.router'),))
                ->addMethodCall('setMemberRegistration', array(new Reference('domain.member_registration'),));

        $container->register('app.templating', '\App\Templating')
                ->addMethodCall('setRouter', array(new Reference('app.router'),));

        $container->register('app.router', '\App\Router');

        $container->register('domain.member_registration', '\Domain\MemberRegistration');

        $controller=$container->get('app.controller');
        $controller->registerAction();
}

■実行結果

$ php initial.php
App\Controller::__construct
App\Templating::__construct
App\Router::__construct
App\Controller::setTemplating
App\Controller::setRouter
Domain\MemberRegistration::__construct
App\Controller::setMemberRegistration
App\Controller::registerAction
Domain\MemberRegistration::register
App\Templating::render
App\Router::generateUrl

このあとはYAMLにしたりダンプで再利用とか。

■参考URL
PHPの外部ライブラリの管理にComposerを使う

HerokuでPHP

HerokuでPHP

WEB+DB PRESSのvol.71のHeroku特集を見てRailsで試してみたけど
PHPも動くらしいのでやってみた。

Play framework2を試すはずなのに脱線しまくり。

ではHerokuでPHPを動かしてみる。
Herokuのアカウント持ってて、herokuコマンドインストール済みのログイン済みで以下。

$ mkdir myapp
$ cd myapp/
$ git init
Initialized empty Git repository in /path/myapp/.git/
$ vim index.php
<?php echo "Hello Heroku!!";

phpinfo();

?>
$ git add .
$ git commit -m "first commit"
[master (root-commit) 024c43b] first commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 index.php
$ heroku create --stack cedar
Creating evening-chamber-8448... done, stack is cedar
http://evening-chamber-8448.herokuapp.com/ | git@heroku.com:evening-chamber-8448.git
Git remote heroku added
$ git push heroku master
Counting objects: 3, done.
Writing objects: 100% (3/3), 252 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)

-----> Heroku receiving push
-----> PHP app detected
-----> Bundling Apache version 2.2.22
-----> Bundling PHP version 5.3.10
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for PHP   -> web
-----> Compiled slug size: 9.5MB
-----> Launching... done, v4
       http://evening-chamber-8448.herokuapp.com deployed to Heroku

To git@heroku.com:evening-chamber-8448.git
 * [new branch]      master -> master

今回であれば以下にブラウザでアクセスすれば表示されるはず(もう消したけど)
http://evening-chamber-8448.herokuapp.com/

すっごい簡単。。

※index.php置かないと

-----> Heroku receiving push
 !     Heroku push rejected, no Cedar-supported app detected

To git@heroku.com:laxherokuphptest.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:laxherokuphptest.git'

とか言われるので注意。

で実際にphpinfoを見てみるとmbstringが無いのでググって調べる。

herokuで(mbstring有効な)phpがすぐ動いた

HerokuのBuildpackを利用してmbstringが有効なPHPサーバを立ててみた

buildpackを使ってみればいいのか。
ということでもう一度再挑戦。

$ mkdir myapp
$ cd myapp/
$ git init
Initialized empty Git repository in /path/myapp/.git/
$ vim index.php
<?php echo "Hello Heroku!!";

phpinfo();

?>
$ git add .
$ git commit -m "first commit"
[master (root-commit) 1dca1f5] first commit
 1 files changed, 5 insertions(+), 0 deletions(-)
 create mode 100644 index.php
$ heroku create --buildpack https://github.com/winglian/heroku-buildpack-php -s cedar
Creating stark-wildwood-1510... done, stack is cedar
BUILDPACK_URL=https://github.com/winglian/heroku-buildpack-php
http://stark-wildwood-1510.herokuapp.com/ | git@heroku.com:stark-wildwood-1510.git
Git remote heroku added
$ git push heroku master
Counting objects: 3, done.
Writing objects: 100% (3/3), 261 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)

-----> Heroku receiving push
-----> Fetching custom git buildpack... done
-----> PHP app detected
-----> Extracting Apache 2.4.3 PHP 5.4.8 build 2.0-a4
-----> from http://vulcan-wlian.herokuapp.com/output/b8bace2a-2a8e-4441-acc3-eb8e6ad608a5
Creating Slug Identifier file with id: c24ac748141520640ed3220f65e2cde0
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for PHP   -> web
-----> Compiled slug size: 10.3MB
-----> Launching... done, v5
       http://stark-wildwood-1510.herokuapp.com deployed to Heroku

To git@heroku.com:stark-wildwood-1510.git
 * [new branch]      master -> master

mbstring入ったーbuildpackすげー。
というかこのbuildpack PHP5.4.8だし

herokuでPHP面白いかも。

こんなのも見つけた。

mhoofman / wordpress-heroku

Symfony2 on heroku (other php frameworks too)