【GreatSQL优化器-12】make_tmp_tables_info

【GreatSQL优化器-12】make_tmp_tables_info

一、make_tmp_tables_info介绍

GreatSQL的优化器对于聚合函数和窗口函数需要创建内部临时表来进行计算并输出最后结果,这个内部临时表又需要原始表来作为数据输入源,具体的代码处理在make_tmp_tables_info函数实现。

下面用一个简单的例子来说明make_tmp_tables_info是做什么的。

greatsql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT,date1 DATETIME);
greatsql> INSERT INTO t1 VALUES (1,10,'2021-03-25 16:44:00.123456'),(2,1,'2022-03-26 16:44:00.123456'),(3,4,'2023-03-27 16:44:00.123456'),(5,5,'2024-03-25 16:44:00.123456'),(7,null,'2020-03-25 16:44:00.123456'),(8,10,'2020-10-25 16:44:00.123456'),(11,16,'2023-03-25 16:44:00.123456');
greatsql> CREATE TABLE t2 (cc1 INT PRIMARY KEY, cc2 INT);
greatsql> INSERT INTO t2 VALUES (1,3),(2,1),(3,2),(4,3),(5,15);
greatsql> CREATE TABLE t3 (ccc1 INT, ccc2 varchar(100));
greatsql> INSERT INTO t3 VALUES (1,'aa1'),(2,'bb1'),(3,'cc1'),(4,'dd1'),(null,'ee');
greatsql> CREATE INDEX idx1 ON t1(c2);
greatsql> CREATE INDEX idx2 ON t1(c2,date1);
greatsql> CREATE INDEX idx2_1 ON t2(cc2);
greatsql> CREATE INDEX idx3_1 ON t3(ccc1);

greatsql> select to_char(t1.c1),t1.c2+1 from t1 join t2 on t1.c1=t2.cc1 group by t1.c1,t1.c2;
         {
            "optimizing_distinct_group_by_order_by": {
              "simplifying_group_by": {
                "original_clause": "`t1`.`c1`,`t1`.`c2`",
                "items": [
                  {
                    "item": "`t1`.`c1`"
                  },
                  {
                    "item": "`t1`.`c2`"
                  }
                ],
                "resulting_clause_is_simple": false,
                "resulting_clause": "`t1`.`c1`,`t1`.`c2`"
              }
            }
          },
          {
            "finalizing_table_conditions": [
              {
                "table": "`t1`",
                "original_table_condition": "(`t1`.`c1` = `t2`.`cc1`)",
                "final_table_condition   ": null
              }
            ]
          },
          {
            "refine_plan": [
              {
                "table": "`t2`"
              },
              {
                "table": "`t1`"
              }
            ]
          },
          {
            "considering_tmp_tables": [ 这里创建临时表
              {
                "adding_tmp_table_in_plan_at_position": 2, 临时表总是添加在主表之后
                "write_method": "write_all_rows"
              }
            ]
          }
        ]
      }
    },
    {
    {
      "join_execution": {
        "select#": 1,
        "steps": [
          {
            "creating_tmp_table": {
              "tmp_table_info": {
                "table": "<temporary>",
                "in_plan_at_position": 2,
                "columns": 4, 这里有4个列,说明见下面
                "row_length": 64,
                "key_length": 9,
                "unique_constraint": false,
                "makes_grouped_rows": true,
          
make[10]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include/curl' make[9]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include/curl' make[9]: Entering directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include' make[10]: Entering directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include' make[10]: Nothing to be done for 'install-exec-am'. make[10]: Nothing to be done for 'install-data-am'. make[10]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include' make[9]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include' make[8]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/include' make[7]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1' make[6]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1' make[5]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1' make[4]: Leaving directory '/mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1' touch /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/.built mkdir -p /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/CONTROL /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo install -d -m0755 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/usr/lib cp -fpR /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/lib/libcurl.so.* /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/usr/lib/ find /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf export CROSS="aarch64-openwrt-linux-musl-" NO_RENAME=1 ; NM="aarch64-openwrt-linux-musl-nm" STRIP="aarch64-openwrt-linux-musl-strip --strip-all" STRIP_KMOD="/mydisk/omada_gateway/scripts/strip-kmod.sh" /mydisk/omada_gateway/scripts/rstrip.sh /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl rstrip.sh: /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/usr/lib/libcurl.so.4.8.0:shared object ( echo "Package: libcurl"; echo "Version: 7.83.1"; DEPENDS=''; for depend in libc libopenssl ca-bundle librt; do DEPENDS=${DEPENDS:+$DEPENDS, }${depend##+}; done; [ -z "$DEPENDS" ] || echo "Depends: $DEPENDS"; echo "Source: package/network/utils/curl"; echo "License: MIT"; echo "LicenseFiles: COPYING"; echo "Section: libs"; echo "Maintainer: Stan Grishin <stangri@melmac.ca>"; echo "Architecture: aarch64_cortex-a53"; echo "Installed-Size: 0"; echo -n "Description: "; . /mydisk/omada_gateway/include/shell.sh; getvar V_Package_libcurl_description | sed -e 's,^[[:space:]]*, ,g'; ) > /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/CONTROL/control chmod 644 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/CONTROL/control . /mydisk/omada_gateway/include/shell.sh; (cd /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl/CONTROL; ) install -d -m0755 /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages ipkg-build -c -o 0 -g 0 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages Packaged contents of /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/libcurl into /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages/libcurl_7.83.1_aarch64_cortex-a53.ipk rm -rf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl mkdir -p /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/stamp /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl install -d -m0755 /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl/usr/lib cp -fpR /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/lib/libcurl.so.* /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl/usr/lib/ SHELL= /mydisk/omada_gateway/staging_dir/host/bin/flock /mydisk/omada_gateway/tmp/.root-copy.flock -c 'cp -fpR /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl/. /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/' rm -rf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl touch /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/stamp/.libcurl_installed echo '4' | cmp -s - /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/libcurl.version || echo '4' > /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/libcurl.version if [ -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install.clean ]; then rm -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install.clean; fi; echo "libcurl" >> /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install make V=ss -j1 clean-staging make[4]: Entering directory '/mydisk/omada_gateway/package/network/utils/curl' rm -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.curl_installed make[4]: Leaving directory '/mydisk/omada_gateway/package/network/utils/curl' rm -rf /mydisk/omada_gateway/tmp/stage-curl mkdir -p /mydisk/omada_gateway/tmp/stage-curl/host /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/packages /mydisk/omada_gateway/staging_dir/host/packages install -d -m0755 /mydisk/omada_gateway/tmp/stage-curl/host/bin /mydisk/omada_gateway/tmp/stage-curl/usr/bin /mydisk/omada_gateway/tmp/stage-curl/usr/include /mydisk/omada_gateway/tmp/stage-curl/usr/lib /mydisk/omada_gateway/tmp/stage-curl/usr/lib/pkgconfig install -m0755 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/bin/curl-config /mydisk/omada_gateway/tmp/stage-curl/usr/bin/ cp -fpR /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/include/curl /mydisk/omada_gateway/tmp/stage-curl/usr/include/ cp -fpR /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/lib/libcurl.{a,so*} /mydisk/omada_gateway/tmp/stage-curl/usr/lib/ cp -fpR /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/libcurl.pc /mydisk/omada_gateway/tmp/stage-curl/usr/lib/pkgconfig/ /mydisk/omada_gateway/staging_dir/host/bin/sed -i -e 's,^\(prefix\|exec_prefix\)=.*,\1=/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr,g' /mydisk/omada_gateway/tmp/stage-curl/usr/bin/curl-config [ -n "-L/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr/lib -L/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/lib -L/mydisk/omada_gateway/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl-1.2.4/usr/lib -L/mydisk/omada_gateway/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl-1.2.4/lib -Wl,--gc-sections" ] && /mydisk/omada_gateway/staging_dir/host/bin/sed -i -e 's#-L/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr/lib -L/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/lib -L/mydisk/omada_gateway/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl-1.2.4/usr/lib -L/mydisk/omada_gateway/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl-1.2.4/lib -Wl,--gc-sections##g' /mydisk/omada_gateway/tmp/stage-curl/usr/lib/pkgconfig/libcurl.pc || true ln -sf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr/bin/curl-config /mydisk/omada_gateway/tmp/stage-curl/host/bin/ find /mydisk/omada_gateway/tmp/stage-curl -name '*.la' | xargs -r rm -f; if [ -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/packages/curl.list ]; then /mydisk/omada_gateway/scripts/clean-package.sh "/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/packages/curl.list" "/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1"; fi if [ -d /mydisk/omada_gateway/tmp/stage-curl ]; then (cd /mydisk/omada_gateway/tmp/stage-curl; find ./ > /mydisk/omada_gateway/tmp/stage-curl.files); SHELL= /mydisk/omada_gateway/staging_dir/host/bin/flock /mydisk/omada_gateway/tmp/.staging-dir.flock -c ' mv /mydisk/omada_gateway/tmp/stage-curl.files /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/packages/curl.list && cp -fpR /mydisk/omada_gateway/tmp/stage-curl/* /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/; '; fi rm -rf /mydisk/omada_gateway/tmp/stage-curl touch /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.curl_installed mkdir -p /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/CONTROL /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo install -d -m0755 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/usr/bin install -m0755 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/bin/curl /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/usr/bin/ find /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf export CROSS="aarch64-openwrt-linux-musl-" NO_RENAME=1 ; NM="aarch64-openwrt-linux-musl-nm" STRIP="aarch64-openwrt-linux-musl-strip --strip-all" STRIP_KMOD="/mydisk/omada_gateway/scripts/strip-kmod.sh" /mydisk/omada_gateway/scripts/rstrip.sh /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl rstrip.sh: /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/usr/bin/curl:executable ( echo "Package: curl"; echo "Version: 7.83.1"; DEPENDS=''; for depend in libc libcurl; do DEPENDS=${DEPENDS:+$DEPENDS, }${depend##+}; done; [ -z "$DEPENDS" ] || echo "Depends: $DEPENDS"; echo "Source: package/network/utils/curl"; echo "License: MIT"; echo "LicenseFiles: COPYING"; echo "Section: net"; echo "Maintainer: Stan Grishin <stangri@melmac.ca>"; echo "Architecture: aarch64_cortex-a53"; echo "Installed-Size: 0"; echo -n "Description: "; . /mydisk/omada_gateway/include/shell.sh; getvar V_Package_curl_description | sed -e 's,^[[:space:]]*, ,g'; ) > /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/CONTROL/control chmod 644 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/CONTROL/control . /mydisk/omada_gateway/include/shell.sh; (cd /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/CONTROL; ) install -d -m0755 /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages ipkg-build -c -o 0 -g 0 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages Packaged contents of /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl into /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages/curl_7.83.1_aarch64_cortex-a53.ipk rm -rf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl mkdir -p /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/stamp /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl install -d -m0755 /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl/usr/bin install -m0755 /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-install/usr/bin/curl /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl/usr/bin/ SHELL= /mydisk/omada_gateway/staging_dir/host/bin/flock /mydisk/omada_gateway/tmp/.root-copy.flock -c 'cp -fpR /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl/. /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/' rm -rf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl touch /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/stamp/.curl_installed if [ -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install.clean ]; then rm -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install.clean; fi; echo "curl" >> /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/pkginfo/curl.default.install make[3]: Leaving directory '/mydisk/omada_gateway/package/network/utils/curl' make[2]: Leaving directory '/mydisk/omada_gateway' package/Makefile:202: recipe for target '/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.package_compile' failed make[1]: *** [/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.package_compile] Error 2 make[1]: Leaving directory '/mydisk/omada_gateway' /mydisk/omada_gateway/include/toplevel.mk:171: recipe for target 'world' failed make: *** [world] Error 2
11-18
<think>好的,我现在需要分析用户提供的编译日志,并找出可能导致编译失败的原因。首先,用户之前已经讨论过OpenWrt SDK编译中的错误,特别是关于curl包的编译问题。现在用户提供了详细的make输出,我需要仔细查看日志中的错误信息。 首先,我会从最后几行开始检查,因为通常错误信息会出现在那里。根据用户提供的日志,最后几行显示: package/Makefile:202: recipe for target '/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.package_compile' failed make[1]: *** [/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.package_compile] Error 2 make[1]: Leaving directory '/mydisk/omada_gateway' /mydisk/omada_gateway/include/toplevel.mk:171: recipe for target 'world' failed make: *** [world] Error 2 这表明在编译过程中,某个包(可能是curl)的安装步骤失败了,导致整个编译流程中断。但用户提供的日志中并没有直接显示具体的错误信息,比如“error:”或“failed”等关键词。这可能意味着在之前的步骤中存在隐藏的问题,或者错误发生在某个子过程中,而日志没有完全显示。 接下来,我需要回顾整个日志,寻找可能的线索。例如,是否有文件未找到、权限问题、依赖缺失,或者命令执行失败的情况。用户之前的对话中提到了stamp文件的问题,以及清理和重新编译的步骤,因此可能需要检查stamp文件是否正确生成,或者路径是否存在权限问题。 在日志中,可以看到curl包的编译和安装步骤成功完成,生成了ipk文件,并进行了打包。例如: Packaged contents of /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl into /mydisk/omada_gateway/bin/mediatek-er706wp-4g_un_v1/packages/curl_7.83.1_aarch64_cortex-a53.ipk 这说明curl的编译和打包没有问题。但随后,在清理staging目录时,执行了`make V=ss -j1 clean-staging`,这可能是一个关键点。需要检查这个步骤是否导致了错误。 查看该步骤的日志: make V=ss -j1 clean-staging make[4]: Entering directory '/mydisk/omada_gateway/package/network/utils/curl' rm -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.curl_installed make[4]: Leaving directory '/mydisk/omada_gateway/package/network/utils/curl' 这里只是删除了.stamp文件,没有明显的错误。但之后继续执行了安装到staging目录的操作,可能在此过程中出现错误。例如,在安装文件到staging目录时,是否有权限问题或路径不存在? 接下来,日志显示创建了各种目录,并复制了文件,如curl-config、include目录、libcurl库文件等。最后,使用ipkg-build打包,成功生成了ipk文件。然后,在安装到root-mediatek目录时,使用了flock命令进行锁定,可能在此步骤出现权限问题或锁定失败。 例如: SHELL= /mydisk/omada_gateway/staging_dir/host/bin/flock /mydisk/omada_gateway/tmp/.root-copy.flock -c 'cp -fpR /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-libcurl/. /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/' 如果flock无法获取锁,或者目标路径权限不足,可能导致复制失败。但日志中没有显示错误信息,因此需要进一步分析。 另一个可能的问题是,在执行rstrip.sh脚本时,可能对某些文件进行了strip操作,但strip工具可能有问题。例如: rstrip.sh: /mydisk/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/curl-7.83.1/ipkg-aarch64_cortex-a53/curl/usr/bin/curl:executable 这行显示rstrip.sh处理了curl可执行文件,但没有错误信息。不过,如果strip工具本身有问题,或者目标架构不匹配,可能会导致问题,但日志中没有显示错误。 另外,检查是否在某个步骤中,某个命令返回了非零退出码,但被忽略了。例如,在sed修改pc文件的步骤中: [ -n "-L/..." ] && /mydisk/omada_gateway/staging_dir/host/bin/sed -i -e 's#...##g' /mydisk/omada_gateway/tmp/stage-curl/usr/lib/pkgconfig/libcurl.pc || true 这里即使替换失败,也会继续执行(|| true),所以可能不会导致错误。 可能的问题在于,在某个步骤中生成的文件或目录权限不足,或者路径不存在。例如,在安装到root-mediatek时,tmp-curl目录的创建或复制过程中出现问题。或者,在生成.stamp文件时,路径权限不足。 另外,用户之前的问题提到了stamp文件的生成,可能需要检查是否在clean-staging之后,某些.stamp文件未被正确重新生成,导致后续步骤失败。 总结可能的错误原因: 1. **权限问题**:在复制文件到staging_dir或root-mediatek目录时,用户没有足够的权限,导致文件无法写入。 2. **路径不存在或权限不足**:某些中间目录(如tmp-curl或root-mediatek下的目录)未正确创建,或者权限设置不正确。 3. **flock锁定问题**:在执行flock命令时,无法获取锁文件(/mydisk/omada_gateway/tmp/.root-copy.flock),导致复制失败。 4. **strip操作失败**:虽然日志中没有显示错误,但rstrip.sh可能修改了某些必要的符号,导致后续步骤失败。 5. **依赖问题**:虽然curl编译成功,但其他依赖包可能有问题,导致在安装到root目录时出现依赖缺失。 6. **磁盘空间不足**:在编译过程中磁盘空间耗尽,导致某些文件无法写入。 7. **交叉编译器问题**:虽然curl编译成功,但其他包可能因编译器配置问题失败。 由于用户提供的日志中没有明确的错误信息,可能需要建议用户运行`make V=s`以获取更详细的输出,或者检查其他包的日志文件。此外,清理相关目录并重新编译可能解决问题。</think>根据提供的编译日志,虽然 **curl 包本身编译成功**(生成了 `curl_7.83.1_aarch64_cortex-a53.ipk`),但最终在 **安装到根文件系统阶段** 失败。以下是关键原因分析和解决方案: --- ### **根本原因** 1. **安装阶段依赖路径问题** - 日志显示最后一步尝试将 `curl` 安装到根文件系统时失败(`/mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek`)。 - **常见问题**:`flock` 命令锁文件权限不足,或目标路径权限不匹配。 2. **隐藏的符号链接或文件冲突** - 日志中提到 `ln -sf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr/bin/curl-config`,如果目标路径已有同名符号链接且权限受限,会导致失败。 3. **多线程编译副作用** - 虽然当前用 `-j1` 单线程编译,但之前的多线程操作可能遗留了不一致的状态。 --- ### **解决方案** #### 1. **清理并重新编译** ```bash # 清理 curl 及其依赖的 staging_dir rm -rf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/root-mediatek/tmp-curl rm -rf /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/stamp/.curl_installed # 强制重新编译 curl make package/network/utils/curl/compile V=s ``` #### 2. **检查锁文件权限** ```bash # 确保锁文件目录权限 sudo chown -R $USER:$USER /mydisk/omada_gateway/tmp sudo chmod -R 777 /mydisk/omada_gateway/tmp/.root-copy.flock ``` #### 3. **验证符号链接** ```bash # 检查是否存在冲突的符号链接 ls -l /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr/bin/curl-config # 如果存在且损坏,手动删除后重试 rm -f /mydisk/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er706wp-4g_un_v1/usr/bin/curl-config ``` #### 4. **检查磁盘空间** ```bash # 确认磁盘剩余空间充足 df -h /mydisk/omada_gateway ``` #### 5. **调试根文件系统安装** ```bash # 手动执行安装步骤(模拟 make 行为) cd /mydisk/omada_gateway make package/curl/install ``` --- ### **关键调试命令** ```bash # 查看详细错误日志 tail -n 100 /mydisk/omada_gateway/logs/curl/compile.log # 检查锁文件是否被占用 lsof /mydisk/omada_gateway/tmp/.root-copy.flock # 验证交叉编译器可用性 aarch64-openwrt-linux-musl-strip --version ``` --- ### **总结** 此错误本质是 **根文件系统安装阶段的权限或路径冲突**,而非 curl 编译失败。通过清理相关目录、修复权限并重新编译即可解决。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值