365 lines
12 KiB
Diff
365 lines
12 KiB
Diff
From 484852b127dab5f5548ed34d5bb668b18e4dc99e Mon Sep 17 00:00:00 2001
|
|
From: zhongtao <taozh97@163.com>
|
|
Date: Fri, 9 Dec 2022 07:01:31 +0000
|
|
Subject: [PATCH 58/65] !1757 add adaption code for musl. * add adaption code
|
|
for musl.
|
|
|
|
---
|
|
cmake/checker.cmake | 2 +-
|
|
cmake/options.cmake | 12 ++++++++++++
|
|
cmake/set_build_flags.cmake | 5 +++++
|
|
src/CMakeLists.txt | 6 +++---
|
|
src/daemon/common/selinux_label.c | 2 +-
|
|
src/daemon/common/sysinfo.c | 4 ++--
|
|
src/daemon/executor/container_cb/execution_stream.c | 2 +-
|
|
src/daemon/modules/image/CMakeLists.txt | 2 +-
|
|
src/daemon/modules/image/image.c | 6 ++++--
|
|
src/daemon/modules/image/image_rootfs_handler.c | 12 ++++++------
|
|
src/utils/cutils/CMakeLists.txt | 2 +-
|
|
src/utils/cutils/utils.c | 13 +++++++++----
|
|
src/utils/cutils/utils.h | 2 +-
|
|
src/utils/cutils/utils_verify.c | 8 ++++----
|
|
14 files changed, 51 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/cmake/checker.cmake b/cmake/checker.cmake
|
|
index cbcfc929..fea4f925 100644
|
|
--- a/cmake/checker.cmake
|
|
+++ b/cmake/checker.cmake
|
|
@@ -54,7 +54,7 @@ find_library(CRYPTO_LIBRARY crypto
|
|
HINTS ${PC_CRYPTO_LIBDIR} ${PC_LIBCRYPTO_LIBRARY_DIRS})
|
|
_CHECK(CRYPTO_LIBRARY "CRYPTO_LIBRARY-NOTFOUND" "libcrypto.so")
|
|
|
|
-if (ANDROID)
|
|
+if (ANDROID OR MUSL)
|
|
# check libssl
|
|
find_library(LIBSSL_LIBRARY ssl)
|
|
_CHECK(CRYPTO_LIBRARY "LIBSSL_LIBRARY-NOTFOUND" "libssl.so")
|
|
diff --git a/cmake/options.cmake b/cmake/options.cmake
|
|
index 7a141fef..0d44868a 100644
|
|
--- a/cmake/options.cmake
|
|
+++ b/cmake/options.cmake
|
|
@@ -115,6 +115,18 @@ if (ENABLE_SUP_GROUPS)
|
|
message("${Green}-- Enable sup groups${ColourReset}")
|
|
endif()
|
|
|
|
+option(MUSL "available for musl" OFF)
|
|
+if (MUSL)
|
|
+ add_definitions(-D__MUSL__)
|
|
+ message("${Green}-- Available for MUSL${ColourReset}")
|
|
+endif()
|
|
+
|
|
+option(ANDROID "available for android" OFF)
|
|
+if (ANDROID)
|
|
+ add_definitions(-D__ANDROID__)
|
|
+ message("${Green}-- Available for ANDROID${ColourReset}")
|
|
+endif()
|
|
+
|
|
if (NOT RUNPATH)
|
|
set(RUNPATH "/var/run")
|
|
endif()
|
|
diff --git a/cmake/set_build_flags.cmake b/cmake/set_build_flags.cmake
|
|
index fa6f38c0..89c9468c 100644
|
|
--- a/cmake/set_build_flags.cmake
|
|
+++ b/cmake/set_build_flags.cmake
|
|
@@ -9,6 +9,11 @@ endif()
|
|
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-E -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wtrampolines -shared -pthread")
|
|
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-E -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -Wtrampolines -pie -rdynamic")
|
|
|
|
+if (NOT DISABLE_WERROR)
|
|
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
|
|
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
|
|
+endif()
|
|
+
|
|
if (ISULAD_GCOV)
|
|
set(CMAKE_C_FLAGS_DEBUG "-Wall -fprofile-arcs -ftest-coverage")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -fprofile-arcs -ftest-coverage")
|
|
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
index 65bcb978..f3dd3c19 100644
|
|
--- a/src/CMakeLists.txt
|
|
+++ b/src/CMakeLists.txt
|
|
@@ -102,7 +102,7 @@ add_executable(isula
|
|
)
|
|
target_include_directories(isula PUBLIC ${ISULA_INCS} ${SHARED_INCS})
|
|
target_link_libraries(isula libisula ${LIBYAJL_LIBRARY})
|
|
-if (ANDROID)
|
|
+if (ANDROID OR MUSL)
|
|
target_link_libraries(isula ${LIBSSL_LIBRARY})
|
|
else()
|
|
target_link_libraries(isula -lpthread)
|
|
@@ -115,7 +115,7 @@ add_executable(isulad-shim
|
|
)
|
|
target_include_directories(isulad-shim PUBLIC ${ISULAD_SHIM_INCS} ${SHARED_INCS})
|
|
target_link_libraries(isulad-shim libisulad_tools)
|
|
-if (ANDROID)
|
|
+if (ANDROID OR MUSL)
|
|
target_link_libraries(isulad-shim ${LIBSSL_LIBRARY} ${LIBYAJL_LIBRARY})
|
|
else()
|
|
target_link_libraries(isulad-shim -lpthread)
|
|
@@ -181,7 +181,7 @@ else()
|
|
endif()
|
|
|
|
target_link_libraries(isulad libisulad_tools libhttpclient -ldl)
|
|
-if (ANDROID)
|
|
+if (ANDROID OR MUSL)
|
|
target_link_libraries(isulad ${LIBSSL_LIBRARY} ${LIBYAJL_LIBRARY})
|
|
else()
|
|
target_link_libraries(isulad -lpthread)
|
|
diff --git a/src/daemon/common/selinux_label.c b/src/daemon/common/selinux_label.c
|
|
index 145e4b6e..24294780 100644
|
|
--- a/src/daemon/common/selinux_label.c
|
|
+++ b/src/daemon/common/selinux_label.c
|
|
@@ -592,7 +592,7 @@ static int container_label(char **process_label, char **file_label)
|
|
return 0;
|
|
}
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
lxc_path = ISULAD_DAEMON_CONTAINER_CONTEXTS;
|
|
#else
|
|
lxc_path = selinux_lxc_contexts_path();
|
|
diff --git a/src/daemon/common/sysinfo.c b/src/daemon/common/sysinfo.c
|
|
index d52f8767..e7b3807b 100644
|
|
--- a/src/daemon/common/sysinfo.c
|
|
+++ b/src/daemon/common/sysinfo.c
|
|
@@ -1308,7 +1308,7 @@ out:
|
|
return ret;
|
|
}
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
static bool cgroup2_no_controller()
|
|
{
|
|
char *controllers_str = NULL;
|
|
@@ -1336,7 +1336,7 @@ static int make_sure_cgroup2_isulad_path_exist()
|
|
return -1;
|
|
}
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
if (cgroup2_no_controller()) {
|
|
DEBUG("no cgroup controller found");
|
|
return 0;
|
|
diff --git a/src/daemon/executor/container_cb/execution_stream.c b/src/daemon/executor/container_cb/execution_stream.c
|
|
index 9af6fb5c..ebb9ee2b 100644
|
|
--- a/src/daemon/executor/container_cb/execution_stream.c
|
|
+++ b/src/daemon/executor/container_cb/execution_stream.c
|
|
@@ -63,7 +63,7 @@
|
|
#include "utils_file.h"
|
|
#include "utils_verify.h"
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
#define SIG_CANCEL_SIGNAL SIGUSR1
|
|
#define PTHREAD_CANCEL_ENABLE 1
|
|
#define PTHREAD_CANCEL_DISABLE 0
|
|
diff --git a/src/daemon/modules/image/CMakeLists.txt b/src/daemon/modules/image/CMakeLists.txt
|
|
index 329d2937..6f9e9936 100644
|
|
--- a/src/daemon/modules/image/CMakeLists.txt
|
|
+++ b/src/daemon/modules/image/CMakeLists.txt
|
|
@@ -117,7 +117,7 @@ target_link_libraries(${LIB_ISULAD_IMG}
|
|
${ZLIB_LIBRARY}
|
|
libhttpclient)
|
|
|
|
-if (NOT ANDROID)
|
|
+if ((NOT ANDROID) AND (NOT MUSL))
|
|
target_link_libraries(${LIB_ISULAD_IMG} -lpthread)
|
|
endif()
|
|
|
|
diff --git a/src/daemon/modules/image/image.c b/src/daemon/modules/image/image.c
|
|
index fb0db361..8fb226aa 100644
|
|
--- a/src/daemon/modules/image/image.c
|
|
+++ b/src/daemon/modules/image/image.c
|
|
@@ -1773,7 +1773,8 @@ int im_container_export(const im_export_request *request)
|
|
#endif
|
|
|
|
#ifdef ENABLE_OCI_IMAGE
|
|
-char *im_get_rootfs_dir(const im_get_rf_dir_request *request) {
|
|
+char *im_get_rootfs_dir(const im_get_rf_dir_request *request)
|
|
+{
|
|
char *dir = NULL;
|
|
struct bim *bim = NULL;
|
|
|
|
@@ -1801,7 +1802,8 @@ out:
|
|
return dir;
|
|
}
|
|
#else
|
|
-char *im_get_rootfs_dir(const im_get_rf_dir_request *request) {
|
|
+char *im_get_rootfs_dir(const im_get_rf_dir_request *request)
|
|
+{
|
|
return NULL;
|
|
}
|
|
#endif
|
|
diff --git a/src/daemon/modules/image/image_rootfs_handler.c b/src/daemon/modules/image/image_rootfs_handler.c
|
|
index a76363d0..c3964b2c 100644
|
|
--- a/src/daemon/modules/image/image_rootfs_handler.c
|
|
+++ b/src/daemon/modules/image/image_rootfs_handler.c
|
|
@@ -87,7 +87,7 @@ static int proc_by_fpasswd(FILE *f_passwd, const char *user, defs_process_user *
|
|
struct passwd *pwbufp = NULL;
|
|
|
|
if (f_passwd != NULL) {
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
errval = util_getpwent_r(f_passwd, &pw, buf, sizeof(buf), &pwbufp);
|
|
#else
|
|
errval = fgetpwent_r(f_passwd, &pw, buf, sizeof(buf), &pwbufp);
|
|
@@ -105,7 +105,7 @@ static int proc_by_fpasswd(FILE *f_passwd, const char *user, defs_process_user *
|
|
*matched_username = util_strdup_s(pwbufp->pw_name);
|
|
break;
|
|
}
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
errval = util_getpwent_r(f_passwd, &pw, buf, sizeof(buf), &pwbufp);
|
|
#else
|
|
errval = fgetpwent_r(f_passwd, &pw, buf, sizeof(buf), &pwbufp);
|
|
@@ -215,7 +215,7 @@ static int do_proc_by_froup(FILE *f_group, const char *group, defs_process_user
|
|
return 0;
|
|
}
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
errval = util_getgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp);
|
|
#else
|
|
errval = fgetgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp);
|
|
@@ -226,7 +226,7 @@ static int do_proc_by_froup(FILE *f_group, const char *group, defs_process_user
|
|
if (search_group_list(gbufp, matched_username, puser) != 0) {
|
|
return -1;
|
|
}
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
errval = util_getgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp);
|
|
#else
|
|
errval = fgetgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp);
|
|
@@ -240,7 +240,7 @@ static int do_proc_by_froup(FILE *f_group, const char *group, defs_process_user
|
|
puser->gid = gbufp->gr_gid;
|
|
*groupcnt = 1;
|
|
}
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
errval = util_getgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp);
|
|
#else
|
|
errval = fgetgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp);
|
|
@@ -378,7 +378,7 @@ static int get_additional_groups(char **additional_groups, size_t additional_gro
|
|
struct group *gbufp = NULL;
|
|
struct group *groups = NULL;
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
while (f_group != NULL && util_getgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp) == 0) {
|
|
#else
|
|
while (f_group != NULL && fgetgrent_r(f_group, &grp, buf, sizeof(buf), &gbufp) == 0) {
|
|
diff --git a/src/utils/cutils/CMakeLists.txt b/src/utils/cutils/CMakeLists.txt
|
|
index 30414d91..50a17f60 100644
|
|
--- a/src/utils/cutils/CMakeLists.txt
|
|
+++ b/src/utils/cutils/CMakeLists.txt
|
|
@@ -2,7 +2,7 @@
|
|
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} local_cutils_srcs)
|
|
add_subdirectory(map)
|
|
|
|
-if (NOT ANDROID)
|
|
+if ((NOT ANDROID) AND (NOT MUSL))
|
|
list(REMOVE_ITEM local_cutils_srcs "${CMAKE_CURRENT_SOURCE_DIR}/utils_pwgr.c")
|
|
endif()
|
|
|
|
diff --git a/src/utils/cutils/utils.c b/src/utils/cutils/utils.c
|
|
index a154c52a..b1db045a 100644
|
|
--- a/src/utils/cutils/utils.c
|
|
+++ b/src/utils/cutils/utils.c
|
|
@@ -16,7 +16,7 @@
|
|
#define _GNU_SOURCE
|
|
#include "utils.h"
|
|
#include <errno.h>
|
|
-#ifndef __ANDROID__
|
|
+#if !defined (__ANDROID__) && !defined(__MUSL__)
|
|
#include <execinfo.h>
|
|
#endif
|
|
#include <stdint.h>
|
|
@@ -47,7 +47,7 @@
|
|
#include "utils_string.h"
|
|
#include "utils_verify.h"
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
int mallopt(int param, int value)
|
|
{
|
|
return 1;
|
|
@@ -427,7 +427,12 @@ proc_t *util_stat2proc(const char *s, size_t len)
|
|
|
|
/* parse these two strings separately, skipping the leading "(". */
|
|
/* comm[16] in kernel */
|
|
+ /* https://www.openwall.com/lists/musl/2013/11/15/5: musl's sscanf("%15c",cmd) requires exactly 15 characters; anything shorter is a matching failure. */
|
|
+#ifdef __MUSL__
|
|
+ num = sscanf(s, "%d (%15s", &p->pid, p->cmd);
|
|
+#else
|
|
num = sscanf(s, "%d (%15c", &p->pid, p->cmd);
|
|
+#endif
|
|
if (num != 2) {
|
|
ERROR("Call sscanf error: %s", errno ? strerror(errno) : "");
|
|
free(p);
|
|
@@ -851,8 +856,8 @@ out:
|
|
|
|
char **util_get_backtrace(void)
|
|
{
|
|
-#ifdef __ANDROID__
|
|
- /* android has no backtrace */
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
+ /* android and musl has no backtrace */
|
|
return NULL;
|
|
#else
|
|
#define BACKTRACE_SIZE 16
|
|
diff --git a/src/utils/cutils/utils.h b/src/utils/cutils/utils.h
|
|
index 4518e3ac..72cab9f2 100644
|
|
--- a/src/utils/cutils/utils.h
|
|
+++ b/src/utils/cutils/utils.h
|
|
@@ -47,7 +47,7 @@
|
|
extern "C" {
|
|
#endif
|
|
|
|
-#ifdef __ANDROID__
|
|
+#if defined (__ANDROID__) || defined(__MUSL__)
|
|
#define M_TRIM_THRESHOLD -1
|
|
#define M_TOP_PAD -2
|
|
#define M_MMAP_THRESHOLD -3
|
|
diff --git a/src/utils/cutils/utils_verify.c b/src/utils/cutils/utils_verify.c
|
|
index 9ed33bf3..713e72c3 100644
|
|
--- a/src/utils/cutils/utils_verify.c
|
|
+++ b/src/utils/cutils/utils_verify.c
|
|
@@ -563,7 +563,7 @@ bool util_valid_value_false(const char *value)
|
|
|
|
bool util_valid_rw_mode(const char *mode)
|
|
{
|
|
- if (mode == NULL){
|
|
+ if (mode == NULL) {
|
|
return false;
|
|
}
|
|
|
|
@@ -572,7 +572,7 @@ bool util_valid_rw_mode(const char *mode)
|
|
|
|
bool util_valid_label_mode(const char *mode)
|
|
{
|
|
- if (mode == NULL){
|
|
+ if (mode == NULL) {
|
|
return false;
|
|
}
|
|
|
|
@@ -581,7 +581,7 @@ bool util_valid_label_mode(const char *mode)
|
|
|
|
bool util_valid_copy_mode(const char *mode)
|
|
{
|
|
- if (mode == NULL){
|
|
+ if (mode == NULL) {
|
|
return false;
|
|
}
|
|
return !strcmp(mode, "nocopy");
|
|
@@ -708,7 +708,7 @@ int util_valid_env(const char *env, char **dst)
|
|
int ret = 0;
|
|
char *value = NULL;
|
|
|
|
- if (dst == NULL){
|
|
+ if (dst == NULL) {
|
|
ERROR("NULL dst");
|
|
return -1;
|
|
}
|
|
--
|
|
2.25.1
|
|
|