记录一次arm64版mysql安全漏洞升级

2024-03-11  本文已影响0人  叶迎宪

需要将openssl升级到1.1.1o以上版本,mysql升级到5.7.41以上版本

1、交叉编译openssl 1.1.1w
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w/
./Configure --prefix=/home/3536_cross shared no-threads --cross-compile-prefix=aarch64-linux-gnu- linux-aarch64
make -j4
make install

2、交叉编译boost
下载地址 https://sourceforge.net/projects/boost/files/boost/1.59.0/
tar xf boost_1_59_0.tar.bz2
cd boost_1_59_0/
./bootstrap.sh --prefix=/home/3536_cross
然后修改交叉编译使用的编译器
vi project-config.jam

if ! gcc in [ feature.values <toolset> ]
{
-    using gcc ;
+    using gcc : arm : aarch64-linux-gnu-g++ ;
}

编译安装
./bjam
./b2
./b2 install

3、本地编译mysql 5.7.44
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar xf mysql-boost-5.7.44.tar.gz
mv mysql-5.7.44 mysql-5.7.44-x86
cd mysql-5.7.44-x86/BUILD/
vi compile-pentium

-cmake $path/.. -DWITH_DEBUG=0
+cmake $path/.. -DWITH_DEBUG=0 -DWITH_BOOST=/home/3536_cross_src/mysql-5.7.44-x86/boost/boost_1_59_0/

./compile-pentium

4、交叉编译mysql 5.7.44
tar xf mysql-boost-5.7.44.tar.gz
mv mysql-5.7.44/ mysql-5.7.44-arm
cd mysql-5.7.44-arm/
mkdir armbuild
cd armbuild/
vi ../CMakeLists.txt

在文件的前面部分加上

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_CROSSCOMPILING 1)

SET(STACK_DIRECTION 1)

# 指定交叉编译gcc的路径
SET(CMAKE_C_COMPILER /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++)

# 指定源码附带的boost路径
SET(BOOST_INCLUDE_DIR /home/3536_cross_src/mysql-5.7.44-arm/boost/boost_1_59_0/)
# 指定openssl路径
SET(WITH_SSL /home/3536_cross)
# 指定ncurse路径
SET(CURSES_LIBRARY /home/3536_cross/lib/libncurses.a)
SET(CURSES_INCLUDE_PATH /home/3536_cross)

# 指定编译后的安装路径
SET(CMAKE_INSTALL_PREFIX /usr/local/mysql)

5.7系列的mysql,还要修改libevent的cmake文件,跳过测试编译的过程
vi ../cmake/libevent.cmake

-  SET(TEST_SRC
-    "#include <event.h>
-     #include <stdio.h>
-    int main()
-    {
-      fprintf(stdout, \"%s\", LIBEVENT_VERSION);
-    }
-    "
-    )
-  FILE(WRITE
-    "${CMAKE_BINARY_DIR}/find_libevent_version.c"
-    "${TEST_SRC}"
-    )
-  TRY_RUN(TEST_RUN_RESULT COMPILE_TEST_RESULT
-    ${CMAKE_BINARY_DIR}
-    "${CMAKE_BINARY_DIR}/find_libevent_version.c"
-    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBEVENT_INCLUDE_DIRS}"
-    COMPILE_OUTPUT_VARIABLE OUTPUT
-    RUN_OUTPUT_VARIABLE RUN_OUTPUT
-    )
+  SET(COMPILE_TEST_RESULT TRUE)
+  SET(RUN_OUTPUT "2.1.11-stable")

开始编译
cmake ../

报错1 /bin/sh: comp_err: command not found

要从x86编译版本中拷贝过来
cp ../../mysql-5.7.44-x86/BUILD/extra/comp_err /usr/local/bin/

报错2 /home/3536_cross_src/mysql-5.7.44-arm/storage/innobase/include/os0atomic.ic:230:2: error: #error "Unsupported platform"

修改/storage/innobase/include/os0atomic.h

#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \
    || defined _M_X64 || defined __WIN__

#define IB_STRONG_MEMORY_MODEL

+#else
+#define HAVE_ATOMIC_BUILTINS

#endif /* __i386__ || __x86_64__ || _M_IX86 || _M_X64 || __WIN__ */

修改/storage/innobase/include/os0atomic.ic

-#elif defined(IB_STRONG_MEMORY_MODEL)
+#elif defined(IB_STRONG_MEMORY_MODEL) || defined (HAVE_ATOMIC_BUILTINS)
报错3 error: ‘os_compare_and_swap_thread_id’ was not declared in this scope

修改/storage/innobase/include/os0atomic.h

-# ifdef HAVE_IB_ATOMIC_PTHREAD_T_GCC
-#if defined(HAVE_GCC_SYNC_BUILTINS)
+# ifdef HAVE_ATOMIC_BUILTINS
+#if defined(HAVE_ATOMIC_BUILTINS)
#  define os_compare_and_swap_thread_id(ptr, old_val, new_val) \
        os_compare_and_swap(ptr, old_val, new_val)
#else
报错4 No rule to make target '../scripts/comp_sql'

从x86编译版本中拷贝过来
cp ../../mysql-5.7.44-x86/BUILD/scripts/comp_sql ../scripts/
cp ../../mysql-5.7.44-x86/BUILD/scripts/comp_sql /usr/local/bin

报错5 /bin/sh: gen_lex_hash: command not found
/bin/sh: gen_lex_token: command not found

从x86编译版本中拷贝过来
cp /home/3536_cross_src/mysql-5.7.44-x86/BUILD/sql/gen_lex_* /usr/local/bin/

报错6 protoc: command not found

从x86编译版本中拷贝过来
cp /home/3536_cross_src/mysql-5.7.44-x86/BUILD/extra/protobuf/protoc /usr/local/bin/

报错7 Linking CXX executable libmysql_api_test
/lib/ld-linux-aarch64.so.1: No such file or directory

从x86编译版本中拷贝过来
cp ../../mysql-5.7.44-x86/BUILD/libmysql/libmysql_api_test ./libmysql/

报错8 cannot find -lboost_system -lboost_chrono

vi client/dump/CMakeFiles/mysqlpump.dir/link.txt

-lboost_system -lboost_chrono 前面添加 -L/home/3536_cross/lib,就是boost交叉编译时指定的prefix

上一篇下一篇

猜你喜欢

热点阅读