본문 바로가기

작업일지/coLinux

coLinux에 새로운 리눅스 설치하기

coLinux에서 제공되는 리눅스 배포판이 아닌 새로운 Linux배포판을 설치하는 방법.

[준비]
coLinux
Debian Squeeze 배포판 1번 ISO CD 이미지


[coLinux 설치]
생략



[Debian Squeeze 1번 ISO파일]
(용량이 작은 "debian-6.0.0-i386-businesscard.iso"를 다운 받는게 유리하다.)
다운로드후 coLinux의 cofs를 이용한 공유기능을 설정해서 Windows의 공유 작업을 해둔다.
이것으로 coLinux에서 Debian Squeeze 1번 ISO파일로의 접근이 가능해진다.



[initrd.rmdrv 만들기]
iso를 loop device로 마운트 한다.
 
# mkdir /mnt/iso
# mount -o loop /shared/debian-6.0.0-i386-businesscard.iso /mnt/iso/


initrd를 찾아서 램드라이브를 만든다.
/mnt/iso/isolinux/isolinux.cfg를 보면 initrd의 위치를 알수 있다고 하나 isolinux.cfg에 안나와 있음.
find로 initrd.gz의 위치를 찾음
 
# find /mnt/iso/ -name *initrd.gz
# mnt/iso/install.386/gtk/initrd.gz
# mnt/iso/install.386/initrd.gz


검색결과 두군데중 "/mnt/iso/install.386/initrd.gz"을 사용할것임.(gtk는 그래픽용?, gtk가 아닌것은 콘솔용?)

램드라이브로 만들기 위해 작업 디렉토리 생성
 
# mkdir /tmp/squeeze.initrd


15M짜리 램드라이브용 빈 파일을 만든다.
 
# dd if=/dev/zero of=/tmp/squeeze.initrd.rmdrv bs=1048576 count=15
15+0 records in
15+0 records out
15728640 bytes (16 MB) copied, 0.2 s, 79 MB/s



포멧
 
# mkfs.ext2 /tmp/squeeze.initrd.rmdrv
mke2fs 1.41.3 (12-Oct-2008)
/tmp/squeeze.initrd.rmdrv is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
3840 inodes, 15360 blocks
768 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=15728640
2 block groups
8192 blocks per group, 8192 fragments per group
1920 inodes per group
Superblock backups stored on blocks:
        8193

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


포멧된 램드라이브 파일을 작업디렉토리인 /tmp/squeeze.initrd에 마운트 한다.
 
# mount -o loop /tmp/squeeze.initrd.rmdrv /tmp/squeeze.initrd


initrd.gz을 램드라이브에 압축 해제한다.
(sudo로는 퍼미션 에러가 발생한다. su로 하던지 root계정으로 작업해아 한다.)
 
# cd /tmp/squeeze.initrd
# gzip -dc /mnt/iso/install.386/initrd.gz | cpio -id
20821 blocks


램드라이브 정리하고 작업파일들 삭제.
 
# rm -rf ./lost+found/
# cd ..
# umount /tmp/squeeze.initrd
# rmdir /tmp/squeeze.initrd


램드라이브 squeeze.initrd.rmdrv가 완성되었다.
coLinux공유폴더로 이동한다.
 
# mv /tmp/squeeze.initrd.rmdrv /shared/






[10G짜리 가상이미지 디스크 파일 생성] (windows에서 작업)
꼭 coLinux와 Windows의 공유폴더에서 작업한다.
아닐 경우 후에 파일복사등 번거로움이 있다.
 
C:\VM\COLINUX\IMAGES\Shared Folder>fsutil file createnew debian.squeeze.10gb.disk 10737450496
C:\VM\COLINUX\IMAGES\Shared Folder>fsutil sparse setflag debian.squeeze.10gb.disk
C:\VM\COLINUX\IMAGES\Shared Folder>fsutil sparse queryrange debian.squeeze.10gb.disk
sparse range: [0] [10737450496]
C:\VM\COLINUX\IMAGES\Shared Folder>fsutil sparse setrange debian.squeeze.10gb.disk 0 10737450496


10G, 5G, 3G의 용량 계산 방법의 예 
(10GB = 1024*1024*1024*10 + 63*512 = 10737450496B)
(5GB = 1024*1024*1024*5 + 63*512 = 5368741376B)
(3GB = 1024*1024*1024*3 + 63*512 = 3221257728B)
(1GB = 1024*1024*1024*1 + 63*512 = 1073774080B)

+ 63*512는 정확한 용량 계산을 위해 하는듯 하나 안해도 무관함.

fsutil의 sparse를 적용하였다.
작업 완료된 빈 가상이미지 디스크 파일의 크기는 10G지만 실제 할당된 크기는 4K이다.(파일 속성에서 확인 가능)
이제 실제 사용량에 따라 디스크 공간이 할당 될것이다.

512MB 스왑 가상이미지 디스크 파일 생성
 
C:\VM\COLINUX\IMAGES\Shared Folder>fsutil file createnew swap.512mb.disk 536903168


용량 계산은 위와 동일 
이곳(http://gniarf.nerim.net/colinux/swap/)에서도 구할수 있음.

디스크 포멧
리눅스나 cygwin을 써서 마운트 한후 포멧.
여기서는 기존에 설치 되어 있던 coLinux에 파일을 복사한후 작업함.

# mkfs.ext3 /shared/debian.squeeze.2gb.disk
mke2fs 1.41.3 (12-Oct-2008)
/shared/debian.squeeze.2gb.disk is not a block special device.
Proceed anyway? (y,n) y
warning: 7 blocks unused.

Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
656640 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8208 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
 
포멧은 중요하다.
PC에 설치하는 과정과는 다르게 설치하는 도중에 포멧을 할 수 없기 때문에 미리 포멧된 이미지를 준비해둬야 한다.





[환경파일 생성]
다시 windows에서 작업한다.
coLinux공유 폴더에 있는 debian.squeeze.2gb.disk와 swap.512mb.disk를 한곳에 모아 놓는다.
coLinux실행에 필요한 .cmd와 .conf파일을 생성.
이때 처음 설치시 .conf에서 swap은 없이 설정하고 설치 완료후 swap디스크를 설정해줌.

debian.squeeze.2gb.bat
 
@echo off
set COLINUX_CONSOLE_FONT=Lucida Console:12
set COLINUX_CONSOLE_EXIT_ON_DETACH=1

SET _CONF_=@debian.squeeze.2gb.conf
"..\..\coLinux\Cooperative Linux 0.7.8\colinux-daemon.exe" -v 3 -t nt %_CONF_% 



debian.squeeze.2gb.conf
 
#
# This is an example for a configuration file that can
# be passed to colinux-daemon in this manner:
#
#    colinux-daemon @example.conf
#
# Note that you can still prepend or append configuration and 
# boot parameters before and after '@', or you can use more 
# that one '@ to load several settings one after another.
#    colinux-daemon @example.conf @overrider.conf mem=32
#
# Full list of config params is listed in colinux-daemon.txt.

# The default kernel
kernel="..\..\coLinux\Cooperative Linux 0.7.8\vmlinux"

# File contains the root file system.
# Download and extract preconfigured file from SF "Images for 2.6".
cobd0="debian.squeeze.2gb.disk" 

# Swap device, should be an empty file with 128..512MB.
#cobd1="swap.512mb.disk"                  <- 주석처리함

# 설치시 사용할 디스크 설정
cobd2="C:\VM\COLINUX\IMAGES\Shared Folder\debian-6.0.0-i386-businesscard.iso"
cobd3="C:\VM\COLINUX\IMAGES\Shared Folder\squeeze.initrd.rmdrv" 


# Tell kernel the name of root device (mostly /dev/cobd0,
# /dev/cobd/0 on Gentoo)
# This parameter will be forward to Linux kernel.
#root=/dev/cobd0                                 
root=/dev/cobd3                              <- 설치시 root를 램드라이브로 설정

# Additional kernel parameters (ro = rootfs mount read only)
ro

# Initrd installs modules into the root file system.
# Need only on first boot.
initrd="..\..\coLinux\Cooperative Linux 0.7.8\initrd.gz"

# Maximal memory for linux guest
mem=128
#mem=256
#mem=512

# Select console size, default is 80x25
#cocon=120x40

# Slirp for internet connection (outgoing)
# Inside running coLinux configure eth0 with this static settings:
# ipaddress 10.0.2.15   broadcast  10.0.2.255   netmask 255.255.255.0
# gateway   10.0.2.2    nameserver 10.0.2.3
#eth0=slirp

# Tuntap as private network between guest and host on second linux device
#eth1=tuntap

# ------------------------------------------------------------------------------------
# coLinux에서 인터넷을 사용하기위해 3가지 방식중 하나를 사용 할수 있다.
# NDIS브릿지 방식이 제일 간단하고 빠르게 동작 하는듯 하나 현재 coLinux가 설치된
# Windows에서 coLinux로 ssh접속이 안된다.
# 외부에서 coLinux에 접근 하거나 coLinux에서 인터넷등의 사용은 전혀 문제없다.
# 아직 까지는 완벽하게 사용 가능한 방식은 tap방식임으로 tap방식을 쓴다.
# ------------------------------------------------------------------------------------
# 1. tap방식
# 이 방식을 사용할 경우 Windows의 네트웍환경에서 브릿지를 만들어 줘야 한다.
# coLinuxNet : TAP-Win32 이더넷아답터 이름
eth0=tuntap, coLinuxNet

# 2. NDIS 브릿지
# LocalArea2 : 실제 인터넷 연결되어 있는 이더넷 아답터 이름.
# pcap이나 windows에서 브릿지를 따로 안만들어 줘도 되는환경.
# 그러나 왜그런지 몰라도 coLinux가 설치된 Windows에서 ssh접속이 안된다.
#eth0=ndis-bridge,LocalArea2,00:ff:8d:a4:00:00
#eth0=ndis-bridge,LocalArea2
# 3. pcap 브릿지
# 이방식은 pcap을 설치해야 한다.
# coLinux에도 이더넷을 2개 설치해야한다.
# 원래는 이렇게만 하면 되어야 하나 coLinux가 설치된 Windows에서 ssh접속이 안된다.
# 여기서 Windows에서 브릿지를 만들어 주면 동작 하는듯 보임.
# 이중으로 브릿지를 만들어 주기에 별로 안좋은것 같음..
#eth0=tuntap, coLinuxNet
#eth1=pcap-bridge, LocalArea2
# LocalArea2 : 실제 인터넷 연결되어 있는 이더넷 아답터 이름.
#              그러나 아무 이름으로 해도 잘된다.
#              예를들어 abcd나 aaaaa나 asdf99등...


# Setup for serial device
#ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

# Run an application on colinux start (Sample Xming, a Xserver)
#exec0=C:\Programs\Xming\Xming.exe,":0 -clipboard -multiwindow -ac"

# 마운트
cofs0="C:\VM\COLINUX\IMAGES\DebianLenny\Shared\"





[설치과정] - 이미지 참고





[.conf파일 수정]
완료후 debian.squeeze.2gb.conf 파일 수정
 
#
# This is an example for a configuration file that can
# be passed to colinux-daemon in this manner:
#
#    colinux-daemon @example.conf
#
# Note that you can still prepend or append configuration and 
# boot parameters before and after '@', or you can use more 
# that one '@ to load several settings one after another.
#    colinux-daemon @example.conf @overrider.conf mem=32
#
# Full list of config params is listed in colinux-daemon.txt.

# The default kernel
kernel="..\..\coLinux\Cooperative Linux 0.7.8\vmlinux"

# File contains the root file system.
# Download and extract preconfigured file from SF "Images for 2.6".
cobd0="debian.squeeze.2gb.disk" 

# Swap device, should be an empty file with 128..512MB.
cobd1="swap.512mb.disk"                  <- 주석해제

# 설치시 사용할 디스크 설정
#cobd2="C:\VM\COLINUX\IMAGES\Shared Folder\debian-6.0.0-i386-businesscard.iso"          <-주석처리
#cobd3="C:\VM\COLINUX\IMAGES\Shared Folder\squeeze.initrd.rmdrv"           <- 주석처리


# Tell kernel the name of root device (mostly /dev/cobd0,
# /dev/cobd/0 on Gentoo)
# This parameter will be forward to Linux kernel.
root=/dev/cobd0                                <- 주석해제
#root=/dev/cobd3                              <- 주석처리

# Additional kernel parameters (ro = rootfs mount read only)
ro

# Initrd installs modules into the root file system.
# Need only on first boot.
initrd="..\..\coLinux\Cooperative Linux 0.7.8\initrd.gz"

# Maximal memory for linux guest
mem=128
#mem=256
#mem=512

# Select console size, default is 80x25
#cocon=120x40

# Slirp for internet connection (outgoing)
# Inside running coLinux configure eth0 with this static settings:
# ipaddress 10.0.2.15   broadcast  10.0.2.255   netmask 255.255.255.0
# gateway   10.0.2.2    nameserver 10.0.2.3
#eth0=slirp

# Tuntap as private network between guest and host on second linux device
#eth1=tuntap

# ------------------------------------------------------------------------------------
# coLinux에서 인터넷을 사용하기위해 3가지 방식중 하나를 사용 할수 있다.
# NDIS브릿지 방식이 제일 간단하고 빠르게 동작 하는듯 하나 현재 coLinux가 설치된
# Windows에서 coLinux로 ssh접속이 안된다.
# 외부에서 coLinux에 접근 하거나 coLinux에서 인터넷등의 사용은 전혀 문제없다.
# 아직 까지는 완벽하게 사용 가능한 방식은 tap방식임으로 tap방식을 쓴다.
# ------------------------------------------------------------------------------------
# 1. tap방식
# 이 방식을 사용할 경우 Windows의 네트웍환경에서 브릿지를 만들어 줘야 한다.
# coLinuxNet : TAP-Win32 이더넷아답터 이름
eth0=tuntap, coLinuxNet

# 2. NDIS 브릿지
# LocalArea2 : 실제 인터넷 연결되어 있는 이더넷 아답터 이름.
# pcap이나 windows에서 브릿지를 따로 안만들어 줘도 되는환경.
# 그러나 왜그런지 몰라도 coLinux가 설치된 Windows에서 ssh접속이 안된다.
#eth0=ndis-bridge,LocalArea2,00:ff:8d:a4:00:00
#eth0=ndis-bridge,LocalArea2
# 3. pcap 브릿지
# 이방식은 pcap을 설치해야 한다.
# coLinux에도 이더넷을 2개 설치해야한다.
# 원래는 이렇게만 하면 되어야 하나 coLinux가 설치된 Windows에서 ssh접속이 안된다.
# 여기서 Windows에서 브릿지를 만들어 주면 동작 하는듯 보임.
# 이중으로 브릿지를 만들어 주기에 별로 안좋은것 같음..
#eth0=tuntap, coLinuxNet
#eth1=pcap-bridge, LocalArea2
# LocalArea2 : 실제 인터넷 연결되어 있는 이더넷 아답터 이름.
#              그러나 아무 이름으로 해도 잘된다.
#              예를들어 abcd나 aaaaa나 asdf99등...


# Setup for serial device
#ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

# Run an application on colinux start (Sample Xming, a Xserver)
#exec0=C:\Programs\Xming\Xming.exe,":0 -clipboard -multiwindow -ac"

# 마운트
cofs0="C:\VM\COLINUX\IMAGES\DebianLenny\Shared\"






[재시작후 스왑 생성]
 
# mkswap /dev/cobd1
Setting up swapspace version 1, size = 524312 KiB
no label, UUID=7965d286-b7ef-4d74-a880-6bf062b909da

# swapon /dev/cobd1
Adding 524308k swap on /dev/cobd1.  Priority:-1 extents:1 across:524308k




[스왑등록]
 
# vi /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'vol_id --uuid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# / was on /dev/cobd0 during installation
UUID=eba280cf-6ef5-4b6e-b228-df1af6e56ee2 /               ext3    errors=remount-ro 0       1
/dev/cobd2      /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/cobd1      none            swap            sw      0       0                    <- swap를 등록



작업 완료.
재부팅후 사용하면된다.
 
# reboot


















[기타 참고 사항]
부팅시 "Setting up console font and keymap..."와 같은 메세지가 출력되면서 수초에서 수십초간 지연되는 경우 아래처럼 한다.

 
# vi /etc/init.d/console-setup

#!/bin/sh
### BEGIN INIT INFO
# Provides:          console-setup
# Required-Start:    $remote_fs
# Required-Stop:
# Should-Start:      console-screen kbd
# Default-Start:     S
# Default-Stop:
# X-Interactive:     true
# Short-Description: Set console font and keymap
### END INIT INFO

set -e

uname -r | grep -qe "-co-" && exit 0                          <- 추가

# This script is used jointly by console-setup and console-setup-mini.
# It belongs to keyboard-configuration because it is forbidden two
# different packages to share common configuration file.

test -f /bin/setupcon || exit 0
.
.
.









부팅시 starting MTA: 에서 지연되는 현상이 발생할때...
# mv /etc/rc2.d/SXXexim4 /etc/rc2.d/KXXexim4