ESXi6.0 + CentOS7.0 に vmware-tools をインストールする
5月 12, 2015 — 21:36

気づいたらESXi6.0が出ていたので現在試しているのですが最小構成でインストールしたCentOS7.0にvmware-toolsをインストールしてみたのでメモしておきます。

必要なパッケージをインストールします
# yum -y install perl net-tools
※ net-tools は vmware-tools で ifconfig が必要なようなのでインストールします。

あとは基本的にCentOS6以前と同じ手順で、vmware-tools をインストールするだけです。
※ インストーラを起動すると open-vm-tools でなく vmare-tools を本当にインストールするか訪ねますが”yes”と答えればインストールできます。

Go言語で皆大好き htpdate を書いてみた
4月 8, 2015 — 21:07

PCやサーバの時間合わせにntpdateを通常用いますが、80番と443番しか外部接続を許されないネットワークだとNTPが使えない事があります。そんな時にNTPの代替としてWEBサーバの時間を元にマシンの時間を合わせるコマンドが”htpdate”です。

仕組はHTTPのレスポンスヘッダに含まれる”Date”を元にソコソコ正確な時間を取得してOSの時間を設定します。
とても単純明快で清々しいくらいです。

例えばこのサーバだと、このようなレスポンスヘッダが帰ってきます。
この中の「Date: Wed, 08 Apr 2015 11:35:10 GMT」がサーバの時間となります。

HTTP/1.1 200 OK
Date: Wed, 08 Apr 2015 11:35:10 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Fri, 29 Jun 2012 10:40:46 GMT
ETag: "16e07e-5-4c39a14ab6780"
Accept-Ranges: bytes
Content-Length: 5
Connection: close
Content-Type: text/html

# vi htpdate.go

package main

import (
  "os"
  "fmt"
  "time"
  "syscall"
  "net/http"
)

// HTTPサーバへアクセスしてヘッダーからアクセス日時を取得する関数
func get_http_date(url string) (string, error) {
  response, err := http.Get(url)
  if err != nil { return "", err }

  access_time := response.Header.Get("Date")
  return access_time, nil
}

// 引数として受け取ったUNIXタイムをOSの時間に設定する関数
func settime(sec int64, usec int64) error {
  tv := syscall.Timeval{ Sec: sec, Usec: usec }

  return os.NewSyscallError("settimeofday", syscall.Settimeofday(&tv))
}

func main() {
  if len(os.Args) > 1 {
    // とりあえずHTTPサーバを1個だけ引数に受け取る
    host_name  := os.Args[1]
    target_url := "http://" + host_name

    // HTTPサーバからアクセス日時を取得
    access_time, err := get_http_date(target_url)
    if err != nil {
      fmt.Fprintln(os.Stderr, "Failed to access the HTTP server.")
      os.Exit(1)
    }

    // 取得した時間をパーズする
    server_time, err := time.Parse(time.RFC1123, access_time)
    if err != nil {
      fmt.Fprintln(os.Stderr, "Time of format is not a RFC1123.")
      os.Exit(1)
    }

    // 取得した時間をOSの時間として設定する
    if err := settime(server_time.Unix(), 0); err != nil {
      fmt.Fprintln(os.Stderr, "Failed to set the date and time.")
      os.Exit(1)
    }

    fmt.Println(time.Now())
    os.Exit(0)
  } else {
    fmt.Fprintln(os.Stderr, "Please set the HTTP server to argument.")
    os.Exit(1)
  }
}

実行してみると時間が設定される事が分かるはずです。
# go run htpdate.go orsx.net

2015-04-08 21:05:18.000046645 +0900 JST

Proxyなどは対応していませんがGo言語を勉強するうえで良い教材になりそうな気がしたので簡単に実装してみました。

[HTTP Time Protocol / htpdate] Webプロキシを経由して時刻を同期するの巻 – TrippyBoyの愉快な日々
Introduction | HTTP Time Protocol

CentOS7 ネットワーク設定 消えた ifconfig と system-config-network について
7月 9, 2014 — 18:52

CentOS7がリリースされましたのでネットワークについて若干メモを残しておきます。

CentOS6以前は以下のコマンドでIPアドレスを確認していました

# ifconfig

CentOS7以降は以下のコマンドを使うようになるみたいです

# ip addr show

CentOS6以前は以下のコマンドを使用してネットワークやIPアドレスの設定をしていました

# system-config-network

CentOS7以降は以下のコマンドを使用してネットワークやIPアドレスの設定を行うようです

対話式の場合
# nmtui

コマンドラインベース
# nmcli

VI(VIM)の簡単な使い方
7月 19, 2013 — 9:56

5年以上もLinux系サーバと戯れときながら今更過ぎますが、これからのLinuxユーザの事を考えVIコマンドの簡単な使い方をメモしておきます。はっきり言ってVIの機能を語り尽くせば本が一冊書けるレベルの量です。O’ReillyでもVIの書籍が出ています。VIを熟知したい人は是非書籍を買ってください。

VI(VIM)コマンドとは

マウスやカーソルキーがキーボードに存在しない時代、UNIX全盛期に作られ非常に長い時間UNIXとともに進化してきたシンプルかつ強力なテキストエディタです。そしてVIを参考に機能を拡張したものがVIMです。基本的にVIMはVIコマンドとして使えるのでVIとして解説します。

VIコマンドを使う主な利点

・他のエディタと異なり基本的にUNIX系OSに標準で入っている
・UNIXの書籍や解説サイトでは非常に高い割合でVIを用いて設定など解説している
・リモート操作時に接続が不意に切れてもEmacsの様にプロセスが暴走しない

本当に基本的な使い方一覧

“$や%や#”はシェル上であるという表示です。各自環境に合わせて読んでください。

起動方法
$ vi ファイル名
上記を実行すると”ノーマルモード”で起動します。
※ 全角文字をファイル名に用いるのは文字化けの元です。半角英数を使いましょう。
※ 白文字をファイル名に用いるのは混乱の元です。アンダースコアを使いましょう。

記述方法
ノーマルモードから”i”キーを押す事により”挿入モード”となり文字入力が可能になります。
ノーマルモードに戻りたい場合は”ESC”キーを押します。

保存方法
ノーマルモードより”:w”を入力し”Enter”キーを押します。

終了方法
保存後に終了する場合は”:wq”を入力し”Enter”キーを押します。
保存せず終了する場合は”:q!”を入力し”Enter”キーを押します。

※ ファイルを編集する前には必ず元のファイルをバックアップする癖を付けましょう。
※ ファイルを編集する時は必ず編集したらこまめに保存する癖を付けましょう。

覚えておくと便利な操作一覧(ノーマルモード上での操作)

直前のコマンド操作を取り消す

”u”キーを押すと直前の操作を取り消す事ができます。
※ 現代の一般的なエディタとは異なり挿入モードもコマンド単位として戻ります。

ファイルの表示場所を変える

ファイルの先頭に移動
削除したい文字にカーソルを合わせ”g”キーを2回押すと先頭に移動する事ができます。

ファイルの最後に移動
削除したい文字にカーソルを合わせ”shift”キーと”g”キーを同時に2回押すと最後に移動する事ができます。

行番号の表示

”:set number”を入力し”Enter”キーを押します。
表示を消す場合はノーマルモードより”:set nonumber”を入力し”Enter”キーを押します。

指定する行番にカーソル移動

”:カーソルを移動させたい行数”を入力し”Enter”キーを押します。

文字列検索

”:/検索ワード(正規表現使用可能)/”を入力し”Enter”キーを押します。
検索結果は”n”キーを押すことにより次を検索できます。

文字列置換

個々に置換
”:/検索ワード(正規表現使用可能)/置換後の文字/”を入力し”Enter”キーを押します。

カーソルのある行全てを置換
”:/検索ワード(正規表現使用可能)/置換後の文字/g”を入力し”Enter”キーを押します。

ファイル内全て再帰的に置換
”:%s/検索ワード(正規表現使用可能)/置換後の文字/g”を入力し”Enter”キーを押します。

ノーマルモードからの削除

ノーマルモードからの文字削除
削除したい文字にカーソルを合わせ”x”キーを押すと文字を削除する事ができます。

ノーマルモードからの行削除
削除したい文字にカーソルを合わせ”d”キーを2回押すと文字を削除する事ができます。

文字コードを指定して開き直す

”:e ++enc=文字エンコーディング”を入力し”Enter”キーを押します。

Linux ファイル・ディレクトリ作成時のデフォルトパーミッションを一般ユーザ権限で設定する
5月 6, 2013 — 10:51

学校やレンタルサーバなどではセキュリティーを意識してかデフォルトパーミッションが600や700に設定されていたりする場合がある。非常に良い設定であると思うが、普段からサーバを触る機会の多い自分からすれば普通にファイルを作成すれば他のユーザから閲覧される可能性があるのは百も承知な訳で煩わしいだけである。そのためこちら側でデフォルトパーミッションを変更したいと思う。

変更自体は簡単で”~/.bash_profile”の中に”umask 022″を追記すればファイルは644・ディレクトリは755で作成される。

面倒な場合やコマンドが叩ける環境であるならば下記のコマンドを実行すればよい。
$ echo “umask 022” >> ~/.bash_profile