본 글의 최신내용은 "http://www.hwport.com/wiki.php/SimpleHowtoCVS" 에서 보실수 있습니다.


간략한 CVS사용법 정리

개요

CVS 의 기본적인 사용법을 간단히 정리하고 branch 하는 방법에 대하여 정리해봅니다.

사용방법

  • Branch 사용에 앞서서 알아야 할 정리사항
    1. Login
      cvs -d:pserver:[<user_id>[:<password>]@]<host>[:<port>]/<repository_root> login
      
    2. Import
      cvs import -I ! <module_name> <vender_tag> <release_tag>
      
    3. Check out
      cvs co [-r <revision or tag>] [-d <directory>] <module_name>
      
    4. Update
      cvs update [-r <revision or tag>]
      
    5. Commit
      cvs commit [-m "<comment>"]
      
    6. Create release branch
      cvs rtag -b <branch_tag> <module_name>
      
    7. Create tag
      cvs tag <tag>
      
    8. Merge branch
      cvs update [-j <revision> [...]]
      
  • 만약 myapp 라는 프로젝트가 개발이 되고 있고 이 프로젝트는 CVS repository root 가 "/cvsroot" 라고 가정하고 설명합니다. 이제 myapp 의 소스는 ${HOME}/project/myapp 라는 디렉토리에 있습니다.
    • 첫번째: CVS login (CVS server 는 "pserver" 방식이고 ServerIP는 "192.168.0.2" 이며 계정명은 "test" 이며 암호는 "1234" 일때)
      • 방식 #1 (이 방법을 기준으로 다음 절차를 설명할것입니다.)
        export CVSROOT=:pserver:test:1234@192.168.0.2:/cvsroot
        cvs login
        
      • 방식 #2
        cvs -d:pserver:test:1234@192.168.0.2:/cvsroot login
        
    • 두번째: CVS 에 첫 등록하기 (CVS에 "mysource" module 로 등록하고 vender_tag 는 "mycompany" 라고 하고 release_tag 는 "start"라고 하겠습니다.)
      cd ${HOME}/project/mzapp
      cvs import -I ! mysource mycompany start
      cd ..
      mv myapp myapp_org
      cvs co -d myapp mysource
      
    • 세번째: CVS release branch 만들기 (이때 branch_tag 는 "release_mysource" 라고 하겠습니다.)
      cvs rtag -b release_myapp mysource
      
    • 네번째: 새로운 release branch로부터 개발하기 (이때 이 새로운 branch를 "${HOME}/project/release_myapp" 라는 디렉토리 받는다고 가정)
      • 방법 #1 (새로운 branch를 독립적으로 디렉토리를 유지하고자 할때, 이 방법을 기준으로 다음절차를 설명할것입니다.)
        cd ${HOME}/project
        cvs co -r release_myapp -d release_myapp mysource
        
      • 방법 #2-1 (branch를 현재 local CVS 저장소에 적용하는 방법)
        cd ${HOME}/project/myapp
        cvs update -r release_myapp
        
      • 방법 #2-2 (#2-1 의 branch 적용된것을 원래의 tag로 전환하는 방법)
        cd ${HOME}/project/myapp
        cvs update -A
        
    • 다섯번째: Branch된 것을 Main 에 합류시키기 (이 경우 branch된 "release_myapp" 를 정합하게 할것입니다.)
      cd ${HOME}/project/myapp
      cvs update
      cvs commit
      cvs update -j release_myapp
      cvs commit

크리에이티브 커먼즈 라이센스
Creative Commons License
2010/08/26 00:34 2010/08/26 00:34
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/575

댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/575

본 글의 최신내용은 "http://www.hwport.com/wiki.php/jffs2_cleanmarker_message" 에서 보실수 있습니다.


JFFS2 파일시스템의 CLEANMARKER 메세지에 대하여

JFFS2 파일시스템의 CLEANMARKER의 역할

JFFS2 파일시스템은 노드(Node)의 연속으로 배열된 Log-structured 방식의 파일시스템으로 설계되어 있습니다. 하나의 노드는 다음과 같은 형식으로 구성됩니다.
1514131211109876543210
Magic Bitmask (=0x1985)Node Type
Total Node Length
Node Header CRC

여기서 Node Type의 값이 0x2003인 경우가 CLEANMARKER로 정의됩니다. CLEANMARKER는 각각의 Erase block의 선두에 만들어지게 되는데 이것은 Erase block이 유효한가를 나타냅니다. Flash의 Erase block의 선두가 CLEANMARKER가 아니고 하나의 bit라도 0인 경우는 Bad block으로 간주하여 처리됩니다. Flash에 jffs2 파일시스템을 write 시에 Erase block이 모두 0FFH로 채우거나(즉, 값이 0인 bit가 없는 상태) CLEANMARKER를 Erase block의 선두에 저장해야 합니다. 만약 Bad block인 경우 jffs2 image는 그 block크기만큼 Shift되어 저장하게 되며 Bad block을 자연스럽게 인지할수 있게 됩니다.

이러한 CLEANMARKER는 JFFS1에서는 없는 사양이며 JFFS2에서 제시된 사양입니다.

문제해결

다음과 같은 메세지를 보는 경우는 실제 Flash의 Erase block size와 mkfs.jffs2를 이용해서 주어진 erase block size의 크기가 일치하지 않아서 발생합니다.
CLEANMARKER node found at 0x%08x, not first node in block (0x%08x)


예를 들어서 Erase block size를 8KBytes로 가정하고 mkfs.jffs2로 image를 만든었다면 다음과 같이 만들게 될겁니다.
mkfs.jffs2 -o myroot.jffs2 -e 8192 -d <rootfsEntry>


이것을 실제 Erase block size 가 64KBytes 인 Flash에 굽게 되면 다음과 같은 메세지가 나옵니다. 여기서 중요한것은 일정한 간격으로 Offset이 나오다가 실제 Erase block의 시작점에서는 해당 메세지가 없다는 점입니다. 아래의 경우는 Offset 00010000H 간격으로 해당 메세지가 없는것을 알수 있고 이는 곧 64KBytes 단위의 Erase block size 이어야 한다는 것을 알수 있습니다.
Empty flash at 0x00000ffc ends at 0x00001000
CLEANMARKER node found at 0x00001000, not first node in block (0x00000000)
Empty flash at 0x00001ffc ends at 0x00002000
CLEANMARKER node found at 0x00002000, not first node in block (0x00000000)
Empty flash at 0x00002f58 ends at 0x00003000
CLEANMARKER node found at 0x00003000, not first node in block (0x00000000)
Empty flash at 0x00003f70 ends at 0x00004000
CLEANMARKER node found at 0x00004000, not first node in block (0x00000000)
Empty flash at 0x00004f70 ends at 0x00005000
CLEANMARKER node found at 0x00005000, not first node in block (0x00000000)
Empty flash at 0x00005ffc ends at 0x00006000
CLEANMARKER node found at 0x00006000, not first node in block (0x00000000)
Empty flash at 0x00006ffc ends at 0x00007000
CLEANMARKER node found at 0x00007000, not first node in block (0x00000000)
Empty flash at 0x00007ffc ends at 0x00008000
CLEANMARKER node found at 0x00008000, not first node in block (0x00000000)
Empty flash at 0x00008ffc ends at 0x00009000
CLEANMARKER node found at 0x00009000, not first node in block (0x00000000)
Empty flash at 0x00009ffc ends at 0x0000a000
CLEANMARKER node found at 0x0000a000, not first node in block (0x00000000)
Empty flash at 0x0000affc ends at 0x0000b000
CLEANMARKER node found at 0x0000b000, not first node in block (0x00000000)
Empty flash at 0x0000bffc ends at 0x0000c000
CLEANMARKER node found at 0x0000c000, not first node in block (0x00000000)
Empty flash at 0x0000cffc ends at 0x0000d000
CLEANMARKER node found at 0x0000d000, not first node in block (0x00000000)
Empty flash at 0x0000dffc ends at 0x0000e000
CLEANMARKER node found at 0x0000e000, not first node in block (0x00000000)
Empty flash at 0x0000effc ends at 0x0000f000
CLEANMARKER node found at 0x0000f000, not first node in block (0x00000000)
Empty flash at 0x00010ffc ends at 0x00011000

/* 이 시점에서 Offset 00010000H에 대한 메세지가 안보인다는 점이 우리가 인지해야 하는 부분입니다. */

CLEANMARKER node found at 0x00011000, not first node in block (0x00010000)
Empty flash at 0x00011f90 ends at 0x00012000
CLEANMARKER node found at 0x00012000, not first node in block (0x00010000)
Empty flash at 0x00012f40 ends at 0x00013000
CLEANMARKER node found at 0x00013000, not first node in block (0x00010000)
Empty flash at 0x00013f64 ends at 0x00014000
CLEANMARKER node found at 0x00014000, not first node in block (0x00010000)
Empty flash at 0x00014ffc ends at 0x00015000
CLEANMARKER node found at 0x00015000, not first node in block (0x00010000)
Empty flash at 0x00015ffc ends at 0x00016000


그래서 결국은 mkfs.jffs2는 다음과 같이 사용되어야 맞게 됩니다.
mkfs.jffs2 -o myroot.jffs2 -s 4096 -e 65536 -d <rootfsEntry>


참고자료



크리에이티브 커먼즈 라이센스
Creative Commons License
2010/08/26 00:30 2010/08/26 00:30
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/574

댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/574


본 글의 최신내용은 "http://www.hwport.com/wiki.php/UsingBOOTP" 에서 보실수 있습니다.




BOOTP를 이용한 원격부팅


시작하기전에

필자는 서버와 넷북을 이용하는데 넷북에는 ODD장치가 없습니다. 이 경우 넷북에 OS한번 설치하려면 매우 복잡해집니다. 서버는 있으니 서버로부터 원격 부팅을 할수 있으면 좋겠다는 생각을 많이 했었는데 그 해답이 있었습니다. 바로 BOOTP가 되겠습니다. 이제 PXE를 지원하는 BIOS를 가진 컴퓨터는 모두 원격부팅할수 있게 환경을 구축해보려고 합니다.

Kernel 설정

Gentoo Linux환경에서 Gentoo LiveCD를 이용한 원격 부팅구축

설명의 편의를 위해서 다음과 같은 환경변수를 사용하겠습니다.
export PATH_LIVECD="/mnt/cdrom"
export PATH_TEMP="/tftpboot/tmp"
export PATH_TFTPROOT="/tftpboot"
  • 작업에 필요한 (임시)디렉토리들을 만듭니다.
    mkdir -p ${PATH_LIVECD}
    mkdir -p ${PATH_TEMP}
    mkdir -p ${PATH_TEMP}/gentoo.init.dir
    mkdir -p ${PATH_TFTPROOT}
    mkdir -p ${PATH_TFTPROOT}/netboot
    mkdir -p ${PATH_TFTPROOT}/netboot/pxelinux.cfg
    mkdir -p ${PATH_TFTPROOT}/netboot/gentoo
    
  • DHCP server를 설치합니다.
    emerge net-misc/dhcp
    
    option domain-name "example.com";
    option domain-name-servers 168.126.63.1, 168.126.63.2, 210.94.0.7, 164.124.101.2, 203.248.252.2, 210.181.1.24, 203.255.112.34;
    
    default-lease-time 600;
    max-lease-time 7200;
    
    # <<< 이 부분 추가 >>>
    allow booting;
    allow bootp;
    
    ddns-update-style none;
    log-facility local7;
    
    subnet 10.0.0.0 netmask 255.0.0.0 {
        option broadcast-address 10.255.255.255;
        option routers 10.0.0.1;
    
    #   <<< Booting 에 이용할 pxelinux.0의 위치 및 TFTP server IP주소 설정 >>>
        filename "netboot/pxelinux.0";
        next-server 10.0.0.1;
    
        pool {
            range 10.0.0.100 10.0.0.200;
            allow unknown-clients;
          }
    
    #    group {
    #        host bootp_client {
    #            hardware ethernet XX:XX:XX:XX:XX:XX;
    #            fixed-address 10.0.0.200;
    #        }
    #    }
    }
    
  • TFTP server를 설치합니다. 이때 주의할것이 netkit-tftp package는 제대로 지원하지 못하므로 tftp-hpa package를 설치하셔야 합니다. 그리고 방화벽이 있는 경우 "/etc/conf.d/in.tftpd"에서 적절한 port대역을 설정해주고 방화벽에서 해당 port대역을 udp에 대하여 허용하도록 해주셔야 합니다.
    emerge net-ftp/tftp-hpa
    
  • syslinux package를 설치하고 필요한 파일들만 "${PATH_TFTPROOT}/netboot" 하위에 복사합니다.
    emerge sys-boot/syslinux
    cp /usr/share/syslinux/pxelinux.0 ${PATH_TFTPROOT}/netboot
    cp /usr/share/syslinux/memdisk ${PATH_TFTPROOT}/netboot
    
  • Gentoo minimal install CD image를 다운로드 받습니다.
  • 다운로드 받은 Gentoo minimal install CD image를 "${PATH_LIVECD}"에 mount 합니다.
    mount -o loop install-XX-minimal-XXXXXXXX.iso ${PATH_LIVECD}
    
  • "${PATH_LIVECD}/isolinux/gentoo" 커널파일을 "${PATH_TFTPROOT}/netboot/gentoo"에 복사합니다.
    cp ${PATH_LIVECD}/isolinux/gentoo ${PATH_TFTPROOT}/netboot/gentoo
    
  • gentoo.igz 파일을 임시디렉토리 "${PATH_TEMP}/gentoo.init.dir"에 압축해제합니다.
    cd ${PATH_TEMP}/gentoo.init.dir
    gunzip -c ${PATH_LIVECD}/isolinux/gentoo.igz | cpio -idv
    
  • "${PATH_TEMP}/gentoo.init.dir/mnt/cdrom"디렉토리를 만들고 그 밑에 "image.squashfs"파일을 복사합니다.
    mkdir -p ${PATH_TEMP}/gentoo.init.dir/mnt/cdrom
    cp ${PATH_LIVECD}/isolinux/image.squashfs ${PATH_TEMP}/gentoo.init.dir/mnt/cdrom
    
  • "${PATH_TEMP}/gentoo.init.dir/init" 파일을 "${PATH_TEMP}/gentoo.init.dir/init.org"로 백업합니다.
    cp ${PATH_TEMP}/gentoo.init.dir/init ${PATH_TEMP}/gentoo.init.dir/init.org
    
  • "${PATH_TEMP}/gentoo.init.dir/init" 파일에서 다음부분을 찾아서 수정합니다.
    -- if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ]
    ++ if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ] && [ "${REAL_ROOT}" != "/" ]
    
    -- elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ]
    ++ elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ] || [ "${REAL_ROOT}" = "/" ]
    
    -- cache_cd_contents
    
    -- mount -t squashfs -o loop,ro ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/livecd
    ++ mount -t squashfs -o loop,ro /mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/livecd
    
  • "${PATH_TEMP}/gentoo.init.dir"을 다시 압축하고 "${PATH_TFTPROOT}/netboot/gentoo"로 복사합니다.
    cd ${PATH_TEMP}/gentoo.init.dir
    find . -print | cpio -o -H newc |gzip -9 -c - > ${PATH_TFTPROOT}/netboot/gentoo/initrd.gz
    
  • "${TFTPROOT}/netboot/pxelinux.cfg/default"으로 다음의 내용을 편집하여 만듭니다.
    default gentoo_x86
    prompt 1
    timeout 600
    
    label gentoo_x86
      kernel gentoo/gentoo
      append initrd=gentoo/initrd.gz ip=dhcp root=/dev/ram0 init=/linuxrc loop=/image.squashfs looptype=squashfs cdroot=1 real_root=/ vga=normal dokeymap
    label local
      LOCALBOOT 0
  • 크리에이티브 커먼즈 라이센스
    Creative Commons License
    2010/08/26 00:25 2010/08/26 00:25
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/573

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/573


    본 글의 최신내용은 "http://www.hwport.com/wiki.php/STLinuxInstall" 에서 볼수 있습니다.




    STLinux 개발환경구축


    1.1 시작하기전에

    STLinux의 개발환경은 RPM(RedHat Package Manager)파일형태로 배포됩니다. 우선 우리는 이것을 설치할수 있는 리눅스(Linux) 배포판이 설치된 인터넷 연결이 가능한 Host PC 한대가 필요합니다.

    일반적으로 아래의 32bit 리눅스(Linux) 배포판들은 인터넷으로부터 쉽게 다운로드 받아서 설치할수 있으며 STLinux의 RPM(RedHat Package Manager)파일들을 무난하게 설치하여 사용할수 있다고 할수 있습니다.배포판 설치시에 방화벽이나 SELinux(Security Enhanced Linux) 기능은 비활성화 하거나 이를 잘 다룰수 있어야 합니다.

    본 문서는 "RedHat Enterprise Linux Server version 5.3"을 Host PC에 설치하고 STLinux v2.3 을 설치하는 과정을 다루는 것을 기준으로 합니다. (참고: RedHat Enterprise Linux 설치)

    보다 자세한 정보를 원하신다면 [http]STMicroelectronics[]사에서 운영하는 [http]STLinux 홈페이지[]를 방문하세요.

    1.2 STLinux 배포본의 설치

    일단 리눅스(Linux)가 설치된 Host PC 에는 STLinux 배포본을 설치해야 합니다. STLinux 배포본은 [ftp]ftp://ftp.stlinux.com/pub/stlinux/[] 에서 최근 버전을 다운로드 받을수 있습니다.

    STLinux 배포본을 리눅스(Linux)가 설치된 Host PC 에 설치합니다. 설치과정에서는 Host PC 의 root계정으로 로그인(Login)하여 진행해야 합니다. 다음과 같은 순서로 다운로드 및 설치를 진행합니다.

  • 리눅스가 설치된 Host PC 의 root 계정으로 로그인(Login) 합니다.
  • 만약 이전에 설치한 STLinux 배포본이 있다면 이를 Uninstall합니다. (처음 설치하시는 경우라면 이 과정은 생략하셔도 됩니다.)
    [root@STLinux ~]# rpm –e –nodeps `rpm –qa | grep stlinux23`
    [root@STLinux ~]# rm –rf /opt/STM/STLinux-2.3
    
  • 다운로드 받은 파일을 저장할 디렉토리 "~/download"를 만들고 STLinux의 iso 이미지 파일을 다운로드 받습니다.
    [root@STLinux ~]# mkdir -p ~/download
    [root@STLinux ~]# wget ftp://ftp.stlinux.com/pub/stlinux/2.3/iso/STLinux-2.3-sh4-03-11-07.iso -P ~/download/
    
  • "/mnt/cdrom" 디렉토리를 만들고 해당 디렉토리에 다운로드 받은 STLinux의 iso 이미지 파일을 마운트(mount) 하고 "/mnt/cdrom"으로 이동하여 "./install all-sh4-glibc"를 실행하여 설치합니다. (만약 uclibc를 사용하시려고 계획하셨다면 "./install all-sh4-uclibc"를 실행하여 설치를 진행하시면 됩니다.
    [root@STLinux ~]# mkdir -p /mnt/cdrom
    [root@STLinux ~]# mount -o loop,ro -t iso9660 -r ~/download/STLinux-2.3-sh4-03-11-07.iso /mnt/cdrom
    [root@STLinux ~]# cd /mnt/cdrom
    [root@STLinux cdrom]# ./install all-sh4-glibc
    
  • STAPI관련 패키지(Package)도 다운로드 받기 위해서 stmyum 의 설정파일에 해당 정보를 추가하여야합니다. 아래의 내용을 "/opt/STM/STLinux-2.3/host/etc/yum.conf"파일에 추가합니다. (그 밖에 필요한 패키지들을 이러한 식으로 추가설정할수 있습니다.)
    [STLinux_Distribution_STAPI]
    name=STLinux Distribution 2.3 STAPI
    baseurl=http://www.stlinux.com/pub/stlinux/2.3/stapi/RPMS
    gpgkey=http://www.stlinux.com/pub/stlinux/2.3/STLinux/gpg_key
    gpgcheck=0
    
  • STLinux 전체를 업데이트(Update)합니다. 단, Host PC는 인터넷 연결이 가능한 상태에 있어야 합니다. (이 과정은 인터넷 속도에 따라서 상당히 오래 걸릴수도 있습니다.)
    [root@STLinux cdrom]# /opt/STM/STLinux-2.3/host/bin/stmyum update
    ....
    Transaction Summary
    =============================================================================
    Install
    XXX Package(s)
    Update
    XXX Package(s)
    Remove
    XXX Package(s)
    Total download size: XXX M
    Is this ok [y/N]: y
    ....
    
    "stmyum update"을 하면 이전에 작업했던 소스들과 버전호환성 문제로 빌드가 안되거나 대규모 수정이 필요한 상황이 있을수 있습니다. 이 경우 해당 문제가 되는 패키지를 Migration 해야 할수도 있습니다.

    확인된 문제사항은 다음과 같습니다.
    • STLinux v2.3 에서 STLinux v2.2의 u-boot버전이 빌드오류가 발생합니다.
    • u-boot 과 Linux kernel이 시점적으로 비슷한 시기의 버전이 아닌 경우 헤더호환문제가 있는 경우가 있습니다.
    • gcc 4.2.4-51이상의 버전에서 u-boot-sh4-1.3.1_stm23_0043 이 빌드되지 않습니다.
  • 설치된 STLinux의 경로입력을 간단히 하기 위해서 PATH 환경변수에 경로를 추가합니다.
    [root@STLinux ~]# echo "export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:\${PATH}" >> ~/.bash_profile
    [root@STLinux ~]# echo "export PATH=/opt/STM/STLinux-2.3/host/bin:\${PATH}" >> ~/.bash_profile
    [root@STLinux ~]# source ~/.bash_profile
    
    이제 기본적인 개발환경의 설치가 끝났습니다.

    지금까지의 설치과정에서 보다시피 STLinux는 편리한 패키지(Package) 관리툴을 제공합니다. 직접 [ftp]ftp://ftp.stlinux.com/pub/stlinux/[] 에서 RPM(RedHat Package Manager)파일을 다운로드 받아서 설치할수도 있으나 stmyum 이라는 유틸리티를 통해서 보다 편리하게 설치 및 업데이트(Update)를 할 수가 있습니다.
  • rpm 유틸리티의 기본 사용법
    • 패키지(Package) 설치
      rpm –ivh <rpm file>
      
    • 설치된 패키지(Package) 업데이트(Update)
      rpm –Uvh <rpm file>
      
    • 패키지(Package) 삭제하기
      rpm –e <package name>
      
    • 설치된 패키지(Package) 목록 보기
      rpm –qa
      
  • stmyum 유틸리티 기본 사용법
    • 패키지(Package) 설치
      stmyum install <package name>
      
    • 설치된 패키지(Package) 업데이트(Update)
      stmyum update <package name>
      
    • 패키지(Package) 삭제하기
      stmyum remove <package name>
      
    • 설치된 패키지(Package) 목록 보기
      stmyum list
      
  • 1.3 U-boot bootloader build

    부트로더(Boot loader)의 소스는 "/opt/STM/STLinux-2.3/devkit/sources/u-boot/"디렉토리 밑에 있습니다. 이것을 그대로 해당 디렉토리에서 빌드 및 수정작업을 하기보다는 자신의 작업디렉토리로 복사해서 작업하는게 좋습니다.

  • 다음과 같이 u-boot source를 자신의 작업디렉토리로 복사합니다. (본 문서에서는 작업디렉토리를 "~/project/stprj"로 설정하였고 version 1.3.1_stm23_0044을 기준으로 설명합니다.)
    [root@STLinux ~]# mkdir –p ~/project/stprj
    [root@STLinux ~]# cp –a /opt/STM/STLinux-2.3/devkit/sources/u-boot/u-boot-sh4-1.3.1_stm23_0044 ~/project/stprj/
    
  • 자신의 보드(Board)에 맞는 빌드설정을 하기 위해서 기존에 만들어져 있는 프로파일(Profile)로부터 새로운 프로파일(Profile)로 복사합니다. (본 문서에서는 프로파일 "5197cab"을 기준으로 새로운 프로파일인 "stprj"를 만드는것으로 설명합니다.)
    [root@STLinux ~]# cd ~/projtect/stprj/u-boot-sh4-1.3.1_stm23_0044/
    [root@STLinux u-boot-sh4-1.3.1_stm23_0044]# ls ./board/
    5197cab
    a3000
    adder
    .
    .
    .
    mb411
    mb442
    mb448
    mb519
    mb618
    mb628
    mb671
    mb680
    mb704
    [root@STLinux u-boot-sh4-1.3.1_stm23_0044]# cp -a ./board/5197cab ./board/stprj
    [root@STLinux u-boot-sh4-1.3.1_stm23_0044]# mv ./board/stprj/init-5197cab.S ./board/stprj/init-stprj.S
    [root@STLinux u-boot-sh4-1.3.1_stm23_0044]# mv ./board/stprj/5197cab.c ./board/stprj/stprj.c
    [root@STLinux u-boot-sh4-1.3.1_stm23_0044]# cp ./include/configs/5197cab.h ./include/configs/stprj.h
    
  • Text 편집기(예: vim)로 u-boot의 Makefile을 편집하는데 5197cab_config 부분을 찾아서 참고하면서 그 밑에 아래와 같이 추가합니다.
    5197cab_config \
    5197cabse_config :              unconfig
            @ >include/config.h
            @echo "#define CONFIG_SH_STX5197   1" >>include/config.h
            @echo "#define CONFIG_SH_5197CAB   1" >>include/config.h
            $(if $(findstring se,$@), \
            @echo "#define CONFIG_SH_SE_MODE   1" >>include/config.h)
            $(if $(findstring se,$@), \
            @echo "TEXT_BASE = 0x83F00000" >$(obj)board/5197cab/config.tmp)
            @./mkconfig -a 5197cab sh sh 5197cab "" stx5197
    
    ###########################################
    ### 5197cab_config를 참고하여 새로 추가한 부분
    ###########################################
    stprj_config \
    stprjse_config :              unconfig
            @ >include/config.h
            @echo "#define CONFIG_SH_STX5197   1" >>include/config.h
            @echo "#define CONFIG_SH_STPRJ     1" >>include/config.h
            $(if $(findstring se,$@), \
            @echo "#define CONFIG_SH_SE_MODE   1" >>include/config.h)
            $(if $(findstring se,$@), \
            @echo "TEXT_BASE = 0x83F00000" >$(obj)board/stprj/config.tmp)
            @./mkconfig -a stprj sh sh stprj "" stx5197
    
  • "./board/stprj/config.mk"의 TEXT_BASE의 값을 수정해야 하는데 이것은 자신의 보드 (Board)에 따라서 값이 달라질수 있습니다. 이러한 TEXT_BASE의 값을 결정하는 공식은 다음과 같은 계산에 의해서 결정해야 하는데 이는 결국 SDRAM의 마지막 1Mbytes 영역에 u-boot을 올려서 실행하겠다는 의도로 나온 계산이라고 보시면 틀리지 않습니다.
    TEXT_BASE = <SDRAM의 base주소> + (<SDRAM의 size> - 1Mbytes)
    
    본 문서에서는 SDRAM의 base주소는 84000000H, SDRAM의 size는 64Mbytes를 기준으로 다음과 같이 "./board/stprj/config.mk"를 수정하였습니다.
    #
    # stprj board
    #
    # Installs at SDRAM BASE + 63M in cache region
    TEXT_BASE = 0x87F00000
    PLATFORM_LDFLAGS +=
    
  • 자신의 Board에서 만약 Flash chip의 write기능을 사용하기 위한 Vpp 전압을 제어하는 부분이 구현되어야 하는 경우라면 소스파일인 "./board/stprj/stprj.c"에 flashWriteEnable 및 flashWriteDisable함수에 구현해 해당 Vpp제어부분을 적절하게 구현해 넣어야 합니다.
  • 자신의보드에 맞는 설정을 하기 위해서 헤더파일인 "./include/configs/stprj.h"를 수정합니다.
  • "./include/asm-sh/io.h"에 CONFIG_SH_STPRJ에 대한 부분을 추가합니다.
    #if defined(CONFIG_SH_MB411) || \
            defined(CONFIG_SH_MB442) || \
            defined(CONFIG_SH_MB448) || \
            defined(CONFIG_SH_HMS1) || \
            defined(CONFIG_SH_MB519) || \
            defined(CONFIG_SH_MB618) || \
            defined(CONFIG_SH_MB628) || \
            defined(CONFIG_SH_MB671) || \
            defined(CONFIG_SH_MB680) || \
            defined(CONFIG_SH_PDK7105) || \
            defined(CONFIG_SH_IPIDTV7105) || \
            defined(CONFIG_SH_MB704) || \
            defined(CONFIG_SH_5197CAB) || \
            defined(CONFIG_SH_CB101) || \
            defined(CONFIG_SH_CB102) || \
            defined(CONFIG_SH_STPRJ)
    # include "asm/io_stb1eval.h"
    #else
    # error "What system is this?"
    #endif
    
  • U-boot 를 빌드합니다.
    [root@STLinux
    [root@STLinux
    [root@STLinux
    [root@STLinux
    ~]# cd ~/project/stprj/u-boot-sh4-1.3.1_stm23_0044/
    u-boot-sh4-1.3.1_stm23_0044]# make mrproper
    u-boot-sh4-1.3.1_stm23_0044]# make stprj_config
    u-boot-sh4-1.3.1_stm23_0044]# make
    
    빌드가 완료되면 u-boot, u-boot.bin, u-boot.map, u-boot.srec 가 생성됩니다. 여기서 우리가 flash에 write하게 될 파일은 u-boot.bin이며 GDB로 load하는 것은 ELF포맷인 u-boot파일이 사용됩니다.
  • U-boot를 stprj board 에 flash로 write 하기 위해서 sh4-linux-gdb를 통해서 u-boot을 실행합니다. stprj board는 “ST Micro Connect”에 연결되어 있어야 하고 board내의
  • Serial console도 볼수 있도록 미리 준비해주어야 합니다. Board마다 접속하는 profile이름이 다르므로 이 부분은 각자 해결하셔야 할겁니다. (이 문서에서는 “ST Micro Connect”의 IP를 192.168.33.2로 설정하였다고 가정하고 작성되었습니다.)
    [root@STLinux u-boot-sh4-1.3.1_stm23_0044]# sh4-linux-gdb ./u-boot
    GNU gdb STMicroelectronics/Linux Base 6.8-41 [build Aug 3 2009]
    Copyright (C) 2008 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law. Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "--host=i686-pc-linux-gnu --target=sh4-linux"...
    (gdb) 5197cabbypass 192.168.33.2
    The target is assumed to be little endian
    0xa0000000 in ?? ()
    (gdb) load
    Loading section .text, size 0x1195c lma 0x87f00000
    Loading section .rodata, size 0x750 lma 0x87f1195c
    Loading section .rodata.str1.4, size 0x3e74 lma 0x87f120ac
    Loading section .data, size 0xb50 lma 0x87f15f20
    Loading section .u_boot_cmd, size 0x4b4 lma 0x87f16a70
    Start address 0x87f00000, load size 93988
    Transfer rate: 236 KB/sec, 18797 bytes/write.
    (gdb) compare-sections
    Section .text, range 0x87f00000 -- 0x87f1195c: matched.
    Section .rodata, range 0x87f1195c -- 0x87f120ac: matched.
    Section .rodata.str1.4, range 0x87f120ac -- 0x87f15f20: matched.
    Section .data, range 0x87f15f20 -- 0x87f16a70: matched.
    Section .u_boot_cmd, range 0x87f16a70 -- 0x87f16f24: matched.
    (gdb) continue
    Continuing.
    
    GDB명령 compare-sections에서 matched로 나와야만 정상적인 실행이 됩니다. 마지막에 "Continuing." 메시지가 나온후 compare-sections가 matched가 아니면 다시 Ctrl-C키를 누른후 load명령부터 다시 수행해보시면 matched라고 될때가 있습니다. 이때 Serial console상테 보면 u-boot의 부트메세지가 정상적으로 출력되는 것을 보실수 있습니다. Serial console로 아무키나 전송하면 프롬프트로 진입하게 됩니다.
    U-Boot 1.3.1 (Aug 20 2009 - 18:16:28) - stm23_0044
    DRAM: 64 MiB
    NOR:
    8 MiB
    *** Warning - bad CRC, using default environment
    In:
    serial
    Out: serial
    Err: serial
    Hit any key to stop autoboot: 15
    stprj>
    
    이제 빌드된 u-boot.bin을 serial로 전송하여 flash에 write 합니다. (이때 Serial console을 통해서 Ymodem으로 파일을 전송해야 되므로 Serial console terminal 프로그램이 Ymodem을 지원해야 합니다. 예를 들어서 SecureCRT같은 Terminal 프로그램이 Ymodem을 지원합니다.)
    stprj> run updateboot
    Un-Protect Flash Sectors 0-1 in Bank # 1
    .. done
    Erase Flash Sectors 0-1 in Bank # 1
    .. done
    ## Ready for binary (ymodem) download to 0x84000000 at 115200 bps...
    CCCC
    Starting ymodem transfer. Press Ctrl+C to cancel.
    Transferring u-boot.bin...
    100%
    91 KB
    6 KB/s 00:00:15
    0 Errors
    xyzModem - CRC mode, 737(SOH)/0(STX)/0(CAN) packets, 6 retries
    ## Total Size
    = 0x00016f24 = 93988 Bytes
    Copy to Flash
    ........ done
    Protect Flash Sectors 0-1 in Bank # 1
    .. done
    stprj>
    

    1.4 참고자료

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2010/08/26 00:21 2010/08/26 00:21
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/572

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/572

    http://www.hwport.com/wiki.php/LinuxBootSequence 으로 내용이 이동되었습니다.

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2009/07/25 12:11 2009/07/25 12:11
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/526

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/526

    http://www.hwport.com/wiki.php/RedHatEnterpriseLinuxInstall 으로 글을 옮겼습니다.


    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2009/07/25 00:47 2009/07/25 00:47
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/525

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/525

    Linux 에서 특정 시간동안 HDD 접근을 하지 않았을때 HDD 모터를 끄는 기능을 사용하고 싶은 생각 누구나 한번쯤 해봤을겁니다.
    전기 절약적인 차원도 있고 HDD수명 연장의 차원에서도 상당히 유용한 기능이겠죠.

    방법은 간단합니다.
    hdparm 명령의 "-S" 옵션을 사용하면 원하는 standby mode를 사용할수 있습니다.

    ----

    Gentoo linux 배포판 기준으로 "/etc/conf.d/hdparm" 파일을 열어서 간단히 예를 들자면
    코드:
    all_args="-S120"

    와 같은식으로 추가해주고
    코드:
    rc-update add hdparm boot

    로 부팅시마다 수행하도록 해주면
    10분동안 사용하지 않으면 알아서 spindown 됩니다.

    즉, hdparm 명령어의 "-S" 옵션이 그러한 기능을 합니다. 여기서 "-S" 옵션에 주어지는 값의 시간단위는 5초단위 입니다.
    즉,
    코드:
    hdparm -S1 /dev/hda

    과 같이 한다면 hda 는 5초간 사용하지 않으면 자동으로 spindown 됩니다.
    당연히 그냥 hda 접근하면 알아서 동작합니다.

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/06/02 00:45 2007/06/02 00:45
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/176

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/176

    한글파일명이 들어간 zip 압축파일을 Linux에서 unzip 으로 압축을 풀면 한글이 깨져서 보이는 경우가 있습니다. 거의 대부분의 Linux 시스템에서 이러한 현상이 나옵니다. 하지만 unzip 의 버그는 아니고 Linux 시스템의 code page 설정이 일치하지 않아서 나오는 현상입니다.

    unzip 은 압축파일을 풀면서 파일명을 복원할때 Ext_ASCII_TO_Native 함수로 파일명에 변환을 하게 됩니다. 문제는 이변환과정을 거치지 않아야 한글파일명이 보이게 되는 시스템이 상당히 많다는 점입니다.

    이 경우에 어찌되었건 해결을 해야 되는데 소스를 받아서 해당부분을 직접 패치하는 방법을 적어봅니다.

    우선 unzip source 를 받아서 압축을 풉니다.
    그리고 소스중에서 fileio.c 파일을 편집합니다.

    fileio.c 에서 다음과 같은 부분을 찾습니다. (아래의 코드는 unzip v5.51기준입니다.)

    코드:
    /* translate the Zip entry filename coded in host-dependent "extended
               ASCII" into the compiler's (system's) internal text code page */
            Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver,
                                G.pInfo->HasUxAtt, (option == DS_FN_L));




    이와 흡사한 부분이 몇군데 있는데 이중에서 filename 에 대한 변환부분을 찾아야 합니다. 다른 엉뚱한곳을 수정하면 안되고 딱 한군데 filename 변환부분이 있으니 이를 찾아서 이 부분을 주석처리 또는 제거합니다.

    컴파일후에 한글파일명이 들어간 압축파일을 풀어보세요. 잘될겁니다.

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/06/02 00:28 2007/06/02 00:28
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/164

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/164

    Multicast 는 IGMP 를 사용합니다.
    최근 Linux kernel 은 IGMP v3 를 지원하게 되어 있습니다.
    문제는 아직까지도 Router 들이 IGMP v2 까지만 지원하는 경우가 있습니다.
    그러나 Linux kernel 은 똑똑하게도 IGMP v3 를 시도해보고 안되면 일정시간 (약 10초 정도) 경과후 IGMP v3 -> IGMP v2 -> IGMP v1 순으로 버젼을 낮추어가면서 적응하도록 되어 있습니다.
    그런데 문제는 부팅후 이 경과시간이 초과되어야 IGMP v2 이하버젼에서 수신이 가능해진다는 점입니다. Router를 바꿔달라고 이야기 하고 싶습니다. 하지만 고가장비를 그렇게 쉽게 바꿀수는 없는것이죠.
    Linux는 그러한것을 sysctl 을 통해서 강제시킬수 있게 되어 있습니다.

    만약 IGMP v2 로 즉시 강제하고자 한다면 다음과 같이 할수 있습니다. (기본값은 0으로 순차적응입니다.)

    인용:
    bash# echo 2 > /proc/sys/net/ipv4/conf/<INTERFACE>/force_igmp_version


    예를 들자면 무조건 모든 Interface 에 대해서 적용하고 싶을때는
    인용:
    bash# echo 2 > /proc/sys/net/ipv4/conf/all/force_igmp_version


    설정시점 이후에 올라오는 Interface 에 대해서만 적용하고 싶을때는
    인용:
    bash# echo 2 > /proc/sys/net/ipv4/conf/default/force_igmp_version


    "eth0" 만 적용하고 싶을때는
    인용:
    bash# echo 2 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version



    이런식으로 강제할수 있습니다. 이렇게 함으로써 버젼적응시간이 필요없고 바로 해당 버젼으로 시도하게 되어 부팅후 곧바로 Multicast 수신이 가능해지게 됩니다.

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/06/02 00:28 2007/06/02 00:28
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/163

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/163

    ICMP packet 에 대한 echo를 거부하여 ping 에 반응하지 않도록 하기위해서는 다음과 같이 실행하면 됩니다.

    인용:
    bash# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all


    반대로 이를 해제하려면 다음과 같이 하면 됩니다.

    인용:
    bash# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/06/02 00:27 2007/06/02 00:27
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/162

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/162

    Linux 에서 특정 위치의 directory 내에서 sub directory 가 엄청 많다고 할때
    각 sub directory 별로 압축을 해야 할때가 있습니다.
    아래는 그런 경우에 각 sub directory 별로 tar.bz2 로 압축을 하는 스크립트입니다.

    방법은 이 밖에도 여러가지가 있겠지만 저는 이렇게 합니다.

    인용:
    find `ls` -type d -maxdepth 1 -exec tar -cvjf "{}.tar.bz2" "{}" \;


    매번 이런경우가 심심치 않게 필요한데 막상 떠올리려면 잘 모르겠고 해서 정리해둡니다.

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/06/01 23:56 2007/06/01 23:56
    TAG , ,
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/142

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/142

    특정 디렉토리 하위의 디렉토리 또는 파일의 퍼미션을 변경해야 할때가 있습니다.
    이것은 그것의 한 예를 제시해본겁니다.

    코드:

    #!/bin/sh

    # 자신이 원하는 디렉토리 대입
    PERM_SET=<directory>

    # 디렉토리에 적용될 퍼미션
    find "${PERM_SET}" -type d -exec chmod -v 0770 "{}" \;

    # 파일에 적용될 퍼미션
    find "${PERM_SET}" -type f -exec chmod -v 0660 "{}" \;

    # End of perm.sh

    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/05/25 02:01 2007/05/25 02:01
    TAG ,
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/129

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/129

    1. 커널 옵션을 확인하고 해당 옵션을 활성화 합니다. 결국 NETFILTER하위 옵션에서 가능하면 전부 모듈로 빼면 됩니다.
    인용:
    CONFIG_NETFILTER=y
    # CONFIG_NETFILTER_DEBUG is not set
    CONFIG_NETFILTER_NETLINK=m
    CONFIG_NETFILTER_NETLINK_QUEUE=m
    CONFIG_NETFILTER_NETLINK_LOG=m

    #
    # IP: Netfilter Configuration
    #
    CONFIG_IP_NF_CONNTRACK=m
    CONFIG_IP_NF_CT_ACCT=y
    CONFIG_IP_NF_CONNTRACK_MARK=y
    CONFIG_IP_NF_CONNTRACK_EVENTS=y
    # CONFIG_IP_NF_CONNTRACK_NETLINK is not set
    CONFIG_IP_NF_CT_PROTO_SCTP=m
    CONFIG_IP_NF_FTP=m
    CONFIG_IP_NF_IRC=m
    CONFIG_IP_NF_NETBIOS_NS=m
    CONFIG_IP_NF_TFTP=m
    CONFIG_IP_NF_AMANDA=m
    CONFIG_IP_NF_PPTP=m
    CONFIG_IP_NF_QUEUE=m
    CONFIG_IP_NF_IPTABLES=m
    CONFIG_IP_NF_MATCH_LIMIT=m
    CONFIG_IP_NF_MATCH_IPRANGE=m
    CONFIG_IP_NF_MATCH_MAC=m
    CONFIG_IP_NF_MATCH_PKTTYPE=m
    CONFIG_IP_NF_MATCH_MARK=m
    CONFIG_IP_NF_MATCH_MULTIPORT=m
    CONFIG_IP_NF_MATCH_TOS=m
    CONFIG_IP_NF_MATCH_RECENT=m
    CONFIG_IP_NF_MATCH_ECN=m
    CONFIG_IP_NF_MATCH_DSCP=m
    CONFIG_IP_NF_MATCH_AH_ESP=m
    CONFIG_IP_NF_MATCH_LENGTH=m
    CONFIG_IP_NF_MATCH_TTL=m
    CONFIG_IP_NF_MATCH_TCPMSS=m
    CONFIG_IP_NF_MATCH_HELPER=m
    CONFIG_IP_NF_MATCH_STATE=m
    CONFIG_IP_NF_MATCH_CONNTRACK=m
    CONFIG_IP_NF_MATCH_OWNER=m
    CONFIG_IP_NF_MATCH_ADDRTYPE=m
    CONFIG_IP_NF_MATCH_REALM=m
    CONFIG_IP_NF_MATCH_SCTP=m
    CONFIG_IP_NF_MATCH_DCCP=m
    CONFIG_IP_NF_MATCH_COMMENT=m
    CONFIG_IP_NF_MATCH_CONNMARK=m
    CONFIG_IP_NF_MATCH_CONNBYTES=m
    CONFIG_IP_NF_MATCH_HASHLIMIT=m
    CONFIG_IP_NF_MATCH_STRING=m
    CONFIG_IP_NF_FILTER=m
    CONFIG_IP_NF_TARGET_REJECT=m
    CONFIG_IP_NF_TARGET_LOG=m
    CONFIG_IP_NF_TARGET_ULOG=m
    CONFIG_IP_NF_TARGET_TCPMSS=m
    CONFIG_IP_NF_TARGET_NFQUEUE=m
    CONFIG_IP_NF_NAT=m
    CONFIG_IP_NF_NAT_NEEDED=y
    CONFIG_IP_NF_TARGET_MASQUERADE=m
    CONFIG_IP_NF_TARGET_REDIRECT=m
    CONFIG_IP_NF_TARGET_NETMAP=m
    CONFIG_IP_NF_TARGET_SAME=m
    CONFIG_IP_NF_NAT_SNMP_BASIC=m
    CONFIG_IP_NF_NAT_IRC=m
    CONFIG_IP_NF_NAT_FTP=m
    CONFIG_IP_NF_NAT_TFTP=m
    CONFIG_IP_NF_NAT_AMANDA=m
    CONFIG_IP_NF_NAT_PPTP=m
    CONFIG_IP_NF_MANGLE=m
    CONFIG_IP_NF_TARGET_TOS=m
    CONFIG_IP_NF_TARGET_ECN=m
    CONFIG_IP_NF_TARGET_DSCP=m
    CONFIG_IP_NF_TARGET_MARK=m
    CONFIG_IP_NF_TARGET_CLASSIFY=m
    CONFIG_IP_NF_TARGET_TTL=m
    CONFIG_IP_NF_TARGET_CONNMARK=m
    CONFIG_IP_NF_TARGET_CLUSTERIP=m
    CONFIG_IP_NF_RAW=m
    CONFIG_IP_NF_TARGET_NOTRACK=m
    CONFIG_IP_NF_ARPTABLES=m
    CONFIG_IP_NF_ARPFILTER=m
    CONFIG_IP_NF_ARP_MANGLE=m


    2. iptables을 설치합니다.
    인용:
    bash# emege iptables
    bash# rc-update add iptables default


    3. 일단 설명의 편의상 그냥 재부팅 한번 합니다. (또는 "/etc/init.d/iptables start" 해도 됩니다. 단, 이때 나오는 경고는 무시)

    4. 다음과 같이 임시로 사용할 쉘 스크립트를 작성하고 이것을 실행합니다. (아니면 그냥 쉘프롬프트에서 그냥 명령 실행해도 됩니다.)
    코드:
    #!/bin/sh

    # 외부 인터넷이 되는 interface (ADSL인 경우는 ppp0가 되겠죠)
    IF_EXTERN=eth0
    # 내부 gateway가 될 interface
    IF_LOCAL=eth1
    # 사용할 local 주소대역
    MASQUE_ADDRESS=192.168.0.0/24

    /sbin/iptables -P INPUT ACCEPT
    /sbin/iptables -F INPUT
    /sbin/iptables -P OUTPUT ACCEPT
    /sbin/iptables -F OUTPUT
    /sbin/iptables -P FORWARD DROP
    /sbin/iptables -F FORWARD
    /sbin/iptables -t nat -F

    /sbin/iptables -A FORWARD -i ${IF_EXTERN} -o ${IF_LOCAL} -m state --state ESTABLISHED,RELATED -j ACCEPT
    /sbin/iptables -A FORWARD -i ${IF_LOCAL} -o ${IF_EXTERN} -j ACCEPT
    /sbin/iptables -A FORWARD -j LOG

    /sbin/iptables -t nat -A POSTROUTING -o ${IF_EXTERN} -s ${MASQUE_ADDRESS} -j MASQUERADE

    # End if masq_ip.sh


    5. 만약 4번 항목의 스크립트 실행시에 모듈이 안올라가는 상황이 발생한다면 다음과 같이 모듈을 수동으로 최소한의 모듈을 올려주어야 합니다. 물론 젠투를 정상적으로 잘 설치하셨다면 다 올라가 있을겁니다.
    인용:
    ipt_LOG
    ipt_state
    iptable_filter
    ipt_MASQUERADE
    iptable_nat
    ip_nat
    ip_conntrack
    ip_tables


    6. 이제 iptables를 restart합니다. (또는 재부팅 합니다.) 그러면 "/var/lib/iptables/rules-save" 파일에 해당 설정상황이 저장될것입니다.
    인용:
    bash# /etc/init.d/iptables stop
    bash# /etc/init.d/iptables start


    7. "/etc/sysctl.conf" 에서 다음 두가지 항목을 활성화 합니다.
    인용:
    net.ipv4.ip_forward = 1
    net.ipv4.ip_dynaddr = 1


    8. 이제 완료되었습니다. 그냥 사용하면 됩니다.
    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/05/21 09:03 2007/05/21 09:03
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/125

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/125

    관련글:
    http://joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=31263&forum=1


    일단 다음과 같이 따라해보세요. 해보시면 감잡을거라 믿어 의심치 않으며

    1. vi를 실행합니다. (명령행 모드로 되어 있을겁니다.)
    2. 이제 숫자 "100" 을 칩니다.
    3. "i"를 칩니다. (입력모드로 전환될겁니다.)
    4. "/" 를 입력합니다. (반복될 문자이겠지요.)
    5. 자! esc 키를 한번만 가볍게 눌러줍니다.
    6. 약 1~3초정도만 기다려 보세요.

    느낌이 옵니까?

    정리하자면 이렇습니다.

    첫째 반복될 문자의 횟수를 명령행 모드에서 입력합니다.
    둘째 "i"를 입력하여 입력모드로 전환합니다.
    셋째 원하고자 하는 문자 또는 문자열을 입력합니다.
    넷째 ESC키를 살짝 눌러 명령실행을 합니다.
    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/05/21 09:00 2007/05/21 09:00
    TAG ,
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/123

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/123

    http://www.hwport.com/wiki.php/CDRecord 으로 내용이 이동되었습니다.
    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/05/09 12:01 2007/05/09 12:01
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/112

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/112

    관련글 : JOINC - http://joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=30837&forum=1

    여기서 중요한것은 "type=UNLISTED" 라는 것이 있어야 한다는 점이고요.
    "port = <자신이 쓰고자 하는 포트번호>" 도 써주어야 하겠고요.

    이것말고 다른 방법으로는 redirect 가 있다는 것도 참고하시고요.

    예제는 아래와 같습니다. /etc/xinet.d/telnet* 을 수정하거나 새로 만드시거나 추가하시면 됩니다.
    물론 배포판마다 약간의 차이가 있으므로 적절히 맞게 수정해주는 센스는 필요하겠죠. (아래의 예제는 RedHat 기반 기준입니다.)

    코드:

        service my_telnet
        {
        type = UNLISTED
        disable = no
        flags = REUSE
        socket_type = stream
        wait = no
        user = root
        server = /usr/sbin/in.telnetd
        log_on_failure += USERID
        port = 8888
        }
    크리에이티브 커먼즈 라이센스
    Creative Commons License
    2007/05/09 11:56 2007/05/09 11:56
    받은 트랙백이 없고, 댓글이 없습니다.

    댓글+트랙백 RSS :: http://blog.hwport.com/rss/response/110

    댓글+트랙백 ATOM :: http://blog.hwport.com/atom/response/110