2013年4月24日水曜日

[grub] コマンドラインからのLinuxのブート

Ver.0.9.7


上記のようなメニューページにて「c」キーを押下するとgrubのコマンドラインへ移行する。


helpコマンドを実行すると要約されたコマンドリストが表示される。

root コマンドで起動パーティションを指定する。なお、「root (hd0,」でtabキーを押下すると、パーティションのリストが表示される。



なお、(hd0,0) は、/dev/hda1 or /dev/sda1 という具合である。
次にkernelコマンドでカーネールをロードする。
以降は、調査中。



[CentOS] SELinux 無効化後のカーネルパニック

SELinuxを無効化後に再起動したら 




上記のように「  Kernel panic – not syncing: Attempted to kill init!」カーネルパニックをおこした。

グーグル先生に聞くと同じようなミスを犯す人が多いみたいですぐに解決策が分かった。

とりあえずPCを再起動させて「Booting CentOS .以下略」と表示中に間髪入れずに「Enter」keyを押下する。


するとGrub のメニューが表示されるので


「e」キーを押下して、起動リストを表示させる。


2番目のCentOS のカーネルをハイライトして再び「e」キーを押下する。そして、起動オプション「enforcing=0」を追記する。



追記したら「Enter」キーを押下して保存して元のページに戻り、「b」キーを押下して起動オプションを加えたコマンドで起動する。


起動後は、毎回この作業をせずに済むように /etc/grub.conf に先ほどと同様に「encorcing=0」オプションを追記しておく。

2013年4月23日火曜日

[CentOS] パスワード無しでrootとしてsshでログイン

ssh で公開鍵でrootログインする必要があり

サーバーにクライアントの公開鍵を登録して

/etc/ssh/sshd_config の

PermitRootLogin

を「Yes」にした後

クライアントから

ssh server

としてログインしてもパスワードを聞かれてしまう。

これで2・3日悩んでたw

結果 SELinuxが原因だった。

サーバー・クライアント共にセキュアなネットワーク内での仕様だったので



setenforce 0
そして、起動後も無効になるように/etc/selinux/configのSELINUXTYPEを下記のようにdisabledに変更しておく。

SELINUXTYPE=diabled

と無事パスワード無しでログインできる様になった。

SELinux については、こちらのサイトを中心に勉強させていただきたい。

2013年4月17日水曜日

[delphi] PEバイナリ

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} としておくと

IMAGE_FILE_LARGE_ADDRESS_AWARE フラグが立ったPEバイナリをdccが吐いてくれて、


64bit Windowsではプロセスの仮想アドレス空間が4Gbyteになる。


[Windows] About virtualization of Registry

Windows Vista 以降のクライアント Windowsでは、特定のKeyへのアクセスがリダイレクトされる
この件について調べてみた

リダイレクトの挙動の概要は下記である。


                 ---------------  Yes  ---------------- Yes
Start ->---| 64bitカーネルの |-----| 32bitバイナリか? |-----> rule A 適用
                |  Windowsか ?     |        |                         |
                ----------------        ----------------
                         | No 32bit                       | No 64bitバイナリである
                         |     カーネルである          |
                         |------------------------------------> rule B 適用


[rule A]

64bit カーネルのWindowsにおいて32bitバイナリは、32bitプロセスとしてWOW 64(Windows On Windows 64)に32bit systemをエミュレートしてもらってその上を走るのでこのルールが適用されます。


HKEY_LOCAL_MACHINE\Software 配下等特定のレジストリキーへのアクセスは、Wow6432Nodeに含まれるロケーションにリダイレクトされます。

    HKEY_LOCAL_MACHINE\Software -> (リダイレクト先) HKEY_LOCAL_MACHINE\Software\Wow6432Node

[rule B]

  UACによるリダイレクト が行われる

  
HKEY_LOCAL_MACHINE\SOFTWARE ->(リダイレクト先) HKEY_CURRENT_USER\Software\Classes\VirtualStore




[WOW64環境で走っているかどうかの確認]
WOW64.pas


unit WOW64;

// wether OS is windows
{$IFDEF MSWINDOWS}
// wether target platform is Windows 32bit
{$IFDEF WIN32}
{$DEFINE MYTARGET}
{$ENDIF}
{$ENDIF}

interface

{$IFDEF MYTARGET}
uses Windows;
{$ENDIF}

function IsWOW64 : Boolean;

{$IFDEF MYTARGET}
var
  IsWow64Process : function(hProcess : THandle; var Wow64Process : BOOL) : BOOL stdcall;
{$ENDIF}

implementation

function IsWOW64 : Boolean;
{$IFDEF MYTARGET}
var
  Flg : BOOL;
begin
  Result := False;
  @IsWow64Process := GetProcAddress(GetModuleHandle('kernel32.dll'), 'IsWow64Process');
  if @IsWow64Process <> nil then begin
    if IsWow64Process(GetCurrentProcess, Flg) then Result := Flg;
  end;
{$ELSE}
begin
  Result := False;
{$ENDIF}
end;

end.


WOW64test.pas // エラーハンドリング をしていません。レジストリ書き込みを伴います。
unit wow64test;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, WOW64,Registry;

type
  TForm4 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
const
 appKey = 'Software\RegTest';
var
 RegIni : TRegIniFile;
 val : string;
begin

  if IsWOW64 then begin
    showMessage('This process is running on Wow64');
  end else begin
    showMessage('This process is not running on Wow64');
  end;

  RegIni := TRegIniFile.Create(appKey);
  RegIni.RootKey := HKEY_CURRENT_USER;
  RegIni.WriteInteger('settings', 'value', 3);
end;

end.


XP (32bit) での実行結果


7 Pro (64bit) での実行結果

しかし、レジストリは、 HKEY_CURRENT_USER\RegTest\settings に書き込まれる。なぜ?






 なお、UAC制限によるリダイレクトは、Interactive process の場合は行われないらしいが、
Interactive process とは何なのか? 想像するにコマンドラインプログラムは、Interactive processではなさそうだが真相は不明

2013年4月15日月曜日

[ubuntu] evince でフォントを埋め込んでいないPDFの日本語が豆腐に化ける

 evince は,/etc/fonts/conf.avail の 69-language-selector-ja-jp.conf を
見て割り当てるフォントを決定しているがここに非日本語フォントが割り当てら
 れ ているために日本語部分が豆腐になる.
 以下は,修正用パッチ
 
 *** 69-language-selector-ja-jp.conf.org 2013-04-15 10:57:22.039956485 +0900
 --- 69-language-selector-ja-jp.conf 2013-04-15 10:59:19.140041561 +0900
 ***************
 *** 10,16 ****
 <string>serif</string>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 - <string>DejaVu Serif</string>
 <string>Takao P明朝</string>
 <string>IPA P明朝</string>
 <string>IPA モナー P明朝</string>
 --- 10,15 ----
 ***************
 *** 28,34 ****
 <string>sans-serif</string>
 </test>
 <edit name="family" mode="prepend" binding="strong">
 - <string>DejaVu Sans</string>
 <string>Takao Pゴシック</string>
 <string>IPA Pゴシック</string>
 <string>IPA モナー Pゴシック</string>
 --- 27,32 ----
 

2013年4月14日日曜日

[DHCP] アドレスの再取得

こんなことは、めっったにないけどDHCP Serverの設定を変えてクライアントに変更を
反映させたいとき。

sudo dhclient -r
で借りていたアドレスをリリース(Release)

sudo dhclient
でアドレスを再取得