Alpine apk에서 오류 세부 정보를 표시하는 방법

Alpine apk에서 오류 세부 정보를 표시하는 방법

저는 Alpine Linux 3.9.3 x86_64를 사용하고 있습니다.

내가 발행할 때:

# apk upgrade

출력은 다음과 같습니다

3 errors; 1973 MiB in 519 packages

이 3가지 오류에 대한 세부정보를 어떻게 얻을 수 있나요? 플래그 를 시도했지만 --verbose결과는 동일합니다.

제가 생각하는 해결 방법은 다음과 같습니다.

apk -sv fix

-s(또는 --simulate) 이 작업을 수행하지 않고 수리를 시뮬레이션해야 하며 -v(또는 --verbose) 더 자세한 내용을 표시해야 하지만 둘 다 작동하지 않습니다.

결과 :

# apk -sv fix
(1/3) Reinstalling fuse-common (3.2.6-r1)
(2/3) Reinstalling fuse-openrc (3.2.6-r1)
(3/3) Reinstalling xorgproto (2018.4-r0)
3 errors; 524 packages, 2845 dirs, 48016 files, 2002 MiB

하지만 아직 자세한 내용은 없고 간략한 요약만 있습니다. 무슨 일이 일어나고 있는지 알고 싶지만 로그나 그와 유사한 것을 찾을 수 없습니다.

답변1

apk fix

이 명령은 오류를 나열하고 수정합니다.

답변2

나는 같은 문제를 겪었고 오류 세부 정보를 표시하는 방법을 찾기 위해 소스 코드를 읽어 보았습니다. 불행하게도 CLI가 할 수 있는 일은 아무것도 없다고 생각합니다 apk.

하지만...

존재하다src/commit.c#L365-L382, 출력의 잘못된 숫자가 변수에 저장된 것 같습니다 errors. 예를 들어, 3 errors; 1973 MiB in 519 packages.

    if (errors)
        snprintf(buf, sizeof(buf), "%d error%s;", errors,
             errors > 1 ? "s" : "");
    else
        strcpy(buf, "OK:");
    if (apk_verbosity > 1) {
        apk_message("%s %d packages, %d dirs, %d files, %zu MiB",
                buf,
                db->installed.stats.packages,
                db->installed.stats.dirs,
                db->installed.stats.files,
                db->installed.stats.bytes / (1024 * 1024));
    } else {
        apk_message("%s %zu MiB in %d packages",
                buf,
                db->installed.stats.bytes / (1024 * 1024),
                db->installed.stats.packages);
    }

존재하다src/commit.c#L333-L352,이 값은 ipkg(설치된 패키지 참조)가 true로 평가될 때 errors증가됩니다 . 그래서 우리는 그것을 차별화할 기회가 있습니다.broken_filesbroken_scripts

    r = change->old_pkg &&
        (change->old_pkg->ipkg->broken_files ||
         change->old_pkg->ipkg->broken_script);
    if (print_change(db, change, prog.done.changes, prog.total.changes)) {
        prog.pkg = change->new_pkg;
        progress_cb(&prog, 0);

        if (!(apk_flags & APK_SIMULATE) &&
            ((change->old_pkg != change->new_pkg) ||
             (change->reinstall && pkg_available(db, change->new_pkg)))) {
            r = apk_db_install_pkg(db, change->old_pkg, change->new_pkg,
                           progress_cb, &prog) != 0;
        }
        if (r == 0 && change->new_pkg && change->new_pkg->ipkg)
            change->new_pkg->ipkg->repository_tag = change->new_repository_tag;
    }
    errors += r;

코드를 읽은 후src/database.c#L874-L885, 설치된 패키지에 대한 정보를 저장하는 데이터베이스 파일이 있음을 보여줍니다.문서화되지 않은문자 필드는 f우리가 알고 싶은 오류 유형을 나타냅니다.

    case 'f':
        for (r = 0; r < l.len; r++) {
            switch (l.ptr[r]) {
            case 'f': ipkg->broken_files = 1; break;
            case 's': ipkg->broken_script = 1; break;
            case 'x': ipkg->broken_xattr = 1; break;
            default:
                if (!(apk_force & APK_FORCE_OLD_APK))
                    goto old_apk_tools;
            }
        }
        break;

개념의 증거

이 패키지 fontconfiggdk-pixbuf둘 다 손상된 스크립트( f:s)를 가지고 있습니다.

$ docker run -it --rm richarvey/nginx-php-fpm:1.5.7 sh

# apk --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/main add jq sqlite imagemagick gearmand@testing
fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
fetch http://nl.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
(1/53) Installing boost-program_options (1.71.0-r0)
(2/53) Installing libcrypto1.1 (1.1.1d-r2)
(3/53) Installing libssl1.1 (1.1.1d-r2)
(4/53) Installing libevent (2.1.10-r0)
(5/53) Installing libuuid (2.34-r0)
(6/53) Installing gearman-libs@testing (1.1.18-r7)
(7/53) Installing hiredis (0.14.0-r2)
(8/53) Installing libmemcached-libs (1.0.18-r4)
(9/53) Installing gearmand@testing (1.1.18-r7)
Executing gearmand-1.1.18-r7.pre-install
(10/53) Installing libxau (1.0.9-r0)
(11/53) Installing libbsd (0.10.0-r0)
(12/53) Installing libxdmcp (1.1.3-r0)
(13/53) Installing libxcb (1.13.1-r0)
(12/53) Installing libxdmcp (1.1.3-r0)
(13/53) Installing libxcb (1.13.1-r0)
(14/53) Installing libx11 (1.6.9-r0)
(15/53) Installing libxext (1.3.4-r0)
(16/53) Installing fontconfig (2.13.1-r2)
(17/53) Installing lcms2 (2.9-r1)
(18/53) Installing libltdl (2.4.6-r6)
(19/53) Installing imagemagick-libs (7.0.8.64-r0)
(20/53) Installing libxrender (0.9.10-r3)
(21/53) Installing pixman (0.38.4-r0)
(22/53) Installing cairo (1.16.0-r2)
(23/53) Installing libblkid (2.34-r0)
(24/53) Installing libmount (2.34-r0)
(25/53) Installing glib (2.62.1-r0)
(26/53) Installing dbus-libs (1.12.16-r1)
(27/53) Installing avahi-libs (0.7-r2)
(28/53) Installing gmp (6.1.2-r1)
(29/53) Installing nettle (3.5.1-r0)
(30/53) Installing p11-kit (0.23.18.1-r0)
(31/53) Installing libtasn1 (4.14-r0)
(32/53) Installing libunistring (0.9.10-r0)
(33/53) Installing gnutls (3.6.10-r0)
(34/53) Installing cups-libs (2.2.12-r0)
(35/53) Installing jbig2dec (0.16-r0)
(36/53) Installing tiff (4.0.10-r1)
(37/53) Installing ghostscript (9.27-r4)
(38/53) Installing libde265 (1.0.3-r0)
(39/53) Installing x265-libs (3.2-r0)
(40/53) Installing libheif (1.5.1-r1)
(41/53) Installing libxft (2.3.3-r0)
(42/53) Installing fribidi (1.0.7-r0)
(43/53) Installing graphite2 (1.3.13-r1)
(44/53) Installing harfbuzz (2.6.2-r0)
(45/53) Installing pango (1.44.6-r0)
(46/53) Installing libcroco (0.6.13-r1)
(47/53) Installing shared-mime-info (1.12-r1)
(48/53) Installing gdk-pixbuf (2.40.0-r0)
(49/53) Installing librsvg (2.40.20-r0)
(50/53) Installing imagemagick (7.0.8.64-r0)
(51/53) Installing oniguruma (6.9.3-r0)
(52/53) Installing jq (1.6-r0)
(53/53) Installing sqlite (3.25.3-r2)
Executing busybox-1.28.4-r1.trigger
Executing ca-certificates-20171114-r3.trigger
Executing fontconfig-2.13.1-r2.trigger
Error relocating /lib/libuuid.so.1: getrandom: symbol not found
ERROR: fontconfig-2.13.1-r2.trigger: script exited with error 127
Executing shared-mime-info-1.12-r1.trigger
Executing gdk-pixbuf-2.40.0-r0.trigger
Error relocating /lib/libmount.so.1: getrandom: symbol not found
Error relocating /lib/libblkid.so.1: getrandom: symbol not found
ERROR: gdk-pixbuf-2.40.0-r0.trigger: script exited with error 127
OK: 293 MiB in 136 packages
# apk fix -sv
(1/2) [APK unavailable, skipped] Reinstalling fontconfig (2.13.1-r2)
(2/2) [APK unavailable, skipped] Reinstalling gdk-pixbuf (2.40.0-r0)
2 errors; 155 packages, 1117 dirs, 15483 files, 456 MiB
# cat /lib/apk/db/installed | grep '^f:' -C 20 | grep '^\(P\|f\):'
P:fontconfig
f:s
P:gdk-pixbuf
f:s

관련 정보