메모리 상에서 커널 컴파일을 하면 빠르다. 헌데, 매번 컴파일 할 때마다 tmpfs 를 마운트하고, 지우는 거... 상당히 귀찮다. 그래서 스크립트를 한 번 만들어봤다. 부팅할 때 rc.local 에 넣고 시작하면 나쁘지 않을듯도 하다. tmpfs 모듈, readlink, pbzip2 등을 필요로 한다. 물론 bash를 사용하는 OpenRC 환경에서 사용할 수 있다.

스크립트 이름은 kernel_compile.sh 로 만들긴 했는데, 어떤 스크립트 이름이든 상관없다.
#!/bin/bash
if [ "$(id -u)" != "0" ]
then
        echo "This script must be run as root."
        exit -1
fi
if [ -z ${1} ]
then
        echo "This command makes compressed kernel source to be extracted in tmpfs mounted directory."
        echo "Usage : ${0} kernel.source.tar.bz2"
        echo "-- or --"
        echo "        ${0} -r"
        exit -1
else
        case ${1} in
        -r)
                if [ -h /usr/src/linux ]
                then
                        #echo "$(readlink -f linux)" # debug
                        tmp_kernel_directory_name="$(readlink -f linux)"
                        kernel_directory_name=${tmp_kernel_directory_name#/usr/src/}
                        if [ -f ${kernel_directory_name}.tar.bz2 ]
                        then
                                rm ${kernel_directory_name}.tar.bz2
                        fi #[ -f ${kernel_directory_name}.tar.bz2 ]
                        #echo $kernel_directory_name # debug
                        if [  -n $kernel_directory_name ]
                        then
                                #tar cJf ${kernel_directory_name}.tar.xz ${kernel_directory_name} --totals
                                tar cf ${kernel_directory_name}.tar.bz2 --use-compress-prog=pbzip2 ${kernel_directory_name} --totals
                                rm -rf ${kernel_directory_name} 2> /dev/null
                                umount ${kernel_directory_name}
                                rmdir ${tmp_kernel_directory_name} 2> /dev/null
                                rm linux
                                exit 0
                        else
                                echo "error: No linux directory"
                                exit -1
                        fi # [ -n $kernel_directory_name ]
                        unset $tmp_kernel_directory_name
                else
                        echo "There are no linux link file."
                        exit -1
                fi
                ;;
        *)
        if [ -f ${1} ]
        then    # it's general file
                # echo ${1} # debug
                kernel_directory_name=${1%\.tar\.bz2}
                # echo ${kernel_directory_name} # debug
                if [ "$(ls -A /usr/src/${kernel_directory_name} 2> /dev/null )" ]
                then    # There is directory with same name
                        echo "Already directory is exist and not empty." # error message, don't make comment
                        exit -1
                else
                        if [ ! -d /usr/src/${kernel_directory_name} ]
                        then
                                mkdir -p /usr/src/${kernel_directory_name}
                        fi
                        mount -t tmpfs tmpfs /usr/src/${kernel_directory_name} -o size=10G
                        tar xf ${1} --use-compress-prog=pbzip2 --totals && ln -s ${kernel_directory_name} linux
                fi
                unset kernel_directory_name # unset variable
        else    # it's not general file
                echo "error : invalid file name ${1}"
                echo "${1} is not proper file."
                exit -1;
        fi
        ;;
        esac
fi
exit 0
2016/04/26 08:55 2016/04/26 08:55
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://snwslug.fossa.kr/~jachin/rss/response/238

댓글+트랙백 ATOM :: http://snwslug.fossa.kr/~jachin/atom/response/238

한동안 글쓰기 변비를 겪고, 이제는 좀 쓸 수 있을까 생각해서 블로그를 업데이트 했더니..
왠걸.. 글쓰기 인터페이스가 오작동하여서 한동안 글을 못 올렸습니다.

텍스트 큐브의 버전이 업데이트 되면서 스킨의 위치가 ~/skin 에서 ~/skin/blog 로 옮겨진 것을 모르고 소스코드를 읽어보고 확인하고 나서야 알게 되다니.. 덕분에 PHP 소스코드를 다시 한 번 읽게 되었지만... 참... 씁쓸합니다. 이렇게 간단하게 해결될 일인데... 모든 일은 역시 원인을 정확하게 아는 것이 중요하다는 것을 다시 한 번 느낍니다.

새로운 기능들도 추가되고, 부트스트랩을 이용해서 그런지 살짝 UI도 세련된 것 같습니다.

페북에서 쓰고 싶었지만, 왠지 쓰지 못했던 이야기를 기탄없이 써보려고 합니다.
2016/04/24 16:28 2016/04/24 16:28
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://snwslug.fossa.kr/~jachin/rss/response/237

댓글+트랙백 ATOM :: http://snwslug.fossa.kr/~jachin/atom/response/237

http://nixcraft.com/shell-scripting/4489-ssh-passing-unix-login-passwords-through-shell-scripts.html

expect를 이용하여 계정이름과 비밀번호를 자동으로 입력하여 ssh 접속을 하는 스크립트가 있어서 옮겨 적어본다.

#!/usr/bin/expect -f
# Expect script to supply root/admin password for remote ssh server 
# and execute command.
# This script needs three argument to(s) connect to remote server:
# password = Password of remote UNIX server, for root user.
# ipaddr = IP Addreess of remote UNIX server, no hostname
# scriptname = Path to remote script which will execute on remote server
# For example:
#  ./sshlogin.exp password 192.168.1.11 who 
# ------------------------------------------------------------------------
# Copyright (c) 2004 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ----------------------------------------------------------------------
# set Variables
set password [lrange $argv 0 0] 
set ipaddr [lrange $argv 1 1]   
set username [lrange $argv 2 2] 
set timeout -1   
# now connect to remote UNIX box (ipaddr) with given script to execute
spawn ssh $username@$ipaddr
match_max 100000
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password 
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof
2013/09/16 14:20 2013/09/16 14:20
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://snwslug.fossa.kr/~jachin/rss/response/236

댓글+트랙백 ATOM :: http://snwslug.fossa.kr/~jachin/atom/response/236

Gentoo Minimal Live USB 만들기

GNU Linux RSS Icon ATOM Icon 2013/08/12 19:11 바부...

오랫만에 젠투 리눅스 Live USB 를 만드려고 보니, 어떻게 만들어야 하는지 고민이 되기에 과정을 나열해본다. 이 방법은 4 GB 이상의 메모리에서 exFAT 파일시스템과 ext2 파일시스템 파티션을 할당하여, 이미지 내용을 훼손하지 않고, 파일관리를 할 수 있도록 하기 위한 것이다.

1. USB 파티션 설정
첫 번째 파티션은 exFAT 파일시스템으로 할당하고 USB 메모리 용량에서 300 MB 를 제외한 나머지 용량을 할당한다. 두 번째 파티션은 ext2 파일시스템으로 할당한다. 첫 번째 파티션을 exFAT 파일시스템으로 하는 이유는, 윈도우즈에서 첫 번째 파티션이 인식 불가능한 파티션이면, 플러그 앤 플레이에서 사용가능한 두 번째 파티션이 보이지 않는 경우가 있기 때문이다. 또한 4 GB 이상의 용량을 갖는 파일을 사용할 수 있도록 하기 위해서이다. 두 번째 파티션을 ext2 로 두는 이유는 윈도우즈에서 Live USB 이미지 영역을 볼 수 없도록 하기 위해서이다.

 # fdisk /dev/sdb 

2. 파티션 포멧
USB 메모리의 첫 번째 파티션을 exFAT 파일시스템으로 포멧하기 위해서는 exfat-utils 패키지와 fuse-exfat 패키지를 설치해야 한다.

 # mkexfatfs -n "SKYDRVx4" /dev/sdb1

 # mkfs.ext2 -L "Live USB" /dev/sdb2

3. MBR 이미지 덮어쓰기

 # dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb 
extlinux 설치를 위해, USB 메모리에 mbr.bin 바이너리 이미지를 USB에 씌운다.

4. CD 이미지, USB 파티션 마운트
CD 이미지의 내용을 USB 파티션에 복사하기 위한 명령어이다.

 # mount -o loop,ro -t iso9660 /where/is/iso/install-amd64-minimal-20130801.iso /mnt/cdrom

 # mount /dev/sdb2 /mnt/usb

5. 이미지 내용 복사

 # cp -r /mnt/cdrom/* /mnt/usb/ 

5. isolinux 내용을 extlinux 로 변경

 # cd /mnt/usb

 # mv isolinux extlinux

 # mv extlinux/isolinux.cfg extlinux/extlinux.conf

 # rsync -av extlinux

 # extlinux -i extlinux

extlinux 의 경우 설정파일이 extlinux.conf 라는 것을 명심하라. 오타 아니다.

6. 이미지, 파티션 언마운트

 # umount /mnt/{usb,cdrom} 

2013/08/12 19:11 2013/08/12 19:11
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://snwslug.fossa.kr/~jachin/rss/response/235

댓글+트랙백 ATOM :: http://snwslug.fossa.kr/~jachin/atom/response/235