このブログを検索

2013-07-24

TCHAR型

完全にメモ

http://paken.s1.hayasoft.com/sb/log/eid13.html

TCHAR型のススメ
2007年01月31日 水曜日 | Paken > Iketaki |
C/C++でWindowsプログラミングをやり始めたとき、誰もが一度は嫌になるあの謎のデータ型。
"LPCTSTR"なんてのはその典型例です。
しかし、これが何かを知らぬまま放っておいてる、ということが意外とありがちなんですよね。
というわけで、一応簡単に解説しておくことにしよう、と思ったまでです。
※ C/C++を使った一般的なWindowsプログラミングをする方向けです。
※ 開発環境は、Microsoft Visual C++ 2005 を想定しています。

1.UNICODE
文字コードとはつまり、数値と文字の関係を示したものです。
文字'a'は128で表し、文字'b'は129で表し・・・と文字と数値が一対一で対応して定められています。(数値は適当です)
UNICODEも、その文字コードの一種で、古い文字コードのASCIIに比べて新しいものです。
NT系のWindowsには全て対応しているので、現在のほとんどの環境がUNICODE対応となっています。
だったら、プログラムもUNICODEに対応させた方が良いですね。

2.TCHAR型
C#という新しい言語のchar型はUNICODEですが、C/C++言語では、char型はASCII、古い文字コードです。
C/C++言語でUnicodeの文字を表すにはwchar_t型を使い、VC++ならWCHAR型とtypedefされています。
というわけで、UNICODE対応プログラムを作るにはWCHAR型を使えばOKです。

・・・OKなのですが、実はもっと良い型があります。
TCHAR型です。
こいつは何かというと、ASCIIとUNICODE両方に切り替えることが出来る万能型です。
コンパイラの設定で、UNICODEを使用する設定にすれば、UNICODEを使用し、そうでなければWindows9x系でも動作するASCIIを使用することになります。
非常に簡単に両方に対応しているプログラムが生成できるので、プログラムを作成する際にはTCHAR型をお勧めします。

3.文字または文字列の表し方
TCHAR chara;
chara = 'a';

上のコードは間違いです。なぜでしょうか。
char型で在れば問題ないのですが、ここではTCHAR型を宣言しているため、'a'がchar型だと認識されてしまうのです。
そのため、TCHAR型の文字を表すには、_TマクロまたはTEXTマクロを使用します。

TCHAR chara;
chara = _T('a');
// あるいは
chara = TEXT('a');

文字列の場合でも同じく、_T("PAKEN")、TEXT("PAKEN")、と記述してください。
(ちなみに、WCHAR型の場合は頭にLをつけ、L'a'、L"PAKEN"、などと表します)

4.謎のデータ型LPCTSTR
さて、char、WCHAR、TCHARの違いがわかったところで、一気に文字列を表すデータ型を見てみましょう。

LPSTR = char*
LPCSTR = const char*
LPWSTR = WCHAR*
LPCWSTR = const WCHAR*
LPTSTR = TCHAR*
LPCTSTR = const TCHAR*

お分かりですね。
LPCTSTRはTCHAR型の文字列なわけです。
今までchar型の文字列をLPCTSTRに強引にキャストして使っていた人もいたのではないでしょうか?
コンパイラの設定でUNICODEを使用しないようにすれば、TCHAR型はchar型に変換されるので、使うことが出来ます。
しかし、UNICODEを使用する設定にしていた人は、TCHAR型がWCHAR型に変換されるため、エラーが発生するはずです。

このような間違いを防ぐためにも、最初からchar型ではなくTCHAR型を使うことが推奨されているのです。

5.注意点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd);

見慣れたWinMain関数ですね。ですが、ここには問題点が一つあります。
お分かりですね。第3引数にchar型の文字列であるLPSTRが使われています。
ちゃんとTCHAR型のLPTSTRにしてあげなくてはなりません。
そのためには、WinMainの頭に_tをつけてあげます。なお、tchar.hをインクルードします

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nShowCmd);

これで問題ないですね。

ほとんど全てのWin32APIは、LPCTSTRまたはLPTSTRを使用しているので、私たちは気にする必要がありません。
ですが、このままだとstrcpyやfopenなど、C言語標準ライブラリ関数が使えなくなります。
でもご安心を。ちゃんとtchar.hにTCHAR型用に定義されています。

(tchar.hに定義されている例)
strcpy() → _tcscpy()
fopen() → _tfopen()
atoi() → _ttoi()
sprintf() → _stprintf()

何を使用すればよいのかわからなくなったら、tchar.h内を検索してみましょう。
TCHAR型を使用した代わりの関数が見つかります。

6.おわりに
実際やることは大したことないですがやたらと長くなってしまいました・・・
ほとんどの人は知っていることだとは思いますが、これは非常に重要なことです。
この記事を読んで初めて知った人は、出来るだけTCHAR型を使用して書くようにしましょう。

今の時代、C/C++を使用してWindowsプログラミングをする人すらあまりいませんからね。
デフォルトUNICODE対応のC#でなんら問題はないのです。

2013-07-03

centosのVMファイルを移動した後にネットワークに繋がらない時

/etc/init.d/network restartをした後、次のようなメッセージが出る。
Device eth0 does not seem to be present, delaying initialization
VMファイルを移動した後にMACアドレスの古い情報が残っているのが原因

解消方法
ifconfig -a でMACアドレス調べる
/etc/sysconfig/network-scripts/ifcfg-eth0 のHWADDRを変更
/etc/udev/rules.d/70-persistent-net.rules のeth1を消してeth0のMACを変更
reboot
http://dharry.hatenablog.com/entry/20120307/1331055287


2013-06-30

Ubuntu12.04のインストールとSamba 4でActive Directory構築

久しぶりにUbuntuを再インストールしてみた。
以前RAID1によるHDD二重化をしていたけどそのうち片方が壊れた。
HDD追加で買うほど大切なデータも入れてないのでRAIDは今回はやめた。
代わりに、以前はUbuntuのバグか何かでうまくいかなかったLVMを使ってみた。

とりあえずインストール時に注意する要素として以前と同じく
・AdvancedFormatTechnologyのHDD
・AFTとなんだか相性の悪いマザーボード
・今のHDDだと微妙に2TB以下らしく標準インストールだとパーティションテーブルがGPTにならずMSDOSになる

といったところ。IntelliPark問題は前回対応済なので不要。
最近のUbuntuはAFTに対応しているっぽいけど、
GPTを使いたいがためにパーティショニングを手動で行う。

GPT周りについてのメモ
GRUBをMBRにインストールした場合、追加でBIOSブートパーティション/予約済み BIOS ブート領域(bios_grubフラグのたったパーティション)に情報を保存する。
もしなければ/bootの情報を使おうとする。そうすると何らかの原因でブートができなくなる可能性があるらしく、BIOSブートパーティションを設けたほうがいいらしい。
BIOSブートパーティションは最低31KB必要らしく、通常は多めに1MBほど確保される。
UbuntuではこれがないとGRUBインストールに失敗するとの情報あり。
RAID1を構築した場合、bios_grubはOSインストール後に手動でミラーにインストールするのが良さそう。

今回は関係ないけど/bootのメモ
/bootパーティションには起動するための情報が格納される。なければ/に格納される。
これは基本的にはRAIDの外に出さないといけないが、RAID1ははやくから対応されている。
RAID1の時、縮退すると起動できなくなってしまうので、/bootもRAIDに載せるほうがよいらしい。
ついでに、LVMの上に/bootを載せるのは少なくともうちの環境では動かないっぽい(RAIDは未確認

パーティショニングに関して参考にしたサイト
http://www.linuxmania.jp/raid_md_grub.html
http://www.ibm.com/developerworks/jp/linux/library/l-grub2/


で、OS入れる際にまたまたなかなかうまく行かなかったので色々実験結果をメモしとく。
インストール&起動の結果
◆MSDOS&RAIDなし&LVMなし→OK
◆GPT&RAIDなし&LVMなし→OK
◆GPT&RAIDあり(/bootと/)&LVMなし→NG(一瞬起動メニューが出て先に進むけど真っ黒の画面で止まる)
◆GPT&RAIDあり(/)&LVMあり(/)→成功?(起動しかけたところで単独RAIDが原因っぽいエラーが発生)

AFT&LVM&RAIDあたりの注意事項について細かく記載のあるサイトがあったのでメモ
http://green-rabbit.sakura.ne.jp/blog/2010/11/27/2191/
※意味がよくわからなかったので今回は気にしないことにした


AdvancedFormatTechnology対応したパーティショニングをGPartedで行う

注意としては、流用したHDDだと前の情報が残っていたりするっぽいので、適当なフォーマットと適当なラベル付を行う。

http://gparted.sourceforge.net/からGparted Live"gparted-live-0.16.1-1-amd64.iso"をダウンロードしてCDに焼く。
ディスクを入れて起動
  1. ・・・Live・・・
  2. Don't touch keymap
  3. 15: Japan
  4. 0) COntinue to start X to use GParted automatically
  5. 右上の/dev/・・・から操作したいHDDを選択、今回は"/dev/sda"
  6. メニュー→デバイス→パーティションの作成→詳細→[新しいパーティションテーブルの形式を選択]"gpt"→"Apply"
  7. まず、gpt用のgrub用領域を1MB分作成する。
  8. 未割り当てを選択→New→前方の空き領域"1"、新しいサイズ"1"MiB、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"grub"
  9. 次に、ブート用の領域を256MB分作成する。
  10. 未割り当てを選択→New→前方の空き領域"0"、新しいサイズ"256"MiB、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"boot" RAID化しておけば片方のHDD異常でも起動ができるらしい。
  11. 次に、スワップ領域をディスクの末尾に作成する。メモリが2GBでそれより多めにとる。
  12. 今回はとりあえず3GBととする。 未割り当てを選択→New→新しいサイズ"3072"MiB、後方の空き領域"0"、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"swap" なお、スワップ領域をRAID化する意味はないらしい。
  13. 最後に、それ以外のメイン部分の領域を残り全部で作成する。
  14. ただ、のちのち別HDDとRAID1化するので念の為少し小さめに数十MBくらい残しておく。 未割り当てを選択→New→前方の空き領域"0"、新しいサイズ"1904300"MiB、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"data"
  15. 念の為、これまで作成したパーティションを右クリックしてinformationから開始セクターを確認する。
  16. 8の倍数であることを確認する。
  17. ・・・確かApplyをクリックして適用。
  18. Exitをダブルクリックして終了。
今回はHDDひとつだったけど、RAID1用に複数あるなら全て同じようにパーティショニングする。


Ubuntu Server 64bit版をインストールする

http://www.ubuntu.com/server/から"ubuntu-12.04.2-server-amd64.iso"をダウンロードしてCDに焼く。
ディスクを入れて起動

インストール手順1(基本情報)

  1. [Language]画面"日本語"
  2. "Ubuntu Serverをインストール"
  3. [インストーラの翻訳は、選択された言語では完全ではありません]画面"はい"
  4. [場所の選択]画面"日本"
  5. [キーボードの設定]画面"日本語"→キーボードのレイアウト"日本語"
  6. [ネットワークの設定]画面の[このシステムのホスト名を入力して下さい]画面(ネットワーク手動設定のために)"戻る"→"ネットワークを手動で設定"→[IP address]任意入力"192.168.1.xxx"して"続ける"→[ネットマスク]任意入力"255.255.255.0"→[ゲートウェイ]任意入力"192.168.1.1"→[ネームサーバーアドレス]任意入力"192.168.1.1"→[このシステムのホスト名を入力して下さい]任意入力"ubuntu"→[ドメイン名]任意入力"mydomain"※他のドメイン名にあわせる
  7. [ユーザーとパスワードのセットアップ]画面の[新しいユーザーの本名]任意入力"TestUser"→[あなたのアカウントのユーザ名]任意入力"testuser"→[新しいユーザーのパスワードを選んで下さい]任意入力"xxxxxxxx"→[確認のため、再度パスワードを入力して下さい]先と同じ値を入力
  8. [ホームディレクトリを暗号化しますか]"いいえ"※持ち歩かない端末なので盗難は心配せず、パフォーマンス優先
  9. [時間の設定]画面で[your time zone is Asia/Tokyo]と出てるので[Is this time zone correct]"はい"

インストール手順2(パーティショニング)

概要としては、システム周りは先程パーティショニングした通りで、ルートなどはLVM上に構築していく。
あまり細かくはわけず、ルート(20GB)とホーム(残り)の2つに分ける。
ちなみにパーティションを遣り直したい際、論理ボリュームの削除ができない。
これは日本語のバグらしく、メニューを戻って言語からEnglishを選択すれば削除できるようになる。
  1. [ディスクのパーティショニング]画面→[パーティショニングの方法]"手動"
  2. [・・・sda・・・]の
  3. 1.(bios用領域)→
  4. [利用方法]"予約済みBIOSブート領域" [起動フラグ]"オフ"
  5. 2.(boot用)→
  6. [利用方法]"ext4" [パーティションの初期化]"初期化" [マウントポイント]"/boot" [起動フラグ]"オフ"
  7. 3.(swap用)→
  8. [利用方法]"スワップ領域" [起動フラグ]"オフ"
  9. 4.(rootなどその他用)→
  10. 論理ボリュームにするので触らない
  11. →"論理ボリュームマネージャの設定"→[LVM設定アクション]"ボリュームグループの作成"→[ボリュームグループ名]"vg0"→[新しいボリュームグループのデバイス]"/dev/sda4"(rootなど用)を選択して"続ける"
  12. →[LVM設定アクション]"論理ボリュームの作成"→[ボリュームグループ]"vg0"→[論理ボリューム名]"lv0"を入力して"続ける"→[論理ボリュームサイズ]任意入力"20GB"
  13. →[LVM設定アクション]"論理ボリュームの作成"→[ボリュームグループ]"vg0"→[論理ボリューム名]"lv1"を入力して"続ける"→[論理ボリュームサイズ]任意入力※残り全部※デフォルト値
  14. →[LVM設定アクション]"完了"
  15. →[LVM VG・・・lv0・・"の"1.・・・]を選択→
  16. [利用方法]"ext4" [マウントポイント]"/" [マウントオプション]"defaults"※デフォルト値 [ラベル]任意入力"root" [予約ブロック]"5%"※デフォルト値 [典型的な利用方法]"標準"※デフォルト値
  17. →"パーティションのセットアップを終了"
  18. →[LVM VG・・・lv1・・"の"1.・・・]を選択→
  19. [利用方法]"ext4" [マウントポイント]"/home" [マウントオプション]"defaults"※デフォルト値 [ラベル]任意入力"home" [予約ブロック]"5%"※デフォルト値 [典型的な利用方法]"標準"※デフォルト値
  20. →"パーティションのセットアップを終了"
  21. →"パーティショニングの終了とディスクへの書き込み"

インストール手順3(ソフトウェア周り)

  1. [taskselを設定しています]画面の[このシステムのアップグレードをどのように管理しますか"自動的にアップデートしない"
  2. [ソフトウェアの選択]画面"OpenSSH server","Mail server"
  3. [Postfix Configuration]画面の[メール設定の一般形式]"インターネットサイト"
  4. →[システムメール名]任意入力"ホスト名.ドメイン名"
  5. ※何入れればいいかわからん Samba入れたら ホスト名.ドメイン名、いれなかったらホスト名がデフォルト値だった
  6. [ハードディスクへのGRUBブートローダのインストール]画面の[マスターブートレコードにGRUBブートローダをインストールしますか]"はい"
  7. [インストールの完了]画面でディスクを抜き"続ける"


この時点で再起動すると、"No bootable device"と出て起動できない。
どうやら、マザーボード(BIOS)がUbuntuの作るGPTを読めていないらしい。
というのも、Ubuntuから見たGPTはブートフラグは関係しない不要な属性らしいけど、
マザーボードによってはブートフラグ前提で動いていて純粋なGPTに対応してなかったりするらしい。
というわけで、Live版のUbuntuからHDDに細工をしてマザーボードから読めるようにする。
起動さえすればあとはGRUBとかがうまくやってくれるらしい。
なお、この問題は10.XXから発生しているらしく、確かに以前10.XXがダメだったから9.10を入れた。
最近は対応策が発見されたらしい。

適当なパーティションに起動フラグセット

どこか適当なパーティションに起動フラグをセットする必要がある、今回の構成だとスワップ以外につけられるところがないのでスワップをONにする。 http://www.ubuntulinux.jp/download/ja-remixから"ubuntu-ja-12.04.2-desktop-i386.iso"をダウンロードしてCDに焼く。 ディスクを入れて起動する。
  1. "Ubuntuを試す"で起動してDash→検索"terminal"
  2. $ sudo fdisk /dev/sda
  3. [GPTをサポートしません・・・]とか言われるけど無視する。
  4. とりあえず状態を確認
  5. : p
    デバイス ブート 始点 終点 ブロック ID システム /dev/sda1 1 39070・・・ 19535・・・ ee GPT
  6. パーティションをアクティブにする
  7. "a"→"1"→"w"
  8. 終了
  9. $ sudo shutdown -h 0
OSインストールの手順は以上、次は初期セットアップ以降の手順を。

ついでに調べた事項のメモ、RAID1構成にしてインストールした時に以下のようなメッセージが出る場合について。
[Do you want to boot your system if your RAID becomes degraded?]

Yes を選ぶと、degraded 時に case.1
No を選ぶと、degraded 時に case.2

case.1
起動時に以下のメッセージが出て、そのまま起動します。
started the RAID in degraded mode.

case.2
起動時に以下のメッセージが出ます。
Do you wish to start the degraded RAID? [y/N]:

いいえが無難かなぁ。

参考
https://forums.ubuntulinux.jp/viewtopic.php?id=9232

初期セットアップ以降の手順

文字化け対策

$ vim ~/.profile
以下を追記
case $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8 ;;
esac
:wq
$ sudo shutdown -r 0
今後の新規ユーザーにも適用する
$ sudo vim /etc/skel/.profile
自分の.profileと同じ変更をする(動作未確認)


念の為IP確認

$ ifconfig
IPはinet addr:・・・のところ
MACアドレスはHWaddr・・・のところ


ネットワーク設定確認

$ more /etc/network/interfaces
address 192.168.1.xxx
netmask 255.255.255.0
network 192.168.1.0
broadcase 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-search mydomain


ソフトウェアアップデート

※今回はapt-getではなく、aptitudeを採用してみる
$ sudo aptitude update
$ sudo aptitude full-upgrade
$ sudo shutdown -r 0

以降、SSHクライアントから作業する
今回は、以前インストールしたPederosaからやる。
注意なのは、今後mysqlをインストールする際には直接コンソールからやること。
なぜかSSHクライアントからだと操作不能になる。


インストール作業に用いるソフトウェアインストール

$ sudo aptitude install zip


時計のセットアップ

9.04と比べて設定ファイル名が変わっていた
今回はNTPサーバー機能は入れない
$ sudo sed -i 's/NTPSERVERS="ntp.ubuntu.com"/NTPSERVERS="ntp.nict.jp"/g' /etc/default/ntpdate
$ sudo ntpdate -u ntp.nict.jp
ハードウェアの時計に反映
$ sudo hwclock -w
なお、手動で日時変更する場合は
$ sudo date 1129225808
これで2008/11/29 22:58:00になる


↓winbindはsambaの兄弟で、今回はsambaをソースからインストールする関係で念のため入れないでおく

Ubuntu→Windowsの名前解決

そのままだとUbuntuからWindowsの名前を解決できない。
Windowsと同じようにNetBIOSの名前解決ができるようにする。
winbindをインストールし、名前解決方法にwinsを追加するとできるようになる。
$ ping Windows機ホスト名
→だめ
$ sudo aptitude install winbind
$ sudo vim /etc/nsswitch.conf
hosts: files dns となっているところを
hosts: files dns wins にする
$ sudo /etc/init.d/winbind restart
$ ping Windows機ホスト名


FireWallのセットアップ

UbuntuのFireWallはiptablesで行われる。
簡単に操作するためのuwfというツールもある。

FireWall初期設定の確認
$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
何も設定されていない。
仕組みはよくわからないけど、何も触らなくてもインストールしたソフトは自動で使える、みたいな状態。
一度設定した以降は、ちゃんとポート設定しないといけないっぽい?

今回色々設定したけど記事の趣旨からは外れるのでここでは説明しない。
多分そのままでも動作はするはずで、だめなら必要に応じて設定すればよい。


postfixによるメール設定

ここではgmailを使用する
$ sudo postconf -e relay_transport=smtp
$ sudo postconf -e relayhost=[smtp.gmail.com]:587
$ sudo postconf -e smtp_use_tls=yes
$ sudo postconf -e smtp_sasl_auth_enable=yes
$ sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
$ sudo postconf -e smtp_sasl_security_options=noanonymous
$ sudo postconf -e smtp_sasl_mechanism_filter=plain
$ sudo postconf -e smtp_tls_security_level=secure
$ sudo postconf -e smtp_tls_CApath=/etc/postfix/certs

ログイン情報を作成する
$ sudo touch /etc/postfix/sasl_passwd
$ sudo vim /etc/postfix/sasl_passwd
↓の行を記入する
[smtp.gmail.com]:587 メールアドレス:パスワード
$ sudo chmod 600 /etc/postfix/sasl_passwd
$ sudo postmap /etc/postfix/sasl_passwd

$ sudo mkdir /etc/postfix/certs
$ sudo chmod 600 /etc/postfix/certs
$ cat /etc/ssl/certs/Equifax_Secure_CA.pem | sudo tee -a /etc/postfix/certs/Equifax_Secure_CA.pem
$ cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/Thawte_Premium_Server_CA.pem
$ c_rehash /etc/postfix/certs
$ sudo vim /etc/postfix/submit.cred
submitcred version 1
hostname|username|password
$ sudo chmod 600 /etc/postfix/submit.cred
※submit.credは要らない可能性あり
$ sudo /etc/init.d/postfix restart
送信テスト
$ mail 宛先メールアドレス
本文は.で終了
うまくいかない場合は/var/log/mail.logを確認
"Server certificate not trusted"と出ている場合はpemがおかしい

参考:
http://ubuntu-tutorials.com/2008/11/11/relaying-postfix-smtp-via-smtpgmailcom/
http://stevejenkins.com/blog/2011/06/fixing-postfix-certificate-verification-failed-for-gmail-untrusted-issuer-error-message/

メール通知の設定
$ sudo vim /etc/aliases
最初はpostmaster: rootみたいな設定だけある
root: ユーザーアカウント
ユーザーアカウント: メールアドレス
という設定を追記
カンマ区切りで複数設定可能
$ sudo postalias /etc/aliases


これで基本的な初期セットアップ完了。

次はsamba4のインストールとActiveDirectoryの構築。
最近samba4のstable版がリリースされ、samba4からはActiveDirectoryのサーバー機能を備えている。
ActiveDirectoryに必要な機能はDNSサーバーとケルベロスサーバーで、samba4はこの辺を全て内包している。

sambaのサポートページ
http://wiki.samba.gr.jp/mediawiki/

aptitude等でsamba4を入れることもできるけどエラーが多発してインストールすらできない。
ソースからコンパイルして入れてみる。

参考
https://wiki.samba.org/index.php/Samba_4/OS_Requirements
http://paulcolfer.ie/os/linux/samba-4-domain-controller-on-ubuntu-server-12-04/


必要なパッケージインストール

$ sudo aptitude install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr docbook-xsl libcups2-dev xsltproc inkscape libpam0g-dev
※krb5-user はあとで入れる

$ sudo aptitude install gcc python2.7-dev make libacl1-dev python
※インストールされるものはなかった、上記のに含まれてるかも


openldapインストール

samba4をコンパイルするとwinbindやpam関連のsoファイルが生成されるべきだけど、
事前にopenldap関係のパッケージを入れておかないと生成されないっぽい?
$ sudo aptitude install slapd ldap-utils
管理者のパスワード: ※使わないのでなんでもよい

入れるのはいいけどかといって動作しているとなぜかADがおかしくなる。
なのでサービスから外しとく。
$ sudo update-rc.d -f slapd remove


samba4インストール

ソースをダウンロードしてmakeところから。
今回は4.0.6で試した。
$ cd
$ wget http://ftp.samba.org/pub/samba/samba-4.0.6.tar.gz
$ tar -zxvf samba-4.0.6.tar.gz
$ cd samba-4.0.6
$ ./configure
$ sudo make && sudo make install

さっそくADをセットアップする。
Realm(レルム/Kerberosの管理範囲)にはADドメインを、DomainにはNTドメインを入れるらしい。
NTドメインにはドットが含められないらしい。
Realmは組織のDNS名を大文字にしたもの(例えば、SALES.EXAMPLE.COM)を使うのが慣例で、DNSと紐づかない閉じた環境では名前 + ".LOCAL"とすることが多いらしい。
ちなみにOSインストール時のドメイン名は上書きされる感じになるので無視していい。
ServerRoleにはDomainControlerであるdcを選択。ActiveDirectoryのサーバー以外にしたりするなら他を選ぶ。
DNS backendにはDNSサーバーの種類を選ぶ、今回はsambaに任せるのでSAMBA_INTERNAL。
DNS forwarder ・・・には親となるDNSサーバーを選ぶ、今回はルーターを。

$ sudo /usr/local/samba/bin/samba-tool domain provision
Realm []: MYDOMAIN.LOCAL
Domain []: MYDOMAIN
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.1.1]:
Administrator password: パスワード
起動は単純に実行するだけ
$ sudo /usr/local/samba/sbin/samba
$ ps aux|grep samba
ずらずら表示されていたらOK
※4.0.5->4.0.6で数がだいぶプロセス減ってるような?


sambaのサービス化

毎回手動実行は大変なのでサービス登録する
$ sudo vim /etc/init.d/samba4

次のようなスクリプトを記述する。
#! /bin/sh
### BEGIN INIT INFO
# Provides: samba
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Samba
# Description: Samba Domain controller
# scheduler
### END INIT INFO
#
#
#
set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/local/samba/sbin/samba

test -x $DAEMON || exit 0

case "$1" in
start)
echo -ne "Starting Samba" "samba \n"
$DAEMON -D
;;
stop)
echo -ne "Stopping Samba" "samba \n"
PIDSMB=`ps -e | grep samba | awk '{ print $1 }'`
killall samba
;;
restart)
$0 stop
echo -ne "Sleeping 5 Seconds Before Start: \n"
sleep 5
$0 start
;;
*)
echo "Usage: /etc/init.d/samba4 {start|stop|restart)"

exit 1
;;
esac

exit 0
注意:ファイル名はsambaではだめなのでsamba4にしている、killallで処理中のこのスクリプトまでkillされてしまう

スクリプトを自動実行するようにする。
$ sudo chmod +x /etc/init.d/samba4
$ sudo update-rc.d samba4 defaults 98 02
ちなみにサービスの状態を確認するには
$ sudo aptitude install chkconfig
$ sudo chkconfig --list samba4
ランレベル毎に表示されるらしい。


ネットワーク設定を正す

インストールしただけだとネットワーク関連の設定ファイルが全然だめな状態なので直す。

参考
http://www.be-dama.com/kb/samba4-ad-mini-howto/samba_init_setting.html

$ sudo vim /etc/hostname
もともと
ホスト名
となっているものを
ホスト名.レルム
を(多分)小文字で記述する
ubuntu.mydomain.local

$ sudo vim /etc/hosts
127.0.0.1 localhost
UbuntuサーバーIP ホスト名.レルム ホスト名

今回だと
192.168.1.xxx ubuntu.mydomain.local ubuntu

interfacesに書いてあるDNSサーバー情報とかを移動する。
interfaces辺りの編集を間違えててハマッタ
参考
http://d.hatena.ne.jp/studio-m/20080213/1202862706
http://iabsis.com/EN/article/35-2/Samba4-installation

$ sudo vim /etc/resolvconf/resolv.conf.d/base
もともと空
search レルム名
nameserver UbuntuサーバーIP
に変更する。
search mydomain.local
nameserver 192.168.1.xxx
$ sudo resolvconf -u
ポイントはnameserver(DNS)にルーターを指定せず自分を指定するところ。

interfacesから移動した記述を削除
$ sudo vim /etc/network/interfaces
もともと
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.xxx
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.1.1
dns-search mydomain

dns-*系があればコメントアウトする
# dns-* options are implemented by the resolvconf package, if installed
#dns-nameservers 192.168.1.1
#dns-search mydomain

ネットワーク再起動
$ sudo ifdown eth0 && sudo ifup eth0

問題なくサービス再起動することを確認
$ sudo /etc/init.d/samba4 restart

一通り終わったので再起動してみる。
$ sudo shutdown -r 0


ADの動作確認

ドメイン定義の確認
$ /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[XXXXXXXX] OS=[Unix] Server=[Samba 4.0.6]

Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba 4.0.6)
sysvol Disk
netlogon Disk
Domain=[XXXXXXXX] OS=[Unix] Server=[Samba 4.0.6]

Server Comment
--------- -------

Workgroup Master
--------- -------
みたいな感じで表示されればOK

DNSの確認
$ sudo host -t SRV _ldap._tcp.mydomain.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_ldap._tcp.mydomain.local has SRV record 0 100 389 ubuntu.mydomain.local.

ドメイン管理者でログオンできるか
$ /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%'パスワード' -c 'ls'
Domain=[XXXXXXXX] OS=[Unix] Server=[Samba 4.0.6]
. D 0 Sun May 19 22:48:09 2013
.. D 0 Sun May 19 22:48:20 2013

34196 blocks of size 524288. 27826 blocks available
※パスワードに'が含まれている場合は"で囲む


kerberosの確認

adの暗号認証が機能しているか確認する。
sambaでadが動いた時点でサービスとしては動いてるはずで、udp88とかがnmapで確認できればよい。
問題はネットワーク設定がちゃんとしてなくてローカルから確認が失敗することが多そう。
adとしては起動に必須ではないはずで動いてるかわからないため念のため動作確認する。

sambaでドメイン立ち上げた時にできるテンプレートファイルをコピーしておく
$ sudo cp /usr/local/samba/private/krb5.conf /etc/.

kerberosクライアントインストール
レルムにはADのレルムを、
ケルベロスサーバーと管理サーバーに自分のホスト名を入れる。
$ sudo aptitude install krb5-user
デフォルトのケルベロスバージョン 5 レルム:MYDOMAIN.LOCAL
あなたのレルムのケルベロスサーバ: ubuntu
あなたのケルベロスレルムの管理サーバー: ubuntu
※質問の順番がなぜか違う時がある

$ sudo shutdown -r 0
※再起動しないとなぜかだめだった

$ kinit administrator@MYDOMAIN.LOCAL
※レルム名は大文字
何も帰ってこないか、パスワードに関する警告が出ればOK

接続のチケット(許可?)の一覧
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@MYDOMAIN.LOCAL
みたいな感じで出ればOK


AD管理ツールでの確認

$ sudo /usr/local/samba/bin/wbinfo -t
checking the trust secret for domain MYDOMAIN via RPC calls succeeded
succeededと出ればOK

$ sudo /usr/local/samba/bin/wbinfo -u
$ sudo /usr/local/samba/bin/wbinfo -g
でドメインのユーザーとグループが表示されればOK

試しにパスワードポリシー表示
$ sudo /usr/local/samba/bin/samba-tool domain passwordsettings show
Password informations for domain 'DC=mydomain,DC=local'

Password complexity: on
Store plaintext passwords: off
Password history length: 24
Minimum password length: 7
Minimum password age (days): 1
Maximum password age (days): 42

他にも、SSHでログインできるようにもできるらしいけど今回は調べない。

セットアップ完了。
次会hADへのユーザー追加とかファイルサーバーのセットアップとか。


ユーザー追加
$ sudo /usr/local/samba/bin/samba-tool user add tester

この時点でWindows機から確認してみる。
ネットワークの設定からDNSのIPをUbuntuサーバー機にする。
念の為ネットワークアダプタを無効にしてから有効化。
ping mydomain.local
で通ることを確認。

でもって、コントロールパネルのシステムからドメイン情報を入力すると参加できた。


ADユーザーとUbuntu情報の連携
make時にwinbindやpamといった名前のついたファイルができている。
これらをシステムに組み込んでユーザー情報を連携させる。
その際、既にあるファイルを退避させとく。
$ sudo mv /lib/x86_64-linux-gnu/libnss_winbind.so.2 /var/tmp/.
$ sudo ln -s /usr/local/samba/lib/libnss_winbind.so.2 /lib/x86_64-linux-gnu/libnss_winbind.so
$ sudo ln -s /lib/x86_64-linux-gnu/libnss_winbind.so /lib/x86_64-linux-gnu/libnss_winbind.so.2
$ sudo mv /lib/x86_64-linux-gnu/security/pam_winbind.so /var/tmp/
$ sudo ln -s /usr/local/samba/lib/pam_winbind.so /lib/x86_64-linux-gnu/security/pam_winbind.so

sambaのシェル設定
$ sudo vim /usr/local/samba/etc/smb.conf
[global]
...
template shell = /bin/bash
...

連携する用に設定
$ sudo vim /etc/nsswitch.conf
passwd: compat
group: compat
shadow: compat

passwd: compat winbind
group: compat winbind
shadow: compat winbind
に変更

設定読み込み(再起動しても同じ効果らしい)
$ sudo ldconfig -v | grep winbind

winbindの動作確認
$ /usr/local/samba/bin/wbinfo -p
Ping to winbindd succeeded

ユーザー情報の連携確認
$ getent passwd
MYDOMAIN\Administrator:*:0:100::/home/MYDOMAIN/Administrator:/bin/bash
などがずらずらでればOK

これでActiveDirectoryのユーザーがLinuxから参照できる?
$ id Administrator
uid=0(root) gid=100(users) groups=0(root),100(users),3000004(MYDOMAIN\Group Policy Creator Owners),3000006(MYDOMAIN\Enterprise Admins),3000008(MYDOMAIN\Domain Admins),3000007(MYDOMAIN\Schema Admins)

UID/GIDに関してはよーわからんけど
$ sudo /usr/local/samba/bin/ldbedit -e vi -H /usr/local/samba/private/idmap.ldb
でUIDとかのマッピング情報が見られるらしく
lowerBound: 3000000
upperBound: 4000000
とかあるので、3000000~4000000の間でIDでが振られるのかもしれない

ADユーザー情報
$ /usr/local/samba/bin/wbinfo --user-info Administrator
MYDOMAIN\Administrator:*:0:100::/home/MYDOMAIN/Administrator:/bin/false
UID=0 つまりroot

$ /usr/local/samba/bin/wbinfo --user-info tester
MYDOMAIN\tester:*:3000016:100::/home/MYDOMAIN/tester:/bin/false
UID=3000016 新たなID

ADグループ情報
$ /usr/local/samba/bin/wbinfo --group-info 'Domain Users'
MYDOMAIN\Domain Users:*:100:
GID=100 つまり users

というわけでグループを作ってみる
$ sudo /usr/local/samba/bin/samba-tools group add 'TestUsers'
$ sudo /usr/local/samba/bin/samba-tools group addmembers 'TestUsers' tester
※カンマ区切りで複数追加できるっぽい

ADグループ情報
$ /usr/local/samba/bin/wbinfo --group-info 'TestUsers'
MYDOMAIN\TestUsers:*:3000019:

参考
http://web.chaperone.jp/w/index.php?samba%2Fuser
http://wiki.samba.gr.jp/mediawiki/index.php?title=Samba_4.0.0%E3%81%AEDC%E4%B8%8A%E3%81%A7UID/GID%E3%81%AE%E5%80%A4%E3%81%ABUNIX%E5%B1%9E%E6%80%A7%E3%81%8C%E5%8F%8D%E6%98%A0%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84


ファイルサーバーセットアップ
sambaでファイルサーバーをセットアップする。

$ sudo vim /usr/local/samba/etc/smb.conf
# Global parameters
[global]
workgroup = MYDOMAIN
realm = MYDOMAIN.LOCAL
netbios name = UBUNTU
server role = active directory domain controller
dns forwarder = 192.168.1.1


[netlogon]
path = /usr/local/samba/var/locks/sysvol/mydomain.local/scripts
read only = No

[sysvol]
path = /usr/local/samba/var/locks/sysvol
read only = No
みたいな感じになっているところに
[global]
dos charset = CP932
unix charset = UTF-8

[share]
comment = share contents
path = /home/MYDOMAIN
read only = No
を追記する
$ sudo /etc/init.d/samba4 restart
$ sudo mkdir /home/MYDOMAIN
$ sudo chmod 755 /home/MYDOMAIN
$ sudo chown root:'MYDOMAIN\TestUsers' /home/MYDOMAIN

参考
http://sheepdogjam.cocolog-nifty.com/blog/2013/01/raspberrypi-sam.html

Windowsマシンから
\\192.168.1.XXX\
で共有フォルダが見えるようになる
ホスト名でも繋がるけど、何度かインストール手順を色々試してるとなぜかつながらないパターンがある。。。


プライマリグループの変更
このままだとドメインユーザーのプライマリグループがusersになっている。
ファイルサーバーで新規に作成したファイルのアクセス権設定がやりづらい。
設定ファイルを直接変更すれば変更できる。
$ sudo /usr/local/samba/bin/ldbedit -e vi -H /usr/local/samba/private/sam.ldb
/ユーザー名
などでユーザーの定義を探す
たぶん
objectClass: user
name: ユーザー名
となっていると思う
そこの
primaryGroupID: ・・・・
を変更先のグループに変える

IDを調べる方法は
$ /usr/local/samba/bin/wbinfo --name-to-sid グループ名
とした結果の末尾がID
今回だと
S-1-5-21-3800727457-1005178589-2210324449-1107 SID_DOM_GROUP (2)
となって、1107がIDとなる

primaryGroupID: 1107
とセットする
$ sudo /etc/init.d/samba4 restart
これで、プライマリグループの変更ができる。


おまけ

未確認やあまりはっきりしないことなど。

(20131031追記) Windows機をADに参加
普通にシステム詳細からドメインに参加すればよい。 ○○○○.LOCAL この時、アカウント情報を求められるが、ドメイン管理者(Domain Amins)の権限が必要らしい。 そうじゃない場合、Samba4だけかもしれないが次のようなエラーメッセージが出て混乱させられる。 「 ”***”という名前のコンピューターアカウントが以前、別の資格情報で作成された可能性があります。 別のコンピューター名を使うか、管理者に連絡して、競合を発生している無効なアカウントを削除してもらって下さい。 アクセスが拒否されました。」 なので、一般ユーザーを登録する場合は、まずはシステム詳細から管理者権限でドメインに参加し、 その後、一般ユーザーでPCにログインさせるといった感じになる。 また、WindowsVista以降では次の操作をしないといけないらしい(Pro未満の場合はレジストリ操作になる?) Windowsキー+R -> secpol.msc ローカルポシリー->セキュリティオプション ネットワーク セキュリティ: LAN Manager 認証レベル を変更する 未定義 -> 「NTLM応答のみ送信する」または「LMとNTLM応答を送信する」に変更する ※一度変更すると初期値(設定前)に戻せないので注意、初期値は「NTMv2応答のみを送信する」
AD管理をWindows7から
Ubuntuからだとコマンドベースで大変。
UIでやるならWindows7のリモート管理ツールというのが使えるらしい。

http://www.microsoft.com/ja-jp/download/details.aspx?id=7887
Win7用リモート管理ツールをダウンロードしてインストール

コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化
役割管理ツール→AD DS およびAD LDSツール→AD DSツール→ActiveDirectory管理センタをチェックする
一緒にいくつかチェックされるのでそのままにしておく→OK

で、前提条件としてWindows機からドメインに管理者権限で参加しておく必要があるっぽい。

スタートメニュー→管理ツール→ActiveDirectoryユーザーとコンピュータ
エラーが出るけど気にしない

操作→ドメインコントローラの変更→次のドメインコントローラーまたはAD LDS インスタンス
ドメイン名を入力
状態がオンラインになればOK

参考
http://www.kurobuti.com/blog/?p=6318
http://d.hatena.ne.jp/rti7743/20110425/1303688263


RAID1構築後に2台目HDDのbiosgrubパーティションセットアップ
1台目の情報をコピーする。
$ sudo dd if=/dev/sda1 of=/dev/sdb1 bs=512
をする

参考
http://nabe.blog.abk.nu/0301
http://blog.lwlv.net/archives/323


samba起動エラー解消
そのままだとsamba起動時にエラーが出ている。
$ sudo vim /usr/local/samba/etc/smb.conf
[global]に以下を追記
printing = bsd
load printers = no
printcap name = /dev/null
$ sudo /etc/init.d/samba4 restart


SWATのインストール
sambaの管理UI
$ sudo aptitude purge openbsd-inetd
※なければそれでよい

$ sudo aptitude install xinetd
$ sudo update-inetd --enable 'swat'
$ sudo dpkg-reconfigure xinetd
$ sudo vim /etc/xinetd.d/swat
service swat
{
port = 901
socket_type = stream
wait = no
only_from = 127.0.0.1 192.168.1.0/24
user = root
server = /usr/local/samba/sbin/swat
log_on_failure += USERID
disable = no
}

$ sudo vim /etc/inetd.conf
からswatに関する記述をコメントアウト
なぜかconfが残りっぱなしでxinetdが若干影響受けてるっぽいので念の為
※もともとなければ不要

swatのヘルプページがなぜかおかしいのは放置
samba-docを入れてwelcome.htmlを修正すればいいらしいが・・・
全部修正するのは大変だしsamba4のdocumentでちゃんとしたのが見つからなかった

もいちど再起動
$ sudo dpkg-reconfigure xinetd

rootにパスワードを与える
$ sudo passwd root

Windows機から
http://Ubuntuホスト名:901/
でswatに繋がる

なお、Ubuntu12.04の通常のsambaとswatではなぜかswatには繋がるけど
何かすると真っ白になるという状態になった
samba4でイチからビルドした場合はうまくいくっぽい


名前解決
インストール内容によってはWinowsマシンからLinuxマシンを名前解決できないケースがある。
その場合は次の操作で繋がるパターンがあった。

nmbdを入れる
$ sudo aptitude install samba

nmbdだけ欲しくてsmbdはいらないのでサービス停止
$ sudo /etc/init.d/smbd stop

smbdはupstartでサービス登録されているけど
念の為 SysV init の停止もする。多分えらー
$ sudo update-rc.d smbd disable
upstartの記述を削除する
$ sudo vim /etc/init/smbd.conf
start on ・・・ という行を#でコメントアウト

これで再起動してもsmbdが起動しないようになる
なお、/etc/init.d/ではなくserviceコマンドを使うこともあるが
これはupstartとSysV initの区別をしなくてもいいコマンドらしい

この状態でWIndowsマシンから
> ping ホスト名
で名前解決できていることを確認


その他参考にしたかもしれないサイト

http://www.kurobuti.com/blog/?p=6278http://d.hatena.ne.jp/torutk/20130301/p1
http://blog.bis5.net/archives/138
http://paulcolfer.ie/os/linux/samba-4-domain-controller-on-ubuntu-server-12-04/
https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
http://www.matrix44.net/cms/notes/gnulinux/samba-4-ad-domain-with-ubuntu-12-04
http://d.hatena.ne.jp/vivid_skid/20130417/1366159279
http://krakenbeal.blogspot.jp/2011/03/ubuntuswat.html
http://www.aconus.com/~oyaji/samba/samba.htm
http://www.samba.gr.jp/doc/contrib/begin_samba2.0.html
http://askubuntu.com/questions/196272/how-to-install-and-configure-swat-in-ubuntu-server-12-04
http://www.samba.gr.jp/project/translation/Samba3-HOWTO/FastStart.html
http://fummy-net.blogspot.jp/2013/04/samba4-active-directory-pdc.html#centos_domain_login


2012-12-31

iPhone5でメールとメッセージを併用する方法

色々サイトがあるけど結局だめで
うまくいく方法を紹介しているサイトがあったのでそれを転記しておきます。

http://moon.ap.teacup.com/tokiblog/1181.html

ちなみに使ってみた感としては
・メールとメッセージ両方来てうざい
・でも基本的にメールアプリを使いたい
・なのでメールのezwebアカウントの通知はOFFに
・さらにメール受信は手動に
・メール着信や一覧表示という意味だけでメッセージを使用

そんな感じです。

>条件
>
>・au版 iPhone(今回はiPhone5にて iOS6)
>・Wi-FiではなくLTE/3G回線で行う
>・少し上級な知識
>
>手動設定の前に...
>
>事前にインストールされている
>"@ezweb.ne.jp"のプロファイルを削除しておきましょう。
>[設定]→[一般]→[プロファイル]→該当のメールプロファイルを削除
>
>iPhoneをWi-Fiから切断しておきます。
>"メッセージアプリ"からメール設定に向かいます。
> ◆宛先:#5000
> ◆本文:1234
>
>送られてきたURLをタップ
>下に表示さている「その他設定」をタップ
>「メールアカウント手動設定」をタップ
>「設定情報送信」をタップ
>
>"メッセージアプリ"にIDとパスワードが送信されます。
>(こちらは外部のメーラーで受信する際に必要なIMAP/SMTP情報です)
>
>
>iPhoneのメールアカウントに@ezweb.ne.jpを追加
>設定からメールアカウントの追加をします。
>「その他」を選択します。
>「メールアカウントを追加」をタップ
>
>アカウントの設定
>ここで先ほどSMSに届いたIDとパスワードが必要になります。
> 名前:届いたID
> メール:自分のauアドレス(??@ezweb.ne.jp)
> パスワード:届いたパスワード
> 説明:適当にどうぞ
>
>次の画面へ進むとエラーが表示されると思いますが
>そのまま続けてください。
>
> 名前:適当にかえてください
> メール:自分のauアドレスに変えてください
>
>下にスクロールして
> 受信メールサーバー/送信メールサーバーの
> ユーザ名とパスワードを届いたIDとパスワードに変更
>アカウント情報を保存
>
>以上で終了です。 メールだけONにして保存をタップします。
>
>
>もう少し設定
>
>このままだと送信サーバーがエラーを起こすようなので
>SMTPの設定を少し変えます。
>
>メールのアカウント一覧から"@ezweb.ne.jp"を開きます。
>[アカウント]の部分をタップします。
>送信メールサーバの「SMTP」をタップします。
>プライマリサーバをタップします。
>パスワードの部分をSMSで受信したものに書き換えます。
>そして[完了]をタップします。
>
>最後にメッセージアプリで受信できるようにします
>メール設定からMMS(メッセージアプリ)の設定をします。
>以上でiPhoneのメールアプリ、メッセージアプリで"@ezweb.ne.jp"が使えるようになるはずです。

AMD Display Driver の入れ替え

最近急に、動画を見てるとブルースクリーンになることが増えました。
それの復活から手間がかかったのでメモ。

結論としてはドライバーを入れ替えたらよくなった気配。
しかし普通にドライバーをアップデートしたらアップデートに失敗→ドライバーを認識すらせず。となってしまい困りました。

環境
・Win7 64bit
・AMD Radeon HD 5800 Series
・もともと入ってたドライバー 10.・・・?
・アップデートに失敗したドライバー 12.10

今回良かったと思われるアップデート方法
1. あとで使うために Driver Fusion というソフトをインストールしておく
http://treexy.com/products/driver-fusion

2. ドライバーをダウンロードしておく
http://www.amd.com/us/Pages/AMDHomePage.aspx
右上のFind a driverから
・Desctop Graphics
・Radeon HD Series
・Radeon HD 5xxx Series PCIe
・Windows7 64bit
を選択

で、12.10は出たばっかりぽいので、ネットんの評判で安定してそうなバージョンが12.8だったのでそれを入れる
右下のPrevious Drivers and Softwareを選択してCatalyst 12.8を選択
Catalyst Software Suiteをダウンロードする

3. 今入っているドライバーを削除する
アンインストールためにも先ほどダウンロードしたドライバーを実行する
tempファイルを解凍したあとに、インストールかアンインストールかのアイコンが出るのでアンインストールを選択
高速かカスタムはどちらでもよさそうだけど今回はカスタムを選択してチェックボックスが全てついていることを確認して進めた

4. 再起動→セーフモード起動
再起動を勧められたか忘れたけどとりあえず再起動
この時F8でセーフモード起動する

5. Driver Fusionでドライバー残骸を削除
Driver Fusionを実行し、左のメニューからAMDを選択して確か解析というボタンを押す。
するとファイル名やレジストリ名が表示されるので削除ボタンで削除。
これで不要なファイルが削除された。
どうやらディスプレイドライバーは普通に削除するだけでは色々残ってしまって、それが原因でトラブルが多いらしい。

6. 普通にドライバーをインストール
先程実行したインストーラーを再度実行して今度はインストール。
またカスタムで全てチェックボックスがついていることを確認して進めた。

7. 念の為再起動


以上です。


2012-12-10

typerepeat公開

今回は広告です笑
typerepeatというアプリケーションを公開しました。
http://www.vector.co.jp/soft/winnt/edu/se500357.html

windows用 .net 4.5 向けのタイピング練習ソフトです。
ゲームとかではなく、単純に特定ワードをひたすら練習するようなソフトです。

   


入力したキーのキー別入力速度を計測し表示する。
ただそれだけですが、普段タイピング練習していても、なかなか特定ワードだけのキー速度を見る機会がないので作りました。
これでひたすら練習すれば、特定ワードに関しては自分の速さが認識でき、練習できます。 最適化の練習にも使えます。

特定ワードの練習実績を総合して見るモードをつけています。




現在実装中の機能としては、問題テキストファイルからランダムに出題されたワードを入力していくゲームモードがあります。これは・・・次に暇な日があれば実装しようかと思っています。


2012-09-10

eclipseでPHP開発環境構築のメモ

<eclipse PDT>をダウンロードする。
これにxamppがついてくる。

eclipse PDT
<a href="http://mergedoc.sourceforge.jp/index.html#/pleiades.html">http://mergedoc.sourceforge.jp/index.html#/pleiades.html</a>
今回は3.7(Indigo) JREありを選択
ちなみに一度4.2をインストールしてみたけどCPUがAMD6コアのメモリ8GBでも重すぎて使えなかった。

手順
解凍してd:\elicpse\...に入れた。
\xampp\setup_xampp.batを実行

\xampp\xampp-control-3-beta.exeを実行
apacheとmysqlをstartする

apacheのadminをクリック
※ステータスを見るもapache以外停止になっている(?)

セキュリティをクリック
http://localhost/security/xamppsecurity.php
MySQLのrootのパスワードを設定する
パスワードを入力してチェックボックスをONにしてボタン
MySQL再起動

htaccessでBASIC認証を導入する
ユーザーとパスワードを入力してチェックボックスをONにしてボタン
再度セキュリティをクリックしてこれらが安全になったか確認

confで作業領域の追加など
\xampp\apache\conf\httpd.conf
PHPをおく場所が\xampp\apache\htdocs\...以外であれば
<directory c:="c:" php="php" workspace="workspace">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</directory>
のようにして指定する。
さらに、phpの各フォルダを仮想的に配置する場合は、
<ifmodule alias_module="alias_module">セクションに
Alias /testmodule "c:\workspace\php\testmodule\root"
のように記載する。</ifmodule>