jslinuxã§éãã§ã¿ã
ã¯ããã«
javascriptã§linuxãåãjslinuxãå ¬éããã¦1ã¶æãçµã¡ã¾ããï¼äººã®åã75æ¥ã¨ã¯ããè¨ã£ããã®ã§ï¼ãã§ã«è©±é¡ã«ãããããªããªã£ã¦ãã¾ãããï¼å¤å°æ°é®®åº¦ã¯è½ã¡ãã¨ã¯ããï¼é¢ç½ãç©ã¯é¢ç½ãã£ã¦ãã¨ã§ï¼ã¡ãã£ã¨éãã§ã¿ããã¨ã«ãã¾ããï¼
ã§ã£ãããã¦ã¿ã
小飼さんのブログã§jslinuxã¨æ¯ããæ¹æ³ãã§ã¦ãã¾ãï¼ããã«ãæ¸ãã¦ãããã§ããï¼ããã©ã«ãã®kernelã§ã¯root.binã®ãµã¤ãºã4096KBãã大ãããããã¨ãã§ãã¾ããï¼ããã§ï¼åã®ãµã¤ãºã®root.binãåãããã¨ãç®æ¨ã«è©¦ãã¦ã¿ããã¨ã«ãã¾ããï¼ã¾ãã¯å¿ è¦ãªãªã½ã¼ã¹ãéãã¾ãï¼å°é£¼ãããããã°ãæ¸ããææããjslinuxã¯ãã¼ã¸ã§ã³ã¢ãããã¦ããã®ã§ï¼ä»¥ä¸ã®ãã¡ã¤ã«ããã¼ã«ã«ã«è½ã¨ãã¾ãï¼ä¾ã¨ãã¦~/jslinux/htdocs/é ä¸ã«ç½®ããã®ã¨ãã¾ãï¼
次ã«root.binã大ãããã¾ã
$ mkdir mnt $ mkdir roots $ sudo mount -t ext2 -o loop root.bin mnt $ dd if=/dev/zero of=roots/root.bin bs=1k count=8192 $ sudo /sbin/mke2fs roots/root.bin $ sudo mount -t ext2 -o loop roots/root.bin mnt2 $ sudo cp -dpR mnt/* mnt2/ $ sudo umount mnt mnt2 $ mv root.bin roots/root.bin.org $ cp roots/root.bin .
ããã§8MBã®root.binãã§ãã¾ããï¼
kernelã®ãªã³ã³ãã¤ã«
jslinuxã4MBããã§ããRAMãã¡ã¤ã«ã·ã¹ãã ãæ±ããªãã®ã¯ï¼kernelã®ã³ã³ãã¤ã«ãªãã·ã§ã³ã§
CONFIG_BLK_DEV_RAM_SIZE=4096
ãæå®ãã¦ããããã§ãï¼ããã¯jslinux用のパッチとかコンフィグãã¡ã¤ã«ã«å«ã¾ãã¦ããï¼config_linux-2.6.20ã«è¨è¼ããã¦ãã¾ãï¼æ¬æ¥ãªãbootãªãã·ã§ã³ã§ramdisk_sizeãæå®ããã°æ±ãããã¡ã¤ã«ã·ã¹ãã ãµã¤ãºã¯å¤ããããã¨æã£ãã®ã§ããï¼ãã¾ããããªãããã§ãï¼ããã辺ã¯ã¾ããã¤ã詳ãã調ã¹ã¦ã¿ããã¨æã£ã¦ãã¾ãï¼
ãã¦ï¼kernelãä½ããã¨ã«ãã¾ãï¼æåx86_64ã¢ã¼ããã¯ãã£ã®ãã·ã³ã§ä½ããã¨ããã®ã§ããï¼x86ç¨ã®kernelãä½ãã¾ããã§ããï¼åã«ã¯ãã¹ã³ã³ãã¤ã«ã®ããæ¹ãå¿ãã¦ããã ããªã®ã§ããï¼èª¿ã¹ãã®ãé¢åã«ãªã£ãã®ã§ï¼ï¼ï¼ä»¥åä½ã£ã¦ãã®ã¾ã¾ã«ãªã£ã¦ããcentos5.3 i386çã使ã£ã¦ã¿ã¾ããï¼ããã®kernelãã¼ã¸ã§ã³ã¯
$ uname -a Linux fig 2.6.18-238.12.1.el5 #1 SMP Tue May 31 13:23:01 EDT 2011 i686 i686 i386 GNU/Linux
ã¨ãªã£ã¦ãã¾ããï¼ãã£ããã¨ä½ãæ¹ãæ¸ãã¦ã¿ãã¨ï¼
$ cd $ curl -O http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.gz $ curl -O http://bellard.org/jslinux/linuxstart-20110526.tar.gz $ tar xvfz linux-2.6.20.tar.gz $ tar xvfz linuxstart-20110526.tar.gz $ mv linux-2.6.20 linux-2.6.20.org $ mv tmp/linuxstart-20110526 . $ patch -p0 < linuxstart-20110526/patch_linux-2.6.20 $ cd linux-2.6.20.org $ make mrproper $ sudo yum install ncurses-devel â curses.hãå ¥ã£ã¦ãªãã£ã $ make O=/home/kei/kernel/ menuconfig
ã¨ããã¨ï¼kernelè¨å®ç¨ã®ã¡ãã¥ã¼ç»é¢ãã§ã¦ãã¾ãï¼ããã§"Load an Alternate Configuration File"ã³ãã³ããé¸æãã¦"config_linux-2.6.20"ãèªã¿è¾¼ã¿ï¼ã¡ãã¥ã¼ãçµäºãã¾ãï¼ãã使ããã«ã³ã³ãã£ã°ãèªã¿è¾¼ãæ¹æ³ãããã¨æãã®ã§ããï¼ã¾ã è¦ã¤ãã¦ãã¾ããï¼èª°ãç¥ã£ã¦ããæãã¦ãã ããã¾ãï¼ãã§ï¼
$ make O=/home/kei/kernel $ cd ~/kernel $ object -O binary vmlinux vmlinux26.bin $ cp vmlinux26.bin ~/jslinux/htdocs
ã¨ããã°kernelã®æºåãã§ããããã§ãï¼ããããï¼config_linux-2.6.20ãèªã¿è¾¼ãåã«
CONFIG_BLK_DEV_RAM_SIZE=16384
ã¨å¤æ´ãã¦ããã®ãå¿ããã«ï¼
æºå
jslinux.jsã§ç©çã¡ã¢ãªãµã¤ãºã
/* memory size (in bytes) */
params.mem_size = 16 * 1024 * 1024;
ã¨å®ç¾©ãã¦ããã®ã§ï¼ããã
/* memory size (in bytes) */ params.mem_size = 32 * 1024 * 1024;
ã¨ãã«ãã¦ã¡ã¢ãªãµã¤ãºãå¢ããã¦ããã¾ãï¼ãã¡ã¤ã«ãµã¤ãºã¨åã大ããããåããªãã§ããããããï¼æå¾ã«
use Plack::Builder; builder { enable "Plack::Middleware::Static", path => qr{^/}, root => 'htdocs/'; $app; };
ã¨ããå 容ã®app.psgiãã¡ã¤ã«ãä½ã£ã¦~/jslinuxãã£ã¬ã¯ããªã«ããã¦
$ sudo plackup --port 80
ã¨ãã£ã¦ã¢ã¯ã»ã¹ãã¦ã¿ãã¨â¦
RAMDISK: Loading 8192KiB [1 disk] into ram disk... done.
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 128k freed
Booted in 12.678 s
Welcome to JS/Linux
~ #
ã¨ãªã£ã¦ãã¾ãåãã¾ããï¼
次ã¯
ããã¤ã¹ãã©ã¤ããä½ã£ã¦websocketã§ãµã¼ãã¨éä¿¡ããããã«ãã¦ã¿ããã§ããï¼ããããã¤ã¹ãã©ã¤ãã®ä½ãæ¹ãªãã¦ãã£ããå¿ãã¦ããã®ã§ï¼ãã¤ã§ããããã£ã±ãããããªãã§ããã©â¦