레이블이 tar인 게시물을 표시합니다. 모든 게시물 표시
레이블이 tar인 게시물을 표시합니다. 모든 게시물 표시

docker save and load image

# 현재 로컬에 운영중인 컨테이너를 이미지로 만들기
docker commit -m test_message container ysoftman/centos_simple:latest

# 로컬에 빌드된 이미지를 .tar 파일로 아카이빙
docker save -o ysoftman-app.tar ysoftman/centos_simple:latest

# 원격 호스트에 파일 복사
rsync -avz ysoftman-app.tar ysoftman@remotehost:~/

# 원격 호스트에서 .tar 파일 로딩하면 docker images 로 이미지가 있는것을 알수 있다.
docker load -i ysoftman-app.tar

golang bucketCntBits stackcheck redeclared 에러

golang 빌드시 다음과 같은 bucketCntBits redeclared 에러가 발생했다.
/usr/local/go/src/runtime/map.go:64:2: bucketCntBits redeclared in this block
previous declaration at /usr/local/go/src/runtime/hashmap.go:64:18

stackcheck redeclared 에러도 발생한다.
/usr/local/go/src/runtime/stubs_x86.go:10:6: stackcheck redeclared in this block

보통 go tar 파일을 다운 받아 아래와 같이 /usr/local 에 바로 압축을 풀게 되는데
이전에 이미 /usr/local/go 가 있어 덮어써지면 위와 같은 runtime 에러가 발생할 수 있다.
그래서 이전 go 버전이 제대로 삭제해야 한다.
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -zxvf go1.12.linux-amd64.tar.gz

mac mojave 업데이트 후 ld warning 문제

# 맥 OS mojave 버전업을 하고 go1.11 으로 빌드시
# ld(linker) 수행에서 다음과 같은 에러가 발생한다.
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
ld: warning: text-based stub file /System/Library/Frameworks//Security.framework/Security.tbd and library file /System/Library/Frameworks//Security.framework/Security are out of sync. Falling back to library file for linking.

# warning 이라 빌드는 되지만 매번 warning 메시지로 불편하다.
# 기존 버전을 삭제하고 xcode 개발툴을 다시 설치한다.
# 해결방법
# CommLineTools 를 삭졔(임시이동후)하여
sudo rm -rf /Library/Developer/CommandLineTools

# xcode 개발툴 다시 설치
xcode-select --install

# 패키지 리스트 보기
pkgutil --pkgs

# pkgutil(맥 패키지 설치 툴)로 CLTools 버전 확인
pkgutil --pkg-info com.apple.pkg.CLTools_Executables

# 또는 xcode build 로 버전 확인
xcodebuild -version

# 위 방법으로도 해결되지 않으면 go 1.11.2 버전을 설치한다.
wget https://dl.google.com/go/go1.11.2.darwin-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -zxvf go1.11.2.darwin-amd64.tar.gz

# 또는 brew 사용시
brew upgrade go

# go version 으로 버전 확인
go version go1.11.2 darwin/amd64

mac ls -l @ 확장 속성

# mac(맥)에서 ls -l 로 보면 퍼미션에 @ 가 붙어 있는 파일들을 볼 수 있다.
# 확장속성(extended attribute)을 가진 파일로, 파일시스템에서 파일과 관련된 메타 정보를 명시하고 있다.
# 확장속성의 자세한 내용 https://en.wikipedia.org/wiki/Extended_file_attributes
ls -l
-rw-r--r--@ 1 ysoftman  staff   387 12 20 15:10 iterable.html

# 확장속성이 추가되는 경우
iterm2 -> ls -> .html 파일 cmd+click -> 브라우저로 열였을때

# xattr 로 확장속성 파일의 내용을 확인할 수 있다.
xattr iterable.html
com.apple.lastuseddate#PS
com.apple.metadata:_kMDItemUserTags

# xattr -c 로 파일에서 확상속성을 제거할 수 도 있다.
xattr -c iterable.html

#####

# 맥에서 압축된 파일을 압출 풀때 다음과 같이 경고가 나오고, 추가적인 별도 파일들도 생성된다.
tar zxvf ysoftman.tar.gz
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.LaunchServices.OpenWith'

# 맥에서 확장 속성을 제거한 후 압축 하도록 한다.
# -r : act recursively
# -c : clear
xattr -rc ./ysoftman
tar czf ysoftman.tar.gz ./ysoftman

# 이제 압축 풀면 경고도 없이 압축이 풀린다.
tar zxvf ysoftman.tar.gz

#####

# + 는 ACL permission 속성을 나타낸다.
# xNix 에서 getfacl, setfacl 명령으로 acl 상태 보기 및 설정이 가능하다.

Build Linux kernel and install

# 리눅스 커널 소스 다운로드 (bz2) 의 경우
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.5.1.tar.bz2
tar jxvf linux-3.5.1.tar.bz2

# 최근 리눅스 커널 소스는 xz 로 압축해서 배포하고 있다.
# 리눅스 커널 소스 다운로드 (xz) 의 경우 xz -> tar 두번 압축해제
wget https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.10.105.tar.xz
xz -d linux-3.10.105.tar.xz
tar xvf linux-3.10.105.tar

# 빌드에 필요한 툴 설치(Ubuntu 기준)
sudo apt-get install ncurses-dev

# 리눅스 소스 경로로 이동
cd linux-3.5.1

# 이전 커널의 오브젝트파일, 버전정보, 컴파일 환경 설정 값등 현재 컴파일할 커널에 영향을 줄 수 있는 정보 삭제
make mrproper

# 빌드 환경 설정 
# defconfig:디폴트설정
# i386_defconfig:32bit 디폴트설정
# x86_64_defconfig:64bit 디폴트설정
# config:텍스트모드
# menuconfig:텍트스메뉴모드
# xconfig:X윈도우
make x86_64_defconfig

# 빌드(make bzImage(일반용) 와 make zImage(임베디드용) 는 kernel2.6 이후 make 로 통합)
make clean
make -j10

# 모듈 설치 (/lib/modules/버전 에 설치됨)
sudo make modules_install
# 커널 설치 (/boot 에 설치됨)
sudo make install

# 필요시 grub 부트로더 갱신
# grub 일 경우
sudo vi /boot/grub.conf
# grub2 일 경우
sudo update-grub

Linux ssh 로 다중명령 실행하기

# 우선 kerberos 환경 구성이 되어 있어야 한다.
# kerberos 서버 설정
vi /etc/krb5.conf
[libdefaults]
default_realm = ysoftman.com
[realms]
ysoftman.com = {
  kdc = kauth.ysoftman.com
  admin_server = kadmin.ysoftman.com
  kpasswd_server = kadmin.ysoftman.com
}

# 만약 다음과 같은 에러가 발생한다면
kinit : Cannot contact any KDC for realm 'ysoftman.com' ...

# 각 서버의 디폴트 포트는 다음과 같고 포트까지 명시해보자
kdc = kauth.ysoftman.com:88
admin_server = kadmin.ysoftman.com:749
kpasswd_server = kadmin.ysoftman.com:464 # on UDP


# 디폴트 경로 대신 환경변수로 krb5.conf 경로를 변경할 수도 있다.
KRB5_CONFIG="${HOME}/krb5.conf"

# ssh 기본 설정
vi /etc/ssh/ssh_config
Host *
HashKnownHosts yes # ~/.ssh/known_hosts 에 접속한 호스트들 hash로 기록
GSSAPIAuthentication yes # GSSAPI 인증  사용

# 이제 ssh 접속이 암호를 물어보는 과정을 스킵하기 위해
# 다음과 같이 해당 아이디에 암호를 입력하고 티켓을 획득한다.
kinit ysoftman

# 티켓 획득 후 티켓 정보 확인
klist

# ssh 로 다중 명령을 실행하려면 "" 사이에 명령을 ; 으로 구분하여 사용한다.
# 형식은 다음과 같다.
ssh -l ysoftman servername "command1; command2; command3;"

# 예를 들어 /home1 로 이동해서 현재 디렉토리를 파악하고 파일 리스트 출력하려면
ssh -l ysoftman servername "cd /home1/; pwd; ls -ahl;"


#####


# tar 로 압축한 파일 ssh 로 전송하기
tar cvzf - ./testdir | ssh ysoftman@ysoftman.server.test "dd of=/home/ysoftman/ysoftman.tar.gz"


#####


# 테스트를 위한 임시 서버 리스트 파일 생성
echo 'server-lemon
server-apple
server-orange' > temp_server_list.txt

# 여러 호스트에 ssh 명령 실행
# stdin(< temp_server_list.txt) 파이프라인을 사용중 ssh 로 원격 명령실
while read server
do
    echo ${server}
    # stdin("hostname" 명령) 을 사용하면 기존 stdin(< temp_server_list.txt)이 끝나게 되어 루프가 끝나게 된다.
    # < /dev/null 로 stdin 을 사용하지 않도록 한다.
    # -o "StrictHostKeyChecking no" 접속시 호스트 체크 안하기
    out=`ssh -o "StrictHostKeyChecking no" ysoftman@server "hostname" < /dev/null`
    echo ${out}
done < temp_server_list.txt