試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ReactOS 0.3.3-RC1をビルドする

Windows(NT系)互換目標OSであるReactOSをビルドする環境が
https://www.reactos.org/wiki/index.php/Build_Environment
にて配布されている。UNIX系OS向けのパッケージをダウンロード・展開し、RosBE-Builder.shをroot権限で実行させる(一般ユーザ権限にて、ホーム以下などの書き込み権限のある場所に入れてもOK)。
下の例では、インストール場所を/opt/RosBE/に指定している。

$ sudo ./RosBE-Builder.sh
*******************************************************************************
*         ReactOS Build Environment for Unix-based Operating Systems          *
*                                 Builder Tool                                *
*                      by Colin Finck <mail@colinfinck.de>                    *
*                                                                             *
*                                Version 0.3.6                                *
*******************************************************************************
  
This script compiles and installs a complete Build Environment for building Reac
tOS.
  
Checking for the needed tools...
Checking for bison... OK
Checking for flex... OK
Checking for gcc... OK
Checking for g++... OK
Checking for grep... OK
Checking for makeinfo... OK
Checking for GNU Make... OK
  
Installation Directory
In which directory do you want to install it?
Enter the path to the directory here or simply press ENTER to install it into th
e default directory.                                                           
[/usr/RosBE] /opt/RosBE
  
The directory "/opt/RosBE" does not exist. The installation script will create i
t for you.                                                                     
  
Ready to start
Ready to build and install the ReactOS Build Environment.
Press ENTER to continue or any other key to exit.
  
Building...
Extracting mingw-runtime... OK
Extracting w32api... OK
Extracting binutils... OK
Configuring binutils... OK
Building binutils... OK
Installing binutils... OK
Cleaning up binutils... OK
Extracting gcc... OK
Configuring gcc... OK
Building gcc... OK
Installing gcc... OK
Cleaning up gcc... OK
Extracting make... OK
Configuring make... OK
Building make... OK
Installing make... OK
Cleaning up make... OK
Extracting nasm... OK
Configuring nasm... OK
Building nasm... OK
Installing nasm... OK
Cleaning up nasm... OK
  
Final actions
Compiling buildtime... OK
Compiling cpucount... OK
Removing unneeded files... OK
Removing debugging symbols... OK
Copying scripts... OK
Writing version... OK
  
Finished successfully!
To create a shortcut to the Build Environment on the Desktop, please switch back
 to your                                                                       
normal User Account (I assume you ran this script as "root").
Then execute the following command:
  
  /opt/RosBE/createshortcut.sh
  
If you just want to start the Build Environment without using a shortcut, execut
e the                                                                          
following command:
  
  /opt/RosBE/RosBE.sh <path/to/your/ReactOS/source/directory> [<optional color c
ode>]                                                                          

ビルドをするので時間はかかるが、インストールは正常に終了した。

ccacheの準備

ccacheを使用するためのシンボリックリンクを作成しておく。これは一度行えばよい。/usr/lib/ccache/bin/の部分は環境に合わせる。

$ cd /usr/lib/ccache/bin/
$ for i in gcc g++; do sudo ln -s /usr/bin/ccache mingw32-$i; done

ビルド環境に入る

ソースツリーの最上位ディレクトリを引数にしてRosBE.shを実行する。

$ /opt/RosBE/RosBE.sh /path/to/ReactOS-0.3.3-RC1/

ここで、メッセージが出力されて、bashのシェルに切り替わる。

ビルド設定ファイル

[引用]ReactOS.rbuildより

  <xi:include href="config.rbuild">
    <xi:fallback>
      <xi:include href="config.template.rbuild" />
    </xi:fallback>
  </xi:include>

とあるので、デフォルトではconfig.template.rbuildが使われ、config.rbuildを作成しておけばそれが優先される。

--- config.template.rbuild
+++ config.rbuild
@@ -67,7 +67,7 @@
   Whether to compile for debugging. No compiler optimizations will be
   performed.
 -->
-<property name="DBG" value="1" />
+<property name="DBG" value="0" />

のようにすると、デバッグ情報を無効にできる。そうしないと、ソースツリー内のディスク使用量が膨大になってしまう(du -hの結果では3.0GiB)。しかし

[CC]       ntoskrnl/vdm/vdmmain.c
[CC]       ntoskrnl/vdm/vdmexec.c
[LD]       output-i386/ntoskrnl/ntoskrnl.exe
obj-i386/ntoskrnl/kd/kdinit.o: In function `KdInitSystem@8':
/usr/src/ReactOS-0.3.3-RC1/ntoskrnl/kd/kdinit.c:(.data+0x24): undefined reference to `_KdpKdbgInit@8'
collect2: ld returned 1 exit status
mingw32-make: *** [output-i386/ntoskrnl/ntoskrnl.exe] Error 1

0.3.3-RC1のソースでは、DBGの値を0にしたところ、上のようなエラーになってしまった。

$ mv ntoskrnl/kd/kdinit.c ntoskrnl/kd/kdinit.c.orig
$ sed -e "s/KdpKdbgInit//" ntoskrnl/kd/kdinit.c.orig > ntoskrnl/kd/kdinit.c

とすることで、ビルドは通せたが、インストールの途中で落ちてしまうので結局ダメだった。

ccacheを使用するようにしてビルド

ccacheシンボリックリンクのある階層に合わせて${PATH}を設定する。

$ PATH=/usr/lib/ccache/bin:${PATH} make bootcd

動作確認

VMware Playerでの動作(インストール後の動作まで)を確認。VirtualBoxでは、残念ながら動作しなかった(0.3.1は普通に動いた)。アルファ版(かつ、そのリリース候補版)というだけあって、動作が非常に不安定。突然OSごと落ちることも頻繁に起きた。
関連記事: