[ 클라이언트 ]
echo Input Your Name :
NAME=hmwoo # read NAME
echo Input Your Email :
EMAIL=hmwoo@hmwoo.com # read EMAIL
echo Input Your Build File Name :
FILE_NAME=hello # read FILE_NAME
echo Input Your Build File Version :
FILE_VERSION=1.0.0 # read FILE_VERSION
# rpm 파일 빌드 툴 설치
yum -y install rpm-build rpm-sign
# 기본적으로 실행중인 rngd 종료
kill -9 `ps -ef | grep rngd | grep -v grep | awk '{print $2}'`
# 기본적으로 실행 중인 gpg 생성 툴 종료
kill -9 `ps -ef | grep gpg-agent | grep -v grep | awk '{print $2}'`
# gpg key를 랜덤으로 만들어주는 rngd 실행
# r : 난수를 전달받는 장치 지정
rngd -r /dev/urandom
# gpg 생성 툴 실행
gpg-agent --use-standard-socket --daemon
# gpg 가 관리하는 개인키 모두 제거(gpg를 처음 사용할 경우 실행)
gpg --fingerprint --with-colons | grep "^fpr" | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p' | xargs gpg --batch --delete-secret-keys
# gpg 가 관리하는 공개키 모두 제거(gpg를 처음 사용할 경우 실행)
gpg --fingerprint --with-colons | grep "^fpr" | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p' | xargs gpg --batch --delete-keys
# gpg 개인키 생성
# Expire Date: 0으로하면 영구사용
# --batch : 대화식(사용자가 입력하여 선택) 이 아닌 비대화식으로 실행
# --no-tty : batch와 함께 사용하는 명령어(오류 발생시에도 비대화식으로 실행)
cat <<EOF | gpg2 --batch --no-tty --gen-key
%echo Generating a standard key
Key-Type: default
Key-Length: 2048
Subkey-Type: default
Subkey-Length: 2048
Name-Real: ${NAME}
Name-Email: ${EMAIL}
Expire-Date: 0
Passphrase: P@ssw0rd!
%commit
%echo done
EOF
# gpg key 저장
GPG_KEY=`gpg --fingerprint ${NAME} | grep ^pub | awk '{print $2}' | awk -F "/" '{print $2}'`
# gpg 공개키 키 파일 추출
gpg -a --yes -o /root/RPM-GPG-KEY --export ${GPG_KEY}
# rpm 빌드 시 gpg key 참조 정보 저장
echo '%_gpg_name '${GPG_KEY} > /root/.rpmmacros
mkdir -p /app/script && cd /app/script
# 패키지 폴더 생성 (패키지명 - 버전) 형태로 생성
mkdir -p /app/script/${FILE_NAME}-${FILE_VERSION}
# 패키지 생성
cat <<EOF > /app/script/${FILE_NAME}-${FILE_VERSION}/${FILE_NAME}
#!/bin/bash
echo world
EOF
# 패키지 압축 (폴더를 명시하여 압축하여 폴더까지 압축)
cd /app/script && tar czvf ${FILE_NAME}-${FILE_VERSION}.tar.gz ${FILE_NAME}-${FILE_VERSION}/
# SPEC 파일 생성 ( rpm 생성을 위한 레시피 파일)
# mktemp는 tmp파일을 랜덤한 이름으로 생성하는 명령어
# u옵션을 주어서 생성은 하지 않고 랜덤으로 생성된 이름만 출력
# d옵션으로 디렉토리도 생성하도록 한다
cat <<SPEC_FILE > /app/script/${FILE_NAME}.spec
Name: ${FILE_NAME}
Version: ${FILE_VERSION}
Release: 1%{?dist}
Summary: A ${FILE_NAME} package
Group: Testing
License: GPL
URL: http://www.hmwoo.com/testing
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: /bin/rm, /bin/mkdir, /bin/cp
Requires: /bin/bash
%description
A ${FILE_NAME} package
%prep
%setup -q
%build
#configure
#make %{?_smp_mflags}
%install
rm -rf \$RPM_BUILD_ROOT
#make install DESTDIR=\$RPM_BUILD_ROOT
mkdir -p \$RPM_BUILD_ROOT/usr/local/bin
cp ${FILE_NAME} \$RPM_BUILD_ROOT/usr/local/bin
%clean
rm -rf \$RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
#%doc
%attr(0755,root,root)/usr/local/bin/${FILE_NAME}
%changelog
* Sat May 17 2014 hmwoo <hmwoo@hmwoo.com> - ${FILE_VERSION}
- Initial RPM
SPEC_FILE
# 빌드를 위한 폴더 구조 생성(No such file or directory 에러는 무시)
rpmbuild /app/script/${FILE_NAME}.spec
# 레시피 파일 이동
echo y | cp /app/script/${FILE_NAME}.spec /root/rpmbuild/SPECS/
# 압축 파일 이동
echo y | cp /app/script/hello-1.0.0.tar.gz /root/rpmbuild/SOURCES/
# spec 파일 정보에 해당하는 rpm 파일 생성
rpmbuild -ba /app/script/${FILE_NAME}.spec
# rpm sign
# setsid 로 내부적 새션을 만들어 비밀번호 ASK를 echo로 전달해 주도록함
echo P@ssw0rd! | setsid rpmsign --addsign /root/rpmbuild/RPMS/x86_64/${FILE_NAME}-${FILE_VERSION}*.rpm
# rpm 서명 추가
rpm --import /root/RPM-GPG-KEY
# 패키지 설치
rpm -ivh /root/rpmbuild/RPMS/x86_64/${FILE_NAME}-${FILE_VERSION}*.rpm
# rpm 패키지 정보 확인
rpm -qa ${FILE_NAME}
# 파일 위치 확인
which ${FILE_NAME}
# 파일이 속한 rpm 패키지 확인
rpm -qf /usr/local/bin/${FILE_NAME}
# 파일 실행 확인
${FILE_NAME}
'Operating Systems > Linux' 카테고리의 다른 글
[ Linux ] TELNET 서버 설치 (0) | 2021.07.31 |
---|---|
[ Linux ] KERBEROS 서버 설치 (0) | 2021.07.30 |
[ Linux ] MAIL 서버 설치 (0) | 2021.07.24 |
[ Linux ] LDAP 서버 설치 (0) | 2021.07.20 |
[ Linux ] 고정 아이피 설정 (0) | 2021.07.11 |