나는 이미 그것을 보았다쉽게 DEB 압축 풀기, postinst 편집 및 DEB 재패키징- 그러나 원본 .deb 파일을 일부 변경하려는 경우 .deb 버전 번호를 올바르게 변경하는 방법이 문서에 설명되어 있지 않습니다.
예 를 들어 Ubuntu 14.04를 사용하고 있습니다 hostapd
.
$ mkdir /tmp/debtest
$ cd /tmp/debtest/
$ apt-get download hostapd
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty-updates/universe hostapd amd64 1:2.1-0ubuntu1.4 [423 kB]
Fetched 423 kB in 1s (361 kB/s)
$ ls -la hostapd_1%3a2.1-0ubuntu1.4_amd64.deb
-rw-rw-r-- 1 myuser myuser 422846 Nov 10 2015 hostapd_1%3a2.1-0ubuntu1.4_amd64.deb
이제 위에서 참조한 링크를 따라 압축을 풀 수 있습니다.
$ mkdir unpack-hostapd
$ dpkg-deb -R hostapd_1%3a2.1-0ubuntu1.4_amd64.deb unpack-hostapd
$ ls -la unpack-hostapd/
total 20
drwxr-xr-x 5 myuser myuser 4096 Jan 26 11:31 .
drwxrwxr-x 3 myuser myuser 4096 Jan 26 11:31 ..
drwxr-xr-x 2 myuser myuser 4096 Nov 9 2015 DEBIAN
drwxr-xr-x 6 myuser myuser 4096 Nov 9 2015 etc
drwxr-xr-x 4 myuser myuser 4096 Nov 9 2015 usr
README.Debian에 텍스트 한 줄을 추가하는 것과 같은 간단한 변경을 하고 싶다고 가정해 보겠습니다.
echo "Just a test line" >> unpack-hostapd/usr/share/doc/hostapd/README.Debian
...이제 새 .deb로 다시 패키지하고 싶습니다.
첫 번째 질문- 압축이 풀린 상태에서 패키지의 현재(이전) 버전을 검색할 수 있는 방법이 있습니까? 나는 파일 이름을 신뢰하지 않기 때문에 보통 다음과 같이 합니다.
$ apt-cache policy hostapd
hostapd:
Installed: (none)
Candidate: 1:2.1-0ubuntu1.4
...
...이는 사용할 때 패키지의 버전 1:2.1-0ubuntu1.4를 다운로드했음을 알려 주지만 apt-get download...
반드시 디렉토리에 있는 버전일 필요는 없습니다 unpack-hostapd
. 디렉토리에 추출한 원본 .deb의 패키지 버전을 알려주는 명령이 있습니까 unpack-hostapd
?
이제 이전 debchange
과 같이 자동 증가 버전 번호를 사용하고 있지만 dch -i
(다른 소스 프로젝트에서도) 여기에서 시도하면 다음과 같습니다.
$ cd unpack-hostapd
$ pwd
/tmp/debtest/unpack-hostapd
$ dch -e
dch: fatal error at line 580:
Cannot find debian/changelog anywhere!
Are you in the source code tree?
(You could use --create if you wish to create this file.)
$ find . -name 'changelog*'
./usr/share/doc/hostapd/changelog.Debian.gz
$ dpkg -c ../hostapd_1%3a2.1-0ubuntu1.4_amd64.deb | grep changelog
-rw-r--r-- root/root 2126 2015-11-09 14:56 ./usr/share/doc/hostapd/changelog.Debian.gz
...하지만 여기서는 아무것도 바꿀 수 없습니다.
그래서 나의두 번째 질문dch -i
예: .deb 패키지 버전 번호를 변경하고 압축을 푼 .deb 패키지에 변경 로그를 추가할 수 있는 쉬운 방법(소스 패키지와 마찬가지로)이 있습니까 ?
물론, 결국 저는 이 새 버전을 .deb 패키지로 다시 패키징하고 싶습니다. 위의 링크는 비슷한 것을 제안 dpkg-deb -b unpack-hostapd hostapd_1%3a2.1-0ubuntu1.4_amd64.deb
하지만 여기서는 version 을 사용하겠다고 나와 있으므로 1:2.2
결국에는 다음과 같은 파일 이름을 사용하겠습니다. dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_amd64.deb
- 하지만 버전은 .deb 일치에서도 작동해야 하는데 어떻게 해야 할지 모르겠습니다...
답변1
DEBIAN/control
버전은 바이너리 제어 파일에 정의되어 있으며 사용 시 추출됩니다 dpkg-deb -R
. 필드 찾기 Version:
:
Version: 1:2.5.2+v2.4-3+b1
여기에서 새 패키지의 버전 번호를 편집할 수 있습니다. (선택적으로 변경 로그 항목을 의 변경 로그에 추가할 수 있습니다 .) 그런 다음 올바른 파일 이름이 결정 usr/share/doc/hostapd/changelog.Debian.gz
되도록 다음과 같이 패키지를 다시 빌드할 수 있습니다 .dpkg-deb
mkdir newpkg
dpkg-deb -b hostapd newpkg
그러면 newpkg
디렉터리에 적절한 이름의 새 패키지가 생성됩니다.
이상적으로는 새 바이너리에 대한 라이브러리 요구 사항을 확인하고 종속성 정보를 업데이트해야 합니다 control
!
답변2
어떤 종류의 수동 편집이 나에게 도움이 되었는지는 다음과 같습니다. 그러나 이것은 맹목적인 추측이므로 시스템을 아는 사람으로부터 답변을 얻는 것이 좋습니다.
# decompress changelog.Debian.gz
unpack-hostapd$ gzip -d usr/share/doc/hostapd/changelog.Debian.gz
# edit the uncompressed changelog.Debian:
# add this on top:
# wpa (2.2) trusty-security; urgency=medium
#
# * whatever
#
# wpa (2.1-0ubuntu1.4) trusty-security; urgency=medium
# ....
unpack-hostapd$ nano usr/share/doc/hostapd/changelog.Debian
# repack changelog.Debian.gz
unpack-hostapd$ gzip -9 usr/share/doc/hostapd/changelog.Debian
# change DEBIAN/control - Source: and Version:
# change to:
# Source: wpa (2.2)
# Version: 1:2.2
unpack-hostapd$ nano DEBIAN/control
# repack .deb:
unpack-hostapd$ cd ..
$ dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_amd64.deb
# now can install the deb
sudo dpkg -i hostapd_1%3a2.2_amd64.deb