Let's Note CF-W7 ファン取り替え+LED付け替え

久しぶりの更新になります。

最近愛用機のLet's noteが調子悪くなってきました。

そこで今回は、Let'snote CF-W7の解体ファン取り替え電源スイッチ部分のLED取り替えを行ってみたいと思います。

ずいぶん前に、発熱がひどかったり、音が気になってきたのはファンの調子が悪くなってきていたからだと思います。

最近は変な音がかなり響いています。

SW部分のLEDに関しては、チカチカすることすらなくなりました。LEDSW停電中です。

CF-W7を解体しての感想としては、 ちょっとむずかしかったです。

何が、難しかったかと言うと、マザーボードを外すところが難しかったです。

挑戦してみれば、アナログ端子の部分がどんだけひっかかってるんだ!?ってくらいひっかかっています。

今回の挑戦は、PS3を破壊した経験や、監視カメラの修理などの経験が役に立ちましたが。

 

CPUファン購入サイト

CF-W7/CF-T7用 CPUファン 3900円

 

ちなみに、修理費の参考価格

cPUファン交換工賃  4900円

LEDSW交換工賃   3700円

合計: 8600円

 

 

値段を見るだけでも、自分でやった方がかなりお得ですね。

 

では、ここから解体手順についてです。

参考にする方は、自己責任でお願いします。自身がない方は修理に出すほうがいいと思います。(そこまで高くないので…)

 

解体手順:

 

1.PCからバッテリとHDDを取り外す

前記事のCF-W7SSD換装を参考

 

2.PCの裏側のねじを取り外す

 

赤丸で囲まれたねじ(全部のねじですが…)を外す。外したねじはガムテープに張っとくなど、

場所を記憶しておかないとあとで悲惨な結果になります。

 

 

3.メモリ部分のふたを外し、隠れているねじを1本外す

 

 

4.赤四角で囲まれている防水シール?を剥がす。

ドライヤーなどで軽く温め、赤矢印がさしている部分からマイナスドライバーで隙間を作り外すとやりやすい。

少しあてているとすぐに熱くなるので、壊さないためにも加減する

 

 

5.銀色の留め具を外す

赤丸の部分にプラスドライバーなどを差し込み、軽く引くと留め具が外れる。

これは、キーボードを固定しているパーツ(実際には、キーボードが両面テープでついてるので外しただけでは変わらない)

 

 

6.キーボードを外す

キーボードは、両面テープで固定されているので、少し浮かせたらドライヤーなどで温めはがれやすくする。

はがれてきたら、写真の浮いてるほうから反対に倒す。

温めすぎ注意(あくまで剥がしやすくしているだけで、推奨ではない)

 

 

7.キーボードを剥がした後、防水シールを剥がし、キーボードのコネクタ部分を外す

ここでも、防水シールが現れるので、慎重に剥がす。

剥がすと、キーボードの線を抜く。

下写真の、赤矢印の方向へ白い部分をずらすと、ケーブルが外れる。

 

 

8.キーボードを外すことができたら、キーボードの下にあるねじを外す

赤丸で囲まれている個所のねじを取り外す。

青四角で囲まれている部分は、防水シートと、筐体が両面テープでくっついているので、

 筐体の上部分を取り外す時は、テープの存在に気を付ける

 

 

9.ドライブを取り外すため、横のねじをとる。

マイナスドライバーなどで、カバーを取り外し、中のねじをとる。

このねじを取り外すと、ドライブのカバーが外れる。

 

 

10.赤丸に囲まれている部分が爪になっているので、おらないように外す。

青丸の部分のばねをなくさないようにする。

 

 

11.ドライブの上についている、熊の頭みたいな形の板を取り外す

赤矢印のついている部分からこじ開けやすい。ここも両面テープで付いているので気を付ける

 

 

12.取り外すと、下にねじが現れるのでとる

 

 

13.無線モジュール部分のねじを取り外す。両サイド。

 

 

14.手順8の両面テープの部分に気を付けながら、筐体の上部分を取り外す

ファンにアクセスするためには、このマザーボードを裏側にしなければいけない。

今回の作業で一番苦労した部分はマザーボードを裏返しにするところ。

物理的に不可能では?と思うぐらい取れない。

(あとの手順で出てくるが、右側のパーツを全部外さないと、ボードをずらして裏返すことができない)

 

 

15.トラックパッドのコードを取り外す

赤四角で囲まれている部分のコードを取る。

これは留めてある部分を上に持ち上げると、開く。

コード近くのコネクタも取り外す。

 

 

16.マザーボードを固定しているねじを取り外す

 

 

17.右側にあるコードやテープ、USBポートの支えなど、全部取り外す

まず、青四角で囲まれている部分のコードが両面テープでくっついてるので、取り外します(軽くドライヤーで温めました)

次に、下にくっついているコード類をまとめているテープ類を全部剥がします。

最後に、赤丸で囲まれているねじを取り外し、USBポートなどがついたボードを一式取り外す。

 

 

18.ドライブと、マザボの間ぐらいにあるコネクタ類を外す

小さいの2個と、大きいの1個の、計3個がある。赤矢印の付近

 

 

19.アナログ端子などを固定しているねじをはずす。

細いペンチなどで、赤丸の部分をつかみながら、ねじの要領でまわし外す。

下記の写真に移っている、青い四角のポート部分と、その右のEXTの部分がマザーボードを外す時の難問になる。

 

 

20.右側が全部取り外せ、パカパカ浮かせることができる状態になります

この時点でマザボを浮かせながら、右側に引っ張ると、アナログ端子の部分が外れる。

(ここが一番の悩みどころだった)

 

 

21.慎重にひっくり返すと、裏側にファンがくっついている

このファンは、コネクタを外し、持ち上げるとすぐに取れる

 

 

22.ファンを付け替えて終了

 

 

23.参考にはならないが、LEDを付け替えたあとのCF-W7

 

 

以上で、解体+交換は終了です。

なにか問題点、気になる点がある方は、気軽に訪ねてください。

OpenfilerによるiSCSIストレージの作成

Openfilerとは、ストレージ機能に特化したOSです。

LDAPや、WebDAVなどもサポートしています。

インストーラーは anacondaを使用しているので、誰でも簡単にインストールすることが出来ます。

今回はこのOpenfilerを使い、KVMでライブマイグレーションを行うためのストレージに使用したいと思います。

 

Openfiler導入時のPCスペックは、

CPU       Intel(R) Pentium(R) 4 CPU 2.80GHz

CPU SPEED   2.79 GHz

memory     1001.03 MB

 

1.Openfilerをダウンロードします

 

Openfiler - Download-

今回は、32bitマシンを使用したので、ダウンロードしたファイルは、x86 - ISOimageになります。

 

2.ISOイメージをメディアに焼きインストール開始

 

 Enterで処理を続行する。

 

 メディアチェックは「Skip」で次へ進む

 

 次へ進む

 

 

 言語は、「Japanese」を選んで次へ進む

 

 

 「Manually Partiton With Disk Druid」を選んで次へ

 

 

 HDD内のデータが消えますよ?的な警告が出るが、「Yes」を選択し、次へ

 

 

 画像がつぶれて見ずらいが、ここでは、パーティションの設定を行う。「new」で作成。

 必要なパーティションとして、

 ・マウントポイント「/」   作成(作成時は10G確保)

 ・マウントポイント「/boot」 作成(作成時は10G確保)

 ・Type Swap       作成(作成時は10G確保)

 ・PV:Phisical Volume     作成(作成時は250G確保)

 ・VolumeGroup       作成(上で作成した、PVを指定)

 残りは「Free」領域として確保しておく。

 

 ※ほかのサイトでは、「Free」領域を確保しといてインストール完了後に設定すると書いてあるが(通常はそのやりかた)
  今回の検証では、それができず、アップデートしてもできず、仕方なくインストールの段階でVGを作成する。

 

 

 

 ネットワークデバイスの選択。ethしかないので、変更なし。DHCP使用。

 

 

 タイムゾーンとして、Asia Tokyoを選択。上の地図上で、東京付近をクリックしても、自動で選択される。

 

 

 Adminのパスワードを設定する

 

 

 しばし待って、インストールが完了したら、再起動する

 

 

 

3.インストール完了後、表示されたURLにアクセスし、設定を行う

 

 

 

 ブートすると、Grubが立ち上げるので、一つしかない「Openfiler」を選択する。

 

 

 Openfilerを起動すると、上記のような画面が表示されるので、表示してあるURLにブラウザからアクセスする。

 今回の例では、「https://192.168.229.128:446

 

 

 上記のURLにアクセスすると、ログイン画面が表示されるので、

 username =  openfiler

 password  =  password

 でログインする。

 

 

 ログイン後、「Volumes」タブを押し、右のVolumeSection欄にある、「Volumes Groups」を選択する

 

 

 

 上記の画面が出現するので、

 ・VolumeName       「任意の文字」

 ・VolumeDescription     「説明」

 ・Required Space      「今回はMAXに使用」

 ・FileSystem/VolumeType  「iSCSI

 を選択し、Create.

 

 上記のように、Volume画面のTOPに移動すると、緑色に円グラフが変わっているのがわかる。

 

 

 Volumesタブの右側にある「iSCSI Target Setup」をクリックする。上記6番目。

 

 

 TargetIQNをAddで追加する

 

 

 Incoming User, Outgoin User,でユーザを追加する。

 ※これは必要ないかもしれません。

 

 次に、「Service」タブをクリックし、iSCSI target Serverを「Enable」にし、起動させる。

 

以上でインストールと、初期設定は終わりです。

今回は、必要最低限の設定で起動を行っているため、アクセスコントロールなどは、別途行う必要があります。

Linux側の設定は次回載せる予定です。

ivy bridge 3770s購入

先日第3世代core i シリーズであるivy bridgeこと ivy ちゃんが家にやってきました。

ネット上では、爆熱問題や、ダブルグリスバーガー症候群などが話題になっていますが、

OCをしないなら問題なさそうだし、どうせ買うならとivyの人柱になってきました。

ちなみにPCの自作は今回初めてです。

水冷クーラーの取り付けなどいろいろと戸惑いましたが、無事完成できました。

中でもCPUを取り付けてバーを降ろす所が硬くて結構てんぱりました。

 

構成ハードウェア

CPU: Core i7-3770s(3.1GHz 8M LGA1155)

M/B: ASUS P8Z77-V

メモリ: CMZ8GX3M2A1600C9 (PC3-12800 4GB*2)

SSD : AGT3-25SATA3-120G

PCケース:  PHANTOM410-R

水冷クーラー: CWCH60

電源:  EA-650-GREEN

グラボ: N560GTX-TI TWIN FROZR Ⅱ OC V2

 

  合計:108000円

 

予算があまりなかったので、HDDなどはまだ追加していません。

windowsエクスペリエンスのスコアによると以下のようになります。

 

最低スコアが7.7という自分的にはかなりの満足感です。

 

CrystalMarkで前のメインPCとivyを比較してみました

 

core i7 3770s

 

HDD:

Memory:

 

MHFベンチマーク[大討伐]

 

core 2 duo

 

HDD:

]

 

Memory:

 

MHFベンチマーク[大討伐]

NFCについてまとめてみた

Interface4月号にNFCについての特集が載せてあったので読んでみた。

そして、自分なりに解釈しまとめてみた。

誤解を恐れずに書くので、間違いがあるかもしれません。怪しいと思うところはいろんなソースをみて的確な情報収集を…

 

NFCとは

Near Field Communicationの略称。近接無線通信。

日本ではSONYのFelicaやJRのSuicaなどがあります。

10cmとかの距離を電波で通信します。タイプによっては、数十mの距離を通信するものもあります。

NFCは欧州で広く普及している規格ISO/IEC14443TypeAと日本国内で普及しているFelica共通で使えるようにするための

無線通信の国際通信規格です。NFCは複数の規格を含んでいる

 

NFCフォーラムとは?

NFC技術の実装と標準化の促進を目的に、2004年3月にソニー、フィリップス(現NXPセミコンダクターズ)、ノキアの3社により設立される。

これは、日本ではFelica、欧州ではOyster(TypeA)など規格がバラバラなので、その国固有のICカードしか使えない。

それではダメだ。世界で共通で使える近距離無線通信用のICカードの規格を作りましょうよ的な感じで作られる。

 

NFCフォーラムの経緯

 

(NFCフォーラム設立前)

2000年 ISO/IEC14443TypeA、Bなどの非接触の近距離無線規格として13.56MHzの周波数で動作するカードとリーダ/ライタ

の標準規格できる。TaspoなどのTypeA、運転免許などのTypeBできあがる。

通信部分だけ切り出して企画にすれば、携帯に入れるなどもっと面白い応用ができるのではないか?ISO/IEC14443はRF回路、

 アナログ回路、プロトコル、アプリケーションのファイルアクセスなどの全体を包括する使用になっている。

 

2003年 ISO/IEC18092(NFCIP-1)できる。TypeAとFelicaを共通で使えるようにした規格。

 

2004年 NFCフォーラム設立

 

2005年 ISO/IEC21481(NFCIP-2)TypeBとRFIDが追加される。 

 

2010年 第1世代の規格決まる。NFCフォーラムで実装仕様が策定される。

 

2011年 NFCチップが多数登場

 

NFCフォーラムによってSuica,Edy,Oyster(TypeA)などの既存のカードと互換性のある規格が出来上がる

NFCは今後、スマホ→パソコン→TVへ流れていく。

※ハンドオーバー技術の標準化の検討も進めている、ハンドオーバー技術とは、お店に用意されたタグなどを読み込めば、

設定なしにすぐにWi-Fiが使えるようになったりする技術です。NFCタグを解して無線などの設定を自動でやってくれる。

かざすだけで使えるようになる。

 

NFCを使ったアプリケーションで印象に残ったのは、医師にNFC携帯を持たせ、子供の手首にタグをつけておき、医師が子供のタグ

を読み取ると過去の病歴がクラウドを通してNFC端末に表示されるっていうやつです。

 

RFID

RFID(Radio Frequency Identifer)は非接触ICカードと技術や使われ方が近い。

RFIDと非接触ICの違いは目的にあります。

 

RFID   → 「」の管理

非接触IC → 「」の管理

 

 

RFIDの規格

RFIDは電力伝送方式に「電磁誘導方式」「波方」の2種類に分かれる。

 

電磁誘導方式の特徴:

13.56MHz~135KHz未満

通信距離が数十cmと短い(磁界を使うので減衰が急進)

アンテナが小型安価

 

波方式の特徴:

433MHz、952MHz、2.45GHz

通信距離が長い

アンテナが大きく装置高価

 

RFIDとして普及しているのは、13.56MHz帯と952MHzUHF帯パッシブ

 

13.56MHz帯特徴:

通信距離:        20~30cm

複数タグ読み出し:   数~数十枚

タグの値段:       50円以上

リーダ/ライタの大きさ: 数cm

リーダ/ライタの値段:  数千~数万

 

953MHz帯特徴:

数進距離:        5m

複数タグ読み出し:   100~300枚

タグの値段:       10円

リーダ/ライタの大きさ: 数十cm

リーダ/ライタの値段:  20万円以上

 

上記より携帯電話用機器では、13.56MHz帯、UHF帯は外付けが多い

 

 

RFIDタグ

RFIDタグ必要な通信距離大きさで選ぶ。距離と大きさは比例する

動作温度はー20~85度(ICチップの動作保障温度)

 

RFIDNFCに関する電波法

RFIDNFCも電波を発するので「電波法適用

タグはパッシブ(電池なし)は「電波法適用外

 

13.56MHz帯は周波数だけでなくスプリアスの規定(設計上意図しない周波数成分)が似ているので、国内、海外問題なく使える

13.56MHz、135KHzに限られる

 

UHF帯は国ごとに電波法が異なっている。国内でも同じ周波数帯に対して(952MHz)3つの電波法がある。

 

UHF帯周波数の再編

RFIDMCA無線(タクシー無線)は現行の周波数から920MHz帯へ移行する

920MHz帯のRFIDの使用開始は2012年7月25日から2018年3月3日までに移行完了

移行の際の利点としては、周波数大域が広がる(5~13MHz)

米国などは920MHz対を使用しているので、国際間の共用性なども利点、

 

RFIDのコード体系

RFIDタグにはID(識別子)ユーザデータを記録できる2つの領域がある

 

IDの種類としては、

UID(固体識別子): あらかじめ付与されるユニーク番号。書き換えが不可能

EPC:         ISO/IEC18000-6TypeC準拠(UHF帯タグが対象)。書き換え可能

 

セキュリティに関して

<< NFC >>

・個人のプライバシー情報を守る

・課金情報に不正アクセスさせない

 

<< RFID >>

・貼り付けたものの真贋判定

・模造品対策

 

 

NFCの基本動作

非接触ICカードとは、リーダ/ライタの外部端末から送信される弱電波を使って電力を生成し、同時に通信を行うICを指す。

1.リーダ/ライタから微弱電波発生

2.カードのアンテナを介し、電磁誘導により電力を取得する

3.取得電力が規定値を上回った時点でカード内ICを起動

4.リーダ/ライタは電波に変調をかけ、リクエストデータ送信

5.カードはリクエストを処理し、IC内の負荷を切り替えることによってレスポンスを返信する

6.リーダ/ライタは負荷変動をリーダの負荷変動として検出し、レスポンス受信

 

符号化方式

符号化方式とは、Aという電波がやってきたら1、Bという電波がやってきたら0.

などのように電波の変化によってビットを区別するために使用します。

たぶんですが、イメージとしては無線通信_IEEE802.11の一次変調のような感じだと思っています。

誤り訂正符号とは違います。

符号化方式には「NRZ」「ModifiedMiler」「Manchester」の3つの方式があります。

 

NRZ

NRZとは、0と1のデータを信号波形の高低に対応させるポピュラな方式です。

 

ModifiedMiler

ビット区間内で電圧の変化がなければ0、電圧の変化があれば1を表す。

 

Manchester

ビット区間の中央で電圧レベルが「L→H」に変わるなら0、電圧レベルが「H→L」に変化するなら1を表す。

Mancyester方式は1ビット毎にかならずレベルの変化があるため信号の周期を取りやすく、ノイズを除去をしやすい

 

変調方式

リーダ/ライタ → カード = ASK

カード → リーダ/カード = Felica  : ASK

                   TypeA : OOK (サブキャリアの有無)

                   TypeB : BPSK (サブキャリア位相変調)

 

アンチ・コリジョン(衝突防止)方式

非接触ICは、リーダ/ライタの動作磁界内に複数舞のカードが入ってくるケースが想定される。

 

※無線や普段聞きなれているコリジョンとは意味合いが違う。

※無線:衝突回避

NFC:衝突防止

 

コリジョン方式

TypeA ・・・ビット・コリジョン

TypeB・・・スロットマーカ

Felica・・・タイム・スロット

 

ビットコリジョン方式 TypeA 欧米

カードが保有する固有識別番号(UID)を返信する。複数のカードが同じビットを送ると識別できるが、

異なるビットを送ると混信してわからない。その衝突のところから「0」で始まるビットを持つカードに返信してもらい、

次は「1」を持つカードに返信してもらうといった動作を行う。

 

 

スロットマーカ方式 TypeB 免許証

リーダ/ライタからのリクエストに対してカードは乱数を生成し、スロットマーカー番号として保持。

リーダ/ライタから指定されたスロット・マ-カ番号を持つカードは返信する。衝突した場合は別の乱数を発生させやりなおす。

 

 

タイムスロット方式 Felica Suica

スロットマーカーと同じようにリーダ/ライタが乱数を送信する。

カードはそれをタイムスロットとして保持する。1つタイムスロット分待機したらカードは答える。

衝突したらリトライ

 

通信シーケンス

1.リーダ/ライタとカードとの通信路を設定する(初期応答)と、アプリケーションに応じた情報の受信を行う「活性情報」

とで構成される

 

初期応答

1カード、ICチップに電源が供給されるとカードはライタからの通信時の設定要求(リクエストコマンド)を待機する状態になる。

2.リーダからリクエストコマンドが送信され、カードは応答する。これにより、リーダライタの通信エリアに存在するカードが認識される.

3.認識したカードとパラメータを交換し、通信速度などの条件を相互交換する

 

活性状態

1.「初期応答」で認識したカードを選択し、リーダライタからのコマンドに対するカードのレスポンスを繰り返す。

 

2つの通信モード

NFCIP-1では、能動通信モードと、受動通信モードと呼ぶ2つの通信モードが規定される。

 

能動通信モード・・・リクエスト・レスポンスの双方を、電波を発生させる事により行う。

受動通信モード・・・リクエストの送信は電波を発生させるが、応答では電波を発生させず、電波の負荷を変動させる

 

NFCIP-1では、データレートごとに通信方式を採用する。

 

Transport Protocol NFCIP-1の通信プロトコル
NFCIP-1では、コマンドを送信する側をイニシエータ。受信し、返信する側をターゲットと呼ぶ

流れ
初期RFCA(RFCollisionAvoidance)
イニシエータデバイスが、ほかに電波を発生させているデバイスがいないことを確認

初期化およびSDD(SingleDeviceDetection)
により、イニシエータデバイスは、アンチコリジョン機能を用いて対向デバイスを検知する

「属性要求あり?」分岐
データ交換プロトコルに向かうか独自プロトコルに向かうか決定される。

ATR_REQコマンド送信(イニシエータ→ターゲット)

ATR_RES返信(ターゲット→イニシエータ)
バイスの属性情報を返信する。(受信可能データサイズ、ビットレート

パラメータの変更があれば、PSL_REQで任意送信

DEP_REQ(DataExchangeProtocol)コマンドを用いて双方向データの送受信を行う

DSL_REQ,RLS_REQでトランザクション終了

 

NFCバイスの必須条件

1.リーダ/ライタモード
2.P2Pモード
3.カードエミュレーションモード(オプション)

4種類のNFCForumTag(NFCタグ)に対するアクセス機能をサポート
※TypeAやB,Felicaなど意識しなくても使える。全部含まれるから。

Type1Tag→Taspo,Jewel
Type2 Tag→MIFARE,Ultralight
Type3 Tag→Felica
Type4 Tag→MIFARE DESFire

NFCIP-1ではイニシエータは(106/212/424kpbs)のうち1つのビットレートをサポート。ターゲットは全部

 

仕様書
無線インターフェース(TypeA,B,Felica)に担当する使用をテクノロジと呼ぶ。
3種類ある。NFC-A,NFC-B,NFC-F

通信モードには、コマンド送信できるPollモード、受信できるListenモードがある。
モードは対向デバイスに合わせて、どちらで動作するかが決定される。
Poll→Listen→Poll…と交互に繰り返す

src.rpmからのrpmパッケージ作成手順

前回rpmパッケージの作成手順を紹介しました。

今回はsrc.rpmからのrpmパッケージの作成です。

ちなみに後々気づいたのですが、自分が行っていた方法はとってもオバカな方法でした。

なので、先に通常の方法を紹介いたします。

作成時に使用するsrc.rpmguymagerという、デジタルフォレンジックを行う時などに使用するHDDのダンプツールです。

DEFTLinuxなどに導入されています。それを、我が環境Fedora15へ入れてみようと思います。

 

 

通常方法

 

1.src.rpmをダウンロードしてきます

Fedora15用src.rpm ← ここからダウンロードします。(guymager-0.6.5-1.fc15.src.rpm

guymager以外にもいろいろなツールのsrc.rpmが置いてあります。

 

2.rpmパッケージ作成用ディレクトリ作成

前回の記事参照

パッケージ作成前手順と同じように5つのディレクトリを作成し、手順の用に作業用ディレクトリを指定する

 

3.src.rpm → rpm作成

rpmbuild --rebuild guymager-0.6.5-1.fc15.src.rpm

以上で手順で作成したディレクトRPMS/noach内にrpmパッケージが作成される。

その後は、通常通り「rpm -i *.rpm」コマンドでインストールする。

 

※作成時に、必要だけどインストールされていないライブラリなどがある場合はこのようにメッセージが出る。
エラー: ビルド依存性の失敗:
libewf-devel = 20100226 は guymager-0.6.5-1.fc15.i386 に必要とされています

これは個々にインストールする。yumやsrc.rpmからrpmパッケージを作ってインストールしたり。

 

 

かなり遠回りな作成方法

 

通常方法の手順は遠回りな方法と一緒です。

 

3.ダウンロードしてきたsrc.rpmパッケージを展開する

guymager-0.6.5-1.fc15.src.rpmを展開すると、guymager-0.6.5-1.fc15.srcディレクトリが作成される。中身は、


|-- guymager-0.6.5-patch-001.el5
|-- guymager-0.6.5-patch-001.el6
|-- guymager-0.6.5-patch-001.fc12
|-- guymager-0.6.5-patch-001.fc13
|-- guymager-0.6.5-patch-001.fc14
|-- guymager-0.6.5-patch-001.fc15
|-- guymager-0.6.5-patch-001.fc16
|-- guymager-0.6.5-patch-002
|-- guymager-0.6.5-patch-003
|-- guymager-0.6.5.tar.gz
`-- guymager.spec


この中で、specファイルtar.gzファイルは前回作成時に使ったファイルと同じであるので、見覚えのあるファイルである。
さっそくこの両ファイルを指定のディレクトリに格納する

  • guymager.spec       → SPECS
  • gyumager-0.6.5.tar.gz → SOURCES

 

4.格納したら、specファイルの内容を書き換える

BuildRootを書き換える。(自分の環境に合わせて)
BuildRoot: /home/kiyoto/kyonta/rpm/ROOT

 

BuildRequireの項目から指定されているようなライブラリが必要であるとわかる。
BuildRequires: qt4-devel
BuildRequires: openssl-static
BuildRequires: openssl-devel
BuildRequires: libewf-devel == 20100226

 

5.rpmbuildを行ってみる

とりあえず、ライブラリは必要になったらインストールすればいいので、rpmbuildをしてみる

 

パッチファイルがありません」と出る。
ソースファイルだけでなくパッチファイルもSOURCEディレクトリにいれてあげなければいけなかったらしいので、展開したときにあったファイル

patch-00*.*系を全部SOURCEディレクトリに放り込む。

 

さきほどのBuildRequiresで指定されているライブラリを全部インストールすれば、問題なくrpmパッケージを作成することができる。

上記yumでインストールできるものは、

BuildRequires: qt4-devel
BuildRequires: openssl-static
BuildRequires: openssl-devel

 

libewf-devel==20100226はサイト(ここから)からrpmパッケージをダウンロードしてきてインストールする。

yumでできるかもしれない…なぜかチャレンジはしていないが…。

 

guymagerインストールのイメージ。

 

 

このようにわざわざ自分で展開して配置してからコマンドを一個一個たたかなくても、一発で作成することができたらしい。

とりあえずは、ちょっとした勉強と、「へぇーこうなってるんだぁ…」的な気分が味わえるぐらいでした。

RPMパッケージ作成

RPMパッケージ作成時のメモ。

RPMパッケージとは、RedHad系のLinuxで使用することができるパッケージです。

rpm -i xxx.xxx.rpmのように簡単にインストールをすることができます。

パッケージのインストールやアンインストールが簡単に扱えるようになります。

 

パッケージ作成前手順:

 

1.rpm作業用ディレクトリを作成する

任意のディレクトリにrpm作業用のディレクトリを作成します。

自分の例では、/home/kiyoto/rpmです。

そのまんま自分のホームディレクトリにrpmディレクトリを作成しています。

mkdir /home/kiyoto/rpm

 

2.先ほど作成した作業用ディレクトリ配下に5つのディレクトリを作成する

先ほど作成したディレクトリ(rpm)配下に以下のディレクトリを作成します。

 

  • SOURCES (ソースファイル格納用ディレクトリ。tarボール)
  • SPECS    (SPECファイル格納用ディレクトリ)
  • BUILD     (RPMパッケージ作成時の作業用ディレクトリ。ソース展開など)
  • ・RPMS     (完成したRPMパッケージ格納用ディレクトリ)
  • ・SRPMS    (src.rpmパッケージ格納用ディレクトリ)

 

3.RPMSディレクトリ配下にi386ディレクトリを作成する

 

 

4.パッケージを作成するための作業用ディレクトリ指定する

ホームディレクトリに .rpmmacros ファイルを作成し、先ほどの1.で作成した作業用ディレクトリを指定する

vi .rpmmacros 
%_topdir /home/kiyoto/rpm

 

5.SOURCESディレクトリに作成したソースファイル(tar.gz)を格納する

以下のファイルを用意し、tarボールにまとめる。

 

  • ソースファイル(今回の例では、sniffy.c sniffy.h などなど...)
  • makeファイル(make)
  • 自分は最初makeファイルなどなくてもいいのかと思い、ソールファイルのみをtarボールに格納してしまい、作成中にエラーが出ました。

 

tarボールにまとめる時に、ファイル名(tarボール)の命名規則があるので、以下のような規則に従う。

 

<パッケージ名>-<バージョン番号>.<リリース番号>

 

自分の例(sniffyを作ったとき)では「sniffy-1.0.tar.gz」という感じになる。

sniffy-1.0のようなディレクトリを作成し、そのディレクトリ内にソースファイル・makeファイルを格納し、「圧縮」する。

makeファイルの作成方法は別途他のサイトを参照。

 

6.SPECファイル作成

SPECファイルを作成し、SPECSディレクトリに格納する。

このSPECファイルが結構重要なファイルなのだが、いろんな項目があるのでめんどうなところ。バージョンの違いによっても結構違うらしい…

複数のサイトを参照しながら一個一個書いていくのがわかりやすいかも。既存のSPECファイルを参照するのもOK

以下の例は必要最低限をまとめたような簡単な例です(rpmパッケージ化することだけを考えた結果のspecファイル)

name: sniffy
Version: 1.0
Release: 0
License: GPL2
Group: Utilities
Source: sniffy-1.0.tar.gz
Summary: packet sniffer
Packager: kiyoto akiyama
Distribution: Fedora
BuildRoot: /home/kiyoto/kyonta/rpm/ROOT
%description
sniffy-1.0
%prep
rm -rf $RPM_BUILD_ROOT/*
mkdir -p $RPM_BUILD_ROOT/usr/local/{bin,man/man1}
%setup
%build
make
%install
install -s sniffy $RPM_BUILD_ROOT/usr/local/bin
%files
%attr(-, root, root) /usr/local/bin/sniffy

 

  • name:作成するパッケージ名。上記でtarボールにまとめた時のパッケージ名と同一でなければならない。
  • version:パッケージのバージョン。任意
  • Release:パッケージのリリース番号。任意
  • License:ライセンス。
  • Source:上記で作成したtarボールのファイル名
  • Summary:作成するパッケージ名の概要
  • Packager:作成者情報
  • Distribution:Linuxのディストリビューション
  • BuildRoot:ちょっとわからない。反映されてるかもナゾな項目だった。
  • %description:パッケージの説明。長文でもOK
  • %prep:rpmパッケージ作成時の前処理
  • ※例では、ビルドルートを削除し、ビルドルート上に、bin,manディレクトリを作成している。
  • %setup:ソースファイルを展開後の処理
  • %build:configureやmakeなどのビルド処理
  • %install:インストール処理
  • %files:パッケージに含まれるファイルリストのリスト

 

 

jパッケージ作成手順:

rootユーザでやらず、一般ユーザで以下を行う。一般ユーザでやらないと何かあったときに取り返しのつかないことになるらしい。

 

$rpmbuild -bp sniffy.spec

$rpmbuild -bc sniffy.spec

$rpmbuild -bi --define="__check_files %{nil}" sniffy.spec

$rpmbuild -bl --define="__check_files %{nil}" sniffy.spec

$rpmbuild -bb --define="__check_files %{nil}" sniffy.spec

 

※3回目の段階から出てくる--define="__check_files %{nil}"は、作成中に「インストール済み(ただし未伸張)ファイルが見つかりました

的なメッセージが出た場合に、指定すると問題なく続行させることができる。

 

以上でRPMS/i386ディレクトリに、rpmパッケージが作成されている。

-bpなどで、段階的に作成していくため、エラーが出たらそれを修正しながら行っていけばしっかり作成される。

エラーの内容もしっかり読み、わからない所はgoogleで調べるなどすれば、解決できると思います。

今回はとりあえずパッケージ化することに重点を置いたため、内容が適当かもしれません。

詳しい設定などは、他のサイトで詳細に説明されているため省きます。(自分が詳しく知りません)

 

参照URL:

RPMパッケージ作成メモ

インストール済み(ただし未伸張)ファイルが見つかりました

簡単なRPMの作り方

RPMパッケージ作成

ifreq構造体によるMACアドレスの変更

arp_poisoningのソースを読み返しているときに、ifreq構造体を使ってMACアドレスを設定できることを思い出した。

なので、任意のMACアドレスに設定できるプログラムを作ることにした。

MACアドレスを設定するには、SIOCGIFFLAGSをioctlで指定する、取得するには、SIOCGIFLAGSを指定する。

その後、ifr.ifr_hwaddr.sa_data[i]を使い、設定や取得を行う。

確認動作環境:fedora15,13

 

 

ifreq構造体 

struct ifreq {
char ifr_name[IFNAMSIZ]; /* Interface name */
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short ifr_flags;
int ifr_ifindex;
int ifr_metric;
int ifr_mtu;
struct ifmap ifr_map;
char ifr_slave[IFNAMSIZ];
char ifr_newname[IFNAMSIZ];
char *ifr_data;
};
};

struct ifconf {
int ifc_len; /* size of buffer */
union {
char *ifc_buf; /* buffer address */
struct ifreq *ifc_req; /* array of structures */
};
};

 

machanger.c

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <net/if_arp.h>
int main(int argc, char **argv)
{ // 引数チェック
if(argc != 3){
printf("machanger <interface> <address>\n");
return 0;
}
int fd; // ソケットディスクリプション
struct ifreq ifr; // MACアドレス構造体
char *tp;
int i,t,tmp;
char *device = argv[1];
char *str = argv[2];
i = 0;
// ソケットオープン
fd = socket(AF_INET, SOCK_DGRAM, 0); /* デバイスを変更 */
strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
ifr.ifr_flags &= ~IFF_UP;

// 先頭MACアドレスのポインタ格納
tp = strtok(str,":");
ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER; // 指定されたMACアドレスを16進数変換する
while(tp != NULL){
for(t=0;t<2;t++){
switch (tp[t]){
case '0': if(t==1){tmp+=0x0;}else{tmp=0x0;}break;
case '1': if(t==1){tmp+=0x1;}else{tmp=0x1;}break;
case '2': if(t==1){tmp+=0x2;}else{tmp=0x2;}break;
case '3': if(t==1){tmp+=0x3;}else{tmp=0x3;}break;
case '4': if(t==1){tmp+=0x4;}else{tmp=0x4;}break;
case '5': if(t==1){tmp+=0x5;}else{tmp=0x5;}break;
case '6': if(t==1){tmp+=0x6;}else{tmp=0x6;}break;
case '7': if(t==1){tmp+=0x7;}else{tmp=0x7;}break;
case '8': if(t==1){tmp+=0x8;}else{tmp=0x8;}break;
case '9': if(t==1){tmp+=0x9;}else{tmp=0x9;}break;
case 'a': if(t==1){tmp+=0xa;}else{tmp=0xa;}break;
case 'b': if(t==1){tmp+=0xb;}else{tmp=0xb;}break;
case 'c': if(t==1){tmp+=0xc;}else{tmp=0xc;}break;
case 'd': if(t==1){tmp+=0xd;}else{tmp=0xd;}break;
case 'e': if(t==1){tmp+=0xe;}else{tmp=0xe;}break;
case 'f': if(t==1){tmp+=0xf;}else{tmp=0xf;}break;
} if(t==0){
tmp = tmp << 4;
}
}
// 1バイトMACアドレス格納
ifr.ifr_hwaddr.sa_data[i] = tmp;
tp = strtok(NULL,":");
i+=1;
}
if (ioctl(fd, SIOCSIFHWADDR, &ifr) != 0) {
perror("");
}
} close(fd);
return 0;
}

 

実行方法

# machanger eth0 aa:bb:cc:dd:ee:ff

 

RPMパッケージ

 

machanger-1.0-0.i386.rpm

 

ソース

 

machanger-1.0.tar.gz