실행할 수 없는 postrm 스크립트가 포함된 deb 패키지를 만들었습니다.
오류 메시지에는 스크립트를 찾을 수 없지만 위치가 좋고 bash를 사용하여 수동으로 실행할 수 있으며 실행 권한이 괜찮은 것 같다고 나와 있습니다. 실패 원인을 찾으려면 또 무엇을 확인해야 합니까?
다음은 최소 postrm 스크립트의 버그가 있는 예입니다.
user@linux:~$ sudo apt-get remove mypkg
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
mypkg
0 upgraded, 0 newly installed, 1 to remove and 79 not upgraded.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 123043 files and directories currently installed.)
Removing mypkg (1.8.1) ...
dpkg (subprocess): unable to execute installed mypkg package post-removal script (/var/lib/dpkg/info/mypkg.postrm): No such file or directory
dpkg: error processing package mypkg (--remove):
installed mypkg package post-removal script subprocess returned error exit status 2
dpkg: too many errors, stopping
Errors were encountered while processing:
mypkg
Processing was halted because there were too many errors.
E: Sub-process /usr/bin/dpkg returned an error code (1)
user@linux:~$ more /var/lib/dpkg/info/mypkg.postrm
#!/bin/sh
echo "Post rm"
user@linux:~$ bash /var/lib/dpkg/info/mypkg.postrm
Post rm
user@linux:~$ ls -l /var/lib/dpkg/info/mypkg.*
-rwxr-xr-x 1 root root 30 Jun 15 17:39 /var/lib/dpkg/info/mypkg.conffiles
-rw-r--r-- 1 root root 60 Jun 21 10:27 /var/lib/dpkg/info/mypkg.list
-rw-r--r-- 1 root root 5052 Jun 21 10:21 /var/lib/dpkg/info/mypkg.md5sums
-rwxr-xr-x 1 root root 107 Jun 20 10:06 /var/lib/dpkg/info/mypkg.postinst
-rwxr-xr-x 1 root root 25 Jun 20 13:29 /var/lib/dpkg/info/mypkg.postrm
-rwxr-xr-x 1 root root 0 Jun 15 17:39 /var/lib/dpkg/info/mypkg.preinst
-rwxr-xr-x 1 root root 10 Jun 15 17:39 /var/lib/dpkg/info/mypkg.prerm
답변1
postrm 스크립트는 CRLF 줄 끝이 있는 Windows 시스템에서 생성되었기 때문에 작동하지 않습니다.
bash로 실행할 수 있기 때문에 그렇지 않다고 생각했습니다. 하지만 내 시스템의 /bin/sh는 대시를 가리키므로 postrm 스크립트를 직접 실행할 수 없습니다. @cas의 의견 덕분에 적절한 검사를 수행하고 문제를 발견했습니다.
user@linux:~$ file /var/lib/dpkg/info/mypkg.postrm
/var/lib/dpkg/info/mypkg.postrm: POSIX shell script, ASCII text executable, with CRLF line terminators
user@linux:~$ /var/lib/dpkg/info/mypkg.postrm
-bash: /var/lib/dpkg/info/mypkg.postrm: /bin/sh^M: bad interpreter: No such file or directory
user@linux:~$ ls -l /bin
lrwxrwxrwx 1 root root 7 Aug 24 2021 /bin -> usr/bin
user@linux:~$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 Aug 24 2021 /usr/bin/sh -> dash