Shell 스 크 립 트 로 자신 만 의 미니 리 눅 스 를 자동화 합 니 다!(2)

방금 우 리 는 이미 앞의 세 단계 의 일 을 완성 했다.우 리 는 전체 Shell 스 크 립 트 의 실현 방식 을 다시 한 번 분석 합 니 다.
실현 과정 분석:
1. 파 티 션, 사용자 가 선택 한 디스크 에 따라 포맷, 파 티 션
2. 마 운 트, 사용자 가 설정 한 파 티 션 에 따라 각각 호스트 의 디 렉 터 리 에 마 운 트 합 니 다.마이크로 Liux 를 편집 하 는 데 편리 하 다.
3. 마이크로 리 눅 스에 대해 각종 설정 정 보 를 기록 합 니 다.
4. 미니 리 눅 스에 서 우리 가 필요 로 하 는 Bash 등의 명령 을 넣 습 니 다.
5. 커 널 을 넣 고 불 러 와 야 할 프로필 을 시작 합 니 다.
6. 사용자 의 하 드 디스크 에 안내 프로그램 을 설치 합 니 다.
----------------------------------------------------------------------------------------------------------
알 겠 습 니 다. 아까 는 여러분 의 생각 을 정리 하 는 데 도움 을 준 셈 입 니 다. '지난 회 회고' 라 고 할 수 있 습 니 다. 이어서 계속 하 겠 습 니 다!Shell 스 크 립 트 를 끝까지 진행 하 세 요!
STEP 4: 여러 가지 우리 가 필요 로 하 는 명령 을 이식 하여 들어간다.
스 크 립 트 분석:
이식 명령 을 위해 서 는 숙주 시스템 의 명령 을 복사 해 야 합 니 다.그러나 명령 만 복사 하 는 것 으로 는 부족 합 니 다. 명령 에 대응 하 는 라 이브 러 리 파일 을 복사 해 야 합 니 다.그러면 명령 에 따라 스타일 도 다 르 고 라 이브 러 리 파일 도 다 릅 니 다.어떤 라 이브 러 리 파일 을 복사 하고 어디 에 복사 하 는 지, 중복 되 는 지 알 아야 합 니 다. 마지막 으로 명령 만 복사 하 는 것 이 아니 라 어떤 명령 이 필요 한 지 순환 적 으로 선택 하도록 해 야 합 니 다.다 복사 가 끝 날 때 까지 ~
좋아, 분석 OK, 우리 계획 대로 하 자!

function COPYLIB {     #         ,         。
  #copy command
  if which $1 &> /dev/null ;then             #                  ,       1,   1   ~=。=
    AA=`which $1 | tail -1 | awk '{print $1}'`
    cp "$AA" $2"$AA"                      #       ,   ~
  else
    echo "$1 is not exist"
  fi

  #copy lib                              #            lib   
  for LIB in `ldd "$AA" | grep "/lib/" | sed '1,$s@^[[:space:]]/lib@aaa=> /lib@g' | awk -F"=> " '{print $2}' | cut -d" " -f1`;do
    LIBPATH=`echo $LIB | sed 's@\(.*\)/[^[:space:]]\{1,\}@\1@g'`   #       for  ,             lib,       ,  
    [ -d ${2}$LIBPATH ] || mkdir ${2}$LIBPATH                      #                  ,        
    [ ! -e $2/$LIB ] && cp -f $LIB ${2}$LIBPATH && echo "$LIB done"      #     ~         ~~
  done

}
#    ,        ,        。     ,           ,   bash ,    init ,             。
echo "=========================================================="
echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!"
read -p "COMMAND you want?(Quit for 'q') :" CMD1          #        ,                ,        。
                                                          #           ,                。
until [ $CMD1 == 'q' ]; do                                #   ,       ,         ‘q’
  COPYLIB $CMD1 /mnt/sysroot                          #                  。
  echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!"
  read -p "Which COMMAND you want use ?(Quit for 'q') :" CMD1
done

OK ~ 이렇게 되면 우리 의 작은 Liux 에 도 우리 가 입력 한 명령 이 다양 해 집 니 다 ~ 이제 커 널 을 추가 해 야 합 니 다!우리 의 Liux 를 실행 시 킵 니 다!!!!
--------------------------------------------------------------------------------------------
STEP 5: 커 널 만 들 기!우리 리 눅 스 가 심장 을 가 질 수 있 도록!
수 동 으로 자신 만 의 Liux 를 만 들 때, 우 리 는 우리 의 커 널 이 Redhat 의 커 널 파일 을 직접 사용 한 다 는 것 을 이미 알 고 있 었 다.그리고 initrd 를 수정 하면 메모리 에 작은 Liux 를 가상 하여 루트 디 렉 터 리 시스템 의 파일 을 불 러 올 수 있 습 니 다.그 후에 우 리 는 그것 을 이식 하면 된다.
이제 시작 합 시다 ~!

function YDFQ {                    #      -。-
TMPDIR=`mktemp -d /tmp/little.XX`       #          ,        initrd.*.img   ~
cd $TMPDIR
zcat /boot/initrd-`uname -r`.img | cpio -id  &> /dev/null     ##                initrd  ,    。
sed -i 's@^echo Scanning and configuring dmraid supported devices@#&@g' init
sed -i 's@^echo Scanning logical volumes@#&@g' init
sed -i 's@^lvm vgscan --ignorelockingfailure@#&@g' init
sed -i 's@^echo Activating logical volumes@#&@g' init
sed -i 's@^lvm vgchange -ay --ignorelockingfailure  vol0@#&@g' init
sed -i 's@^resume LABEL=SWAP-sda3@#&@g' init                            #  init            ~

sed -i "s@\(mkrootdev.*\) /.*@\1 sda2@" init                        #   init      ,               。
find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz    #         initrd.gz  ~
cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz                     #                    !
}
YDFQ /mnt/sysroot    #        -。-   ,             

ok ~ 우리 작은 Liux 의 심장 도 생 겼 습 니 다 ~ 이제 마지막 입 니 다!!!하 드 디스크 에 자신 이 어떻게 운행 해 야 하 는 지 알려 주세요!!!
---------------------------------------------------------------------------------------------------------
STEP 6: 안내 파일!
그렇다면 가이드 가 필요 하 다 면 우리 의 위대 한 그루 브 를 언급 해 야 합 니 다. 바로 하 드 디스크 에 MBR 을 설치 할 수 있 습 니 다 ~ boot loader 를 가지 게 합 니 다 ~ 이렇게 되면 하 드 디스크 는 켜 고 시작 하면 자신 이 무엇 을 해 야 하 는 지 알 게 됩 니 다 ~!물론 우리 시스템 은 우리 가 결정 하기 때문에 그 안에 당신 의 물건 을 더 해 야 합 니 다!!
시작 합 시다!

##                   
## $1=            bootloader  
## $2=      ,             
## $3=       
## $4=initrd    ~
##
function GRUB {         ##   ,       -。-
if [ `basename $2` == boot ];then         ##                      ,        ,           -。-
  grub-install --root-directory=/mnt $1  &> /dev/null    #   grub,       ,       bootloader !
  cat >>$2/grub/grub.conf<< EOF                     #            ~~
default=0
timeout=10
title Little Linux
        root (hd0,0)
        kernel /${3} ro root=/dev/sda2 quiet
        initrd /${4}
EOF

else
  echo "It's not boot !Exit & Please set it again !" 
fi
}

GRUB $DSK /mnt/boot vmlinuz initrd.gz      #   ,       -。-

echo "Congratulation ! Your Mini Linux is install OK !"   #       !            !

OK~~!!!! 다 됐어 ~
이제 저희 가 테스트 를 해 보도 록 하 겠 습 니 다.
이렇게 쓰 면 우 리 는 기본적으로 원 키 로 Liux 를 설치 하고 당신 이 직접 만 든 것 이 라 고 할 수 있 습 니 다!!!!
~
음 ~
알 아 봤 어?그 럴 까요 -그럼 직접 만들어 보 세 요 ~ ~
 
물론 그 렇 죠. 뭔 가 다른 점 이 있 거나 여러 가지 의견 이 있다 면 저 와 소통 해 주세요 ~
함께 토론 해야만 함께 발전 할 수 있 잖 아!!!
weiyan
2011.8.4

좋은 웹페이지 즐겨찾기