1
0

2 Ревизии 49d49c4be9 ... 60027e5140

Автор SHA1 Съобщение Дата
  侠义书生 60027e5140 test2.sh分析列表 преди 3 години
  侠义书生 0dfd3fbd7c 分析列表添加一些日志 преди 3 години
променени са 4 файла, в които са добавени 224 реда и са изтрити 2 реда
  1. 47 0
      debootstrap/apt_list/analysis.awk
  2. 1 2
      debootstrap/apt_list/depends.awk
  3. 169 0
      debootstrap/apt_list/test2.sh
  4. 7 0
      debootstrap/my_debootstrap.sh

+ 47 - 0
debootstrap/apt_list/analysis.awk

@@ -0,0 +1,47 @@
+BEGIN {
+    LINO=1
+    PACKAGE_NAME=""
+    VERSION=""
+    PRIORITY=""
+    PREDEPENDS=""
+    DEPENDS=""
+    FILENAME=""
+}
+
+{
+    if ( $1 ~ "^Package:" ) {
+        LINO=NR
+        PACKAGE_NAME=$2
+        VERSION=""
+        PRIORITY=""
+        PREDEPENDS=""
+        DEPENDS=""
+        FILENAME=""
+    } else if ( $1 ~ "^Version:" ) {
+        VERSION=$2
+    } else if ( $1 ~ "^Priority:" ) {
+        PRIORITY=$2
+    } else if ( $1 ~ "^Pre-Depends:" ) {
+        sub(/^Pre-Depends: /, "")
+        PREDEPENDS=$0
+    } else if ( $1 ~ "^Depends:" ) {
+        sub(/^Depends: /, "")
+        DEPENDS=$0
+    } else if ( $1 ~ "^Filename:" ) {
+        FILENAME=$2
+    } else if ( $1 ~ "^Description:" ) {
+        if ( PRIORITY == SEARCH_STR ) {
+            print PACKAGE_NAME
+            # print PACKAGE_NAME,VERSION
+            # print DEPENDS
+            # print PACKAGE_NAME"\n"DEPENDS
+            # print PACKAGE_NAME"\n"PREDEPENDS"\n"DEPENDS
+            # print PREDEPENDS"\n"DEPENDS
+            # print LINO,PACKAGE_NAME,PRIORITY,PREDEPENDS,DEPENDS,FILENAME
+        }
+    }
+}
+
+END {
+    # print "end"
+}

+ 1 - 2
debootstrap/apt_list/depends.awk

@@ -51,7 +51,6 @@ BEGIN {
     } else if ( $1 ~ "^Filename:" ) {
         FILENAME=$2
     } else if ( $1 ~ "^Description:" ) {
-        # DEPENDS ~ SEARCH_STR || PREDEPENDS ~ SEARCH_STR
         if ( FIND==1 ) {
             # print PACKAGE_NAME
             # print LINO,PACKAGE_NAME,PRIORITY,PREDEPENDS,DEPENDS,FILENAME
@@ -66,4 +65,4 @@ BEGIN {
 
 END {
     # print "end"
-}
+}

+ 169 - 0
debootstrap/apt_list/test2.sh

@@ -0,0 +1,169 @@
+############################################################### mylog
+MY_LOG_FILE=/var/tmp/my_analysis.log
+: >${MY_LOG_FILE}
+
+mylog() {
+    if [ $# -eq 1 ]; then
+        echo "---> $1" >>${MY_LOG_FILE}
+    else
+        filename=$1
+        shift
+        echo "$@" >/var/tmp/${filename}
+    fi
+}
+
+mylog2() {
+    echo "---> $@" >>${MY_LOG_FILE}
+}
+
+# 查找依赖 pkgname 的包
+function t1() {
+    pkgname="bash"
+    result=$(awk -v SEARCH_STR="${pkgname}" -f depends.awk /var/tmp/indices/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages)
+    # echo "${result}"
+}
+
+# 查找 Priority 对应的包
+function t2() {
+    PRIO="required"
+    required=$(awk -v SEARCH_STR="${PRIO}" -f analysis.awk /var/tmp/indices/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages)
+    mylog "01-required.txt2" "${required}"
+
+    PRIO="important"
+    base=$(awk -v SEARCH_STR="${PRIO}" -f analysis.awk /var/tmp/indices/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages)
+    mylog "02-important.txt2" "${base}"
+}
+
+# apt list 分析
+function t3() {
+    MIRROR="/var/tmp/indices/172.29.220.242/mirror/kylin/dists"
+
+    # analysis.sh --repo ${MIRROR} --prio required | awk '{print $1}' |
+    #     xargs -i analysis.sh --repo ${MIRROR} --pkg {} |
+    #     grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' | tr ',' '\n' | tr '|' '\n' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq
+
+    analysis.sh --repo ${MIRROR} --prio required | awk '{print $1}' |
+        xargs -i analysis.sh --repo ${MIRROR} --pkg {} |
+        grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' |
+        tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq >/var/tmp/newpkgs.txt1
+}
+
+# 查找单个包
+function t4() {
+    . analysis.sh
+    analysis_sigle_file2 /var/tmp/indices/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages libpam-runtime |
+        grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' | tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq
+}
+
+pkgdetails_field() {
+    # uniq field mirror Packages values...
+    perl -le '
+$unique = shift @ARGV; $field = lc(shift @ARGV); $mirror = shift @ARGV;
+%fields = map { $_, 0 } @ARGV;
+$prevpkg = "";
+$chksumfield = lc($ENV{DEBOOTSTRAP_CHECKSUM_FIELD}).":";
+while (<STDIN>) {
+	if (/^([^:]*:)\s*(.*)$/) {
+		$f = lc($1); $v = $2;
+		if ($f eq "package:") {
+			$last = 0;
+			$pkg = $v;
+			if ($pkg ne $prevpkg) {
+				print $output if defined $output;
+				if ($unique && defined $output_val) {
+					delete $fields{$output_val};
+					$last = 1 unless keys %fields;
+				}
+				$prevpkg = $pkg;
+			}
+			undef $output;
+			undef $output_val;
+			last if $last;
+		}
+		$ver = $v if ($f eq "version:");
+		$arc = $v if ($f eq "architecture:");
+		$fil = $v if ($f eq "filename:");
+		$chk = $v if ($f eq $chksumfield);
+		$siz = $v if ($f eq "size:");
+		$val = $v if ($f eq $field);
+	} elsif (/^$/) {
+		if (defined $val && defined $fields{$val}) {
+			$output = sprintf "%s %s %s %s %s %s %s",
+			 $pkg, $ver, $arc, $mirror, $fil, $chk, $siz;
+			$output_val = $val;
+		}
+		undef $val;
+	}
+}
+print $output if defined $output;
+delete $fields{$output_val} if $unique && defined $output_val;
+for $v (keys %fields) {
+	printf ("%s -\n", $v) if ($unique);
+}
+' "$@"
+}
+
+without() {
+    # usage:  without "a b c" "a d" -> "b" "c"
+    (
+        echo "$1" | tr ' ' '\n' | sort | uniq
+        echo "$2" "$2" | tr ' ' '\n'
+    ) | sort | uniq -u | tr '\n' ' '
+    echo
+}
+
+resolve_deps() {
+    MIRROR="/var/tmp/indices/172.29.220.242/mirror/kylin/dists"
+
+    local PKGS="$*"
+    local ALLPKGS="$PKGS"
+    local ALLPKGS2=""
+    while [ "$PKGS" != "" ]; do
+        local NEWPKGS=""
+        # for s in $SUITE $EXTRA_SUITES; do
+        #     for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
+        #         local path="dists/$s/$c/binary-$ARCH/Packages"
+        #         local pkgdest="${TARGET_DIR}/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages"
+        #         NEWPKGS="$NEWPKGS $(pkgdetails_perl GETDEPS "$pkgdest" $PKGS)"
+        #     done
+        # done
+
+        NEWPKGS=$(echo "${PKGS}" | xargs -i analysis.sh --repo ${MIRROR} --pkg {} |
+            grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' |
+            tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq)
+
+        mylog "newpkgs.txt2" "$(echo ${NEWPKGS} | xargs | tr ' ' '\n')"
+
+        PKGS=$(echo "$PKGS $NEWPKGS" | tr ' ' '\n' | sort | uniq)
+
+        local REALPKGS=""
+        # for s in $SUITE $EXTRA_SUITES; do
+        #     for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
+        #         local path="dists/$s/$c/binary-$ARCH/Packages"
+        #         local pkgdest="${TARGET_DIR}/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages"
+        #         REALPKGS="$REALPKGS $(pkgdetails_perl PKGS REAL "$pkgdest" $PKGS | sed -n 's/ .*REAL.*$//p')"
+        #     done
+        # done
+
+        p="${TARGET_DIR}/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages"
+        m="REAL"
+        REALPKGS="$REALPKGS $(LC_ALL=C egrep '^$|^Architecture:|^Filename:|^MD5sum:|^Package:|^Priority:|^SHA256:|^Size:|^Version:|^Depends:|^Pre-Depends:' "$p" |
+            pkgdetails_field 1 Package: "$m" $PKGS | sed -n 's/ .*REAL.*$//p')"
+        mylog "realpkgs.txt2" "$(echo ${REALPKGS} | xargs | tr ' ' '\n')"
+
+        PKGS="$REALPKGS"
+        ALLPKGS2=$(echo "$PKGS $ALLPKGS" | tr ' ' '\n' | sort | uniq)
+        PKGS=$(without "$ALLPKGS2" "$ALLPKGS")
+
+        ALLPKGS="$ALLPKGS2"
+    done
+    echo "$ALLPKGS"
+}
+
+TARGET_DIR="/var/tmp/indices"
+
+SHELL_DIR=$(dirname $(readlink -f $0))
+
+PRIO="required"
+required=$(awk -v SEARCH_STR="${PRIO}" -f ${SHELL_DIR}/analysis.awk /var/tmp/indices/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages)
+resolve_deps "${required}"

+ 7 - 0
debootstrap/my_debootstrap.sh

@@ -12,6 +12,10 @@ mylog() {
     fi
 }
 
+mylog2() {
+    echo "---> $@" >>${MY_LOG_FILE}
+}
+
 smallyes() {
     YES="${1-y}"
     while echo "$YES" 2>/dev/null; do :; done
@@ -310,6 +314,7 @@ for $v (keys %fields) {
 }
 
 pkgdetails_perl() {
+    mylog2 "$@"
     if [ "$1" = "WGET%" ]; then
         shift
         perl -e '
@@ -439,6 +444,7 @@ resolve_deps() {
                 NEWPKGS="$NEWPKGS $(pkgdetails_perl GETDEPS "$pkgdest" $PKGS)"
             done
         done
+        mylog "newpkgs.txt" "$(echo ${NEWPKGS} | xargs | tr ' ' '\n')"
         PKGS=$(echo "$PKGS $NEWPKGS" | tr ' ' '\n' | sort | uniq)
         local REALPKGS=""
         for s in $SUITE $EXTRA_SUITES; do
@@ -449,6 +455,7 @@ resolve_deps() {
                 REALPKGS="$REALPKGS $(pkgdetails_perl PKGS REAL "$pkgdest" $PKGS | sed -n 's/ .*REAL.*$//p')"
             done
         done
+        mylog "realpkgs.txt" "$(echo ${REALPKGS} | xargs | tr ' ' '\n')"
         PKGS="$REALPKGS"
         ALLPKGS2=$(echo "$PKGS $ALLPKGS" | tr ' ' '\n' | sort | uniq)
         PKGS=$(without "$ALLPKGS2" "$ALLPKGS")