Linux運維_Bash腳本_編譯安裝GNU-Tools

Linux運維_Bash腳本_編譯安裝GNU-Tools

Bash (Bourne Again Shell) 是一個解釋器,負責處理 Unix 系統命令行上的命令。它是由 Brian Fox 編寫的免費軟件,并于 1989 年發布的免費軟件,作為 Sh (Bourne Shell) 的替代品。

您可以在 Linux 和 MacOS 機器上使用 Bash,甚至可以通過適用于 Linux 的 Windows 子系統在 Windows 10 機器上使用。

使用方法

  • 下載源碼包:

pkg-config-0.29.2.tar.gz

m4-1.4.18.tar.gz

autoconf-2.69.tar.gz

automake-1.15.tar.gz

libtool-2.4.6.tar.gz

gettext-0.22.4.tar.xz

flex-2.6.4.tar.gz

bison-3.7.5.tar.gz

libiconv-1.14.tar.gz

make-4.3.tar.gz

  • 放于指定路徑:

這里 Bash Shell 腳本的全局變量 STORAGE 指定的存放源碼包的路徑 /home/goufeng 可進行修改。

  • 執行 Bash Shell 腳本:

輸入 /[路徑名]/[腳本名].sh 即可進行自動編譯部署,過程中提示輸入 (y/n) 輸入 y 則進行下一步,這樣分階段確認的原因是為了確保能夠看到上一個源碼編譯結果中可能的錯誤和提示。

完整腳本

#! /bin/bash
# Create By GF 2024-03-02 14:41# ------------------- PKG-Config -------------------
# Need File: pkg-config-0.29.2.tar.gz
# ---------------------- Flex ----------------------
# Need File: m4-1.4.18.tar.gz
# Need File: autoconf-2.69.tar.gz
# Need File: automake-1.15.tar.gz
# Need File: libtool-2.4.6.tar.gz
# Need File: gettext-0.22.4.tar.xz
# Need File: flex-2.6.4.tar.gz
# ---------------------- Bison ---------------------
# Need File: bison-3.7.5.tar.gz
# -------------------- libiconv --------------------
# Need File: libiconv-1.14.tar.gz
# -------------------- GNU Make --------------------
# Need File: make-4.3.tar.gz# ##################################################
STORAGE=/home/goufeng# ######################################### PKG-Config ################################################ Function: 編譯安裝(Compile Install) pkg-config-0.29.2
# ##################################################
function Compile_Install_pkg_config_0_29_2() {if [[ ! -f "/usr/bin/pkg-config" && ! -f "/usr/local/bin/pkg-config" && ! -d "/opt/pkg-config-0.29.2" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( pkg-config-0.29.2 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar zxvf $STORAGE/pkg-config-0.29.2.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/pkg-config-0.29.2 && ./configure --prefix=/opt/pkg-config-0.29.2 \--with-internal-glib && \STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenln -sf /opt/pkg-config-0.29.2/bin/pkg-config /usr/local/bin/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/pkg-config-0.29.2 && return 0elseecho "[Caution] Program: ( /usr/bin/pkg-config or /usr/local/bin/pkg-config or /opt/pkg-config-0.29.2 ) Already Exists."# ------------------------------------------return 0fi
}# ############################################ Flex ################################################### Function: 編譯安裝(Compile Install) m4-1.4.18 (for GCC-7.5.0)
# ##################################################
function Compile_Install_m4_1_4_18_for_GCC_7_5_0() {if [[ ! -f "/usr/bin/m4" && ! -f "/usr/local/bin/m4" && ! -d "/opt/m4-1.4.18" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( m4-1.4.18 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf $STORAGE/m4-1.4.18.tar.gz && STEP_UNZIPPED=1# ------------------------------------------if [[ $STEP_UNZIPPED == 1 ]]; then# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: patch 方法.#            cd /opt/m4-1.4.18#            patch -p1 < /opt/0003-c-stack-stop-using-SIGSTKSZ.patch# ......................................# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: sed 方法 (Part 1).#            m4-1.4.18/lib/c-stack.c#             #if ! HAVE_STACK_T && ! defined stack_t#             typedef struct sigaltstack stack_t;#             #endif#            -#ifndef SIGSTKSZ#            -# define SIGSTKSZ 16384#            -#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384#            -/* libsigsegv 2.6 through 2.8 have a bug where some architectures use#            -   more than the Linux default of an 8k alternate stack when deciding#            -   if a fault was caused by stack overflow.  */#            -# undef SIGSTKSZ#            -# define SIGSTKSZ 16384#            -#endif#            +/* Storage for the alternate signal stack.#            +   64 KiB is not too large for Gnulib-using apps, and is large enough#            +   for all known platforms.  Smaller sizes may run into trouble.#            +   For example, libsigsegv 2.6 through 2.8 have a bug where some#            +   architectures use more than the Linux default of an 8 KiB alternate#            +   stack when deciding if a fault was caused by stack overflow.  */#            +static max_align_t alternate_signal_stack[(64 * 1024#            +                                           + sizeof (max_align_t) - 1)#            +                                          / sizeof (max_align_t)];sed -i "53,61d" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "53i\\/\* Storage for the alternate signal stack\." $STORAGE/m4-1.4.18/lib/c-stack.csed -i "54i\   64 KiB is not too large for Gnulib\-using apps\, and is large enough" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "55i\   for all known platforms\.  Smaller sizes may run into trouble\." $STORAGE/m4-1.4.18/lib/c-stack.csed -i "56i\   For example, libsigsegv 2\.6 through 2\.8 have a bug where some" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "57i\   architectures use more than the Linux default of an 8 KiB alternate" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "58i\   stack when deciding if a fault was caused by stack overflow\.  \*\/" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "59i\static max_align_t alternate_signal_stack\[\(64 \* 1024" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "60i\                                           \+ sizeof \(max_align_t\) \- 1\)" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "61i\                                          \/ sizeof \(max_align_t\)\]\;" $STORAGE/m4-1.4.18/lib/c-stack.c# ......................................# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: sed 方法 (Part 2).#            m4-1.4.18/lib/c-stack.c#            -/* Storage for the alternate signal stack.  */#            -static union#            -{#            -  char buffer[SIGSTKSZ];#            -#            -  /* These other members are for proper alignment.  There's no#            -     standard way to guarantee stack alignment, but this seems enough#            -     in practice.  */#            -  long double ld;#            -  long l;#            -  void *p;#            -} alternate_signal_stack;sed -i "131,142d" $STORAGE/m4-1.4.18/lib/c-stack.c# ......................................# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: sed 方法 (Part 3).#            m4-1.4.18/lib/c-stack.c#               /* Always install the overflow handler.  */#               if (stackoverflow_install_handler (overflow_handler,#            -                                     alternate_signal_stack.buffer,#            -                                     sizeof alternate_signal_stack.buffer))#            +                                     alternate_signal_stack,#            +                                     sizeof alternate_signal_stack))sed -i "196,197d" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "196i\                                     alternate_signal_stack\," $STORAGE/m4-1.4.18/lib/c-stack.csed -i "197i\                                     sizeof alternate_signal_stack\)\)" $STORAGE/m4-1.4.18/lib/c-stack.c# ......................................# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: sed 方法 (Part 4).#            m4-1.4.18/lib/c-stack.c#               stack_t st;#               struct sigaction act;#               st.ss_flags = 0;#            +  st.ss_sp = alternate_signal_stack;#            +  st.ss_size = sizeof alternate_signal_stack;sed -i "270i\  st\.ss_sp \= alternate_signal_stack\;" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "271i\  st\.ss_size \= sizeof alternate_signal_stack\;" $STORAGE/m4-1.4.18/lib/c-stack.c# ......................................# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: sed 方法 (Part 5).#            m4-1.4.18/lib/c-stack.c#             # if SIGALTSTACK_SS_REVERSED#               /* Irix mistakenly treats ss_sp as the upper bound, rather than#                  lower bound, of the alternate stack.  */#            -  st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *);#            -  st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *);#            -# else#            -  st.ss_sp = alternate_signal_stack.buffer;#            -  st.ss_size = sizeof alternate_signal_stack.buffer;#            +  st.ss_size -= sizeof (void *);#            +  char *ss_sp = st.ss_sp;#            +  st.ss_sp = ss_sp + st.ss_size;#             # endifsed -i "275,279d" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "275i\  st\.ss_size \-\= sizeof \(void \*\)\;" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "276i\  char \*ss_sp \= st\.ss_sp\;" $STORAGE/m4-1.4.18/lib/c-stack.csed -i "277i\  st\.ss_sp \= ss_sp \+ st\.ss_size\;" $STORAGE/m4-1.4.18/lib/c-stack.c# ......................................# * Problem: # c-stack.c:55:26: error: missing binary operator before token "("#   - Solve: sed 方法 (Part 6).#            m4-1.4.18/lib/c-stack.h#                ACTION must be async-signal-safe.  ACTION together with its callees#            -   must not require more than SIGSTKSZ bytes of stack space.  Also,#            +   must not require more than 64 KiB bytes of stack space.  Also,#                ACTION should not call longjmp, because this implementation does#                not guarantee that it is safe to return to the original stack.sed -i "37d" $STORAGE/m4-1.4.18/lib/c-stack.hsed -i "37i\   must not require more than 64 KiB bytes of stack space\.  Also\," $STORAGE/m4-1.4.18/lib/c-stack.h# ......................................# * Problem: -freadahead.c: In function ‘freadahead’#   - Solve: sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' /opt/m4-1.4.18/lib/*.c#            echo "#define _IO_IN_BACKUP 0x100" >> /opt/m4-1.4.18/lib/stdio-impl.hcd $STORAGE/m4-1.4.18 && sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' ./lib/*.ccd $STORAGE/m4-1.4.18 && echo "#define _IO_IN_BACKUP 0x100" >> ./lib/stdio-impl.hfi# ------------------------------------------cd $STORAGE/m4-1.4.18 && ./configure --prefix=/opt/m4-1.4.18 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenln -sf /opt/m4-1.4.18/bin/m4 /usr/local/bin/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/m4-1.4.18 && return 0elseecho "[Caution] Program: ( /usr/bin/m4 or /usr/local/bin/m4 or /opt/m4-1.4.18 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 編譯安裝(Compile Install) autoconf-2.69
# ##################################################
function Compile_Install_autoconf_2_69() {if [[ ! -f "/usr/bin/autoconf" && ! -f "/usr/local/bin/autoconf" && ! -d "/opt/autoconf-2.69" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( autoconf-2.69 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf autoconf-2.69.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/autoconf-2.69 && ./configure --prefix=/opt/autoconf-2.69 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=0# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/autoconf-2.69/bin/ /usr/local/bin/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/autoconf-2.69 && return 0elseecho "[Caution] Program: ( /usr/bin/autoconf or /usr/local/bin/autoconf or /opt/autoconf-2.69 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 編譯安裝(Compile Install) automake-1.15 (for Ubuntu)
# ##################################################
function Compile_Install_automake_1_15_for_Ubuntu() {if [[ ! -f "/usr/bin/automake" && ! -f "/usr/local/bin/automake" && ! -d "/opt/automake-1.15" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( automake-1.15 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf automake-1.15.tar.gz && STEP_UNZIPPED=1if [[ $STEP_UNZIPPED == 1 ]]; then# * Problem: Makefile:3687: recipe for target 'doc/automake-1.15.1' failed#   - Solve: sed -i 's/\$\(update_mans\) automake\-\$\(APIVERSION\)/\$\(update_mans\) automake\-\$\(APIVERSION\) \-\-no\-discard\-stderr/' /opt/automake-1.15/Makefilesed -i 's/\$\(update_mans\) automake\-\$\(APIVERSION\)/\$\(update_mans\) automake\-\$\(APIVERSION\) \-\-no\-discard\-stderr/' $STORAGE/automake-1.15/Makefile# ......................................# * Problem: Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /usr/local/bin/automake line 3936.#   - Solve: 按照提示行數, 將第一個遇到的 { 用 [ ] 括住.#            automake-1.15/bin/automake.in#               my ($text) = @_;#            -  $text =~ s/\${([^ \t=:+{}]+)}/substitute_ac_subst_variables_worker ($1)/ge;#            +  $text =~ s/\$[{]([^ \t=:+{}]+)}/substitute_ac_subst_variables_worker ($1)/ge;#               return $text;sed -i "3881d" $STORAGE/automake-1.15/bin/automake.insed -i "3881i\  \$text =~ s/\\\\$\[\{\]\(\[\^ \\\t\=\:\+\{\}\]\+\)\}/substitute_ac_subst_variables_worker \(\$1\)/ge;" $STORAGE/automake-1.15/bin/automake.infi# ------------------------------------------cd $STORAGE/automake-1.15 && ./configure --prefix=/opt/automake-1.15 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=0# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/automake-1.15/bin/ /usr/local/bin/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/automake-1.15 && return 0elseecho "[Caution] Program: ( /usr/bin/automake or /usr/local/bin/automake or /opt/automake-1.15 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 編譯安裝(Compile Install) libtool-2.4.6
# ##################################################
function Compile_Install_libtool_2_4_6() {# ----------------------------------------------# * Problem: Makefile.am:477: error: Libtool library used but 'LIBTOOL' is undefined#            Makefile.am:477:   The usual way to define 'LIBTOOL' is to add 'LT_INIT'#            Makefile.am:477:   to 'configure.ac' and run 'aclocal' and 'autoconf' again.#            Makefile.am:477:   If 'LT_INIT' is in 'configure.ac', make sure#            Makefile.am:477:   its definition is in aclocal's search path.#            autoreconf: automake failed with exit status: 1#   - Solve: 原因是 automake 和 libtool 沒有安裝在同一目錄中, 導致 aclocal 在路徑中找不到 .m4 文件。#            解決方法 (1):#                1. 執行 aclocal --print-ac-dir 查看 aclocal 的路徑, 例如顯示 /opt/automake-1.15/share/aclocal#                2. 將 libtool 的 share/aclocal 目錄中的 .m4 文件復制到 /opt/automake-1.15/share/aclocal (cp /opt/libtool-2.4.6/share/aclocal/*.m4 /opt/automake-1.15/share/aclocal/)#                3. 再次執行 autoreconf, 問題解決。#            解決方法 (2):#                1. 確保二進制 bin 文件: "aclocal" (包含在 automake 中) 和 "libtoolize" (包含在 libtool 中) 在可找到 PATH 中 (最好是同一路徑下)#                2. 先執行 libtoolize, 會在當前目錄自動生成要用到的 .m4 文件, 再執行 autoreconf, 問題解決。if [[ ! -f "/usr/bin/libtool" && ! -f "/usr/local/bin/libtool" && ! -d "/opt/libtool-2.4.6" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( libtool-2.4.6 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf libtool-2.4.6.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/libtool-2.4.6 && ./configure --prefix=/opt/libtool-2.4.6 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/libtool-2.4.6/bin/ /usr/local/bin/# ......................................cp /opt/libtool-2.4.6/share/aclocal/*.m4 /opt/automake-1.15/share/aclocal/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/libtool-2.4.6 && return 0elseecho "[Caution] Program: ( /usr/bin/libtool or /usr/local/bin/libtool or /opt/libtool-2.4.6 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 編譯安裝(Compile Install) gettext-0.22.4 (for Linux)
# ##################################################
function Compile_Install_gettext_0_22_4_for_Linux() {if [[ ! -f "/usr/bin/gettext" && ! -f "/usr/local/bin/gettext" && ! -d "/opt/gettext-0.22.4" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( gettext-0.22.4 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar xvJf $STORAGE/gettext-0.22.4.tar.xz && STEP_UNZIPPED=1# ------------------------------------------# Must Be "Shared (--enable-shared)" To Be Called By Other Programs.cd $STORAGE/gettext-0.22.4 && ./configure --prefix=/opt/gettext-0.22.4 \--enable-shared && \STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/gettext-0.22.4/bin/     /usr/local/bin/rsync -av /opt/gettext-0.22.4/include/ /usr/local/include/rsync -av /opt/gettext-0.22.4/lib/     /usr/local/lib/fi# ------------------------------------------ldconfig# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/gettext-0.22.4 && return 0elseecho "[Caution] Program: ( /usr/bin/gettext or /usr/local/bin/gettext or /opt/gettext-0.22.4 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 編譯安裝(Compile Install) flex-2.6.4 (for Ubuntu)
# ##################################################
function Compile_Install_flex_2_6_4_for_Ubuntu() {if [[ ! -f "/usr/bin/flex" && ! -f "/usr/local/bin/flex" && ! -d "/opt/flex-2.6.4" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( flex-2.6.4 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf flex-2.6.4.tar.gz && STEP_UNZIPPED=1# ------------------------------------------# * Problem: Can't exec "autopoint": No such file or directory at /opt/autoconf-2.69/share/autoconf/Autom4te/FileUtils.pm line 345.#            autoreconf: failed to run autopoint: No such file or directory#            autoreconf: autopoint is needed because this package uses Gettext#   - Solve: autopoint 在 gettext 的 bin/ 下面, 但系統原有的 gettext 可能沒有 autopoint。#            autopoint is located under the bin/ of the gettext, but the original system gettext may not have autopoint. #            備份系統原有的 gettext (mv /usr/bin/gettext /usr/bin/gettext.bak) 并重新編譯安裝 gettext.#            Back up the original system gettext (mv /usr/bin/gettext /usr/bin/gettext.bak) and recompile and install the gettextcd $STORAGE/flex-2.6.4 && ./autogen.sh && ./configure --prefix=/opt/flex-2.6.4 \CFLAGS=-D_GNU_SOURCE && \STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/flex-2.6.4/bin/     /usr/local/bin/rsync -av /opt/flex-2.6.4/include/ /usr/local/include/rsync -av /opt/flex-2.6.4/lib/     /usr/local/lib/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/flex-2.6.4 && return 0elseecho "[Caution] Program: ( /usr/bin/flex or /usr/local/bin/flex or /opt/flex-2.6.4 ) Already Exists."# ------------------------------------------return 0fi
}# ############################################### Bison ############################################### Function: 編譯安裝(Compile Install) bison-3.7.5
# ##################################################
function Compile_Install_bison_3_7_5() {if [[ ! -f "/usr/bin/bison" && ! -f "/usr/local/bin/bison" && ! -d "/opt/bison-3.7.5" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( bison-3.7.5 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar zxvf $STORAGE/bison-3.7.5.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/bison-3.7.5 && ./configure --prefix=/opt/bison-3.7.5 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/bison-3.7.5/bin/ /usr/local/bin/rsync -av /opt/bison-3.7.5/lib/ /usr/local/lib/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/bison-3.7.5 && return 0elseecho "[Caution] Program: ( /usr/bin/bison or /usr/local/bin/bison or /opt/bison-3.7.5 ) Already Exists."# ------------------------------------------return 0fi
}# ############################################# libiconv ############################################## Function: 編譯安裝(Compile Install) libiconv-1.14 (for GCC-7.5.0)
# ##################################################
function Compile_Install_libiconv_1_14_for_GCC_7_5_0() {if [[ ! -f "/usr/bin/iconv" && ! -f "/usr/local/bin/iconv" && ! -d "/opt/libiconv-1.14" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( libiconv-1.14 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar zxvf $STORAGE/libiconv-1.14.tar.gz && STEP_UNZIPPED=1# ------------------------------------------if [[ $STEP_UNZIPPED == 1 ]]; then# * Problem: In file included from progname.c:26:0:#            ./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function); did you mean ‘fgets’?#             _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");#   - Solve: patch 方法.#            1. 把 Patch 補丁拷貝到 libiconv-1.14/srclib (cp libiconv-glibc-2.16.patch libiconv-1.14/srclib)#            2. cd libiconv-1.14/srclib#            3. patch -p1 < libiconv-glibc-2.16.patch# ......................................# * Problem: In file included from progname.c:26:0:#            ./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function); did you mean ‘fgets’?#             _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");#   - Solve: sed 方法.#            --- srclib/stdio.in.h.orig      2011-08-07 16:42:06.000000000 +0300#            +++ srclib/stdio.in.h   2013-01-10 15:53:03.000000000 +0200#            @@ -695,7 +695,9 @@#             /* It is very rare that the developer ever has full control of stdin,#                so any use of gets warrants an unconditional warning.  Assume it is#                always declared, since it is required by C89.  */#            -_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");#            +#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)#            + _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");#            +#endif#             #endifsed -i "698d" $STORAGE/libiconv-1.14/srclib/stdio.in.hsed -i "698i\\#if defined\(__GLIBC__\) \&\& \!defined\(__UCLIBC__\) \&\& \!__GLIBC_PREREQ\(2\, 16\)" $STORAGE/libiconv-1.14/srclib/stdio.in.hsed -i "699i\ _GL_WARN_ON_USE \(gets\, \"gets is a security hole \- use fgets instead\"\)\;" $STORAGE/libiconv-1.14/srclib/stdio.in.hsed -i "670i\\#endif" $STORAGE/libiconv-1.14/srclib/stdio.in.hfi# ------------------------------------------cd $STORAGE/libiconv-1.14 && ./configure --prefix=/opt/libiconv-1.14 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenrsync -av /opt/libiconv-1.14/bin/     /usr/local/bin/rsync -av /opt/libiconv-1.14/include/ /usr/local/include/rsync -av /opt/libiconv-1.14/lib/     /usr/local/lib/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/libiconv-1.14 && return 0elseecho "[Caution] Program: ( /usr/bin/iconv or /usr/local/bin/iconv or /opt/libiconv-1.14 ) Already Exists."# ------------------------------------------return 0fi
}# ############################################# GNU Make ############################################## Function: 編譯安裝(Compile Install) GNU-Make-4.3
# ##################################################
function Compile_Install_GNU_Make_4_3() {if [[ ! -f "/usr/bin/gmake" && ! -f "/usr/local/bin/gmake" && ! -d "/opt/gnu-make-4.3" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( gnu-make-4.3 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar zxvf $STORAGE/make-4.3.tar.gz && STEP_UNZIPPED=1# ------------------------------------------if [[ $STEP_UNZIPPED == 1 && ! -f "$STORAGE/make-4.3/src/gnumake.h" ]]; thenecho "[Caution] Source Code: ( make-4.3.tar.gz ) is Not The GNU Make Source Code."# ......................................exit 1fi# ------------------------------------------cd $STORAGE/make-4.3 && ./configure --prefix=/opt/gnu-make-4.3 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenln -sf /opt/gnu-make-4.3/bin/make /usr/local/bin/gmake# ......................................ln -sf /opt/gnu-make-4.3/include/gnumake.h /usr/local/include/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/make-4.3 && return 0elseecho "[Caution] Program: ( /usr/bin/gmake or /usr/local/bin/gmake or /opt/gnu-make-4.3 ) Already Exists."# ------------------------------------------return 0fi
}function main() {# ----------------- PKG-Config -----------------Compile_Install_pkg_config_0_29_2# -------------------- Flex --------------------Compile_Install_m4_1_4_18_for_GCC_7_5_0Compile_Install_autoconf_2_69Compile_Install_automake_1_15_for_UbuntuCompile_Install_libtool_2_4_6Compile_Install_gettext_0_22_4_for_LinuxCompile_Install_flex_2_6_4_for_Ubuntu# -------------------- Bison -------------------Compile_Install_bison_3_7_5# ------------------ libiconv ------------------Compile_Install_libiconv_1_14_for_GCC_7_5_0# ------------------ GNU Make ------------------Compile_Install_GNU_Make_4_3
}main

總結

以上就是關于 Linux運維 Bash腳本 編譯安裝GNU-Tools 的全部內容。

更多內容可以訪問我的代碼倉庫:

https://gitee.com/goufeng928/public

https://github.com/goufeng928/public

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024最新算法:鸚鵡優化算法(Parrot optimizer,PO)求解23個基準函數

一、鸚鵡優化算法 鸚鵡優化算法&#xff08;Parrot optimizer&#xff0c;PO&#xff09;由Junbo Lian等人于2024年提出的一種高效的元啟發式算法&#xff0c;該算法從馴養的鸚鵡中觀察到的覓食、停留、交流和對陌生人行為的恐懼中汲取靈感。這些行為被封裝在四個不同的公式中…

C++_紅黑樹

目錄 1、紅黑樹的規則 2、紅黑樹節點的定義 3、紅黑樹插入節點的調整操作 3.1 情況一 3.2 情況二 3.3 情況三 4、紅黑樹的實現 結語 前言&#xff1a; 在C中&#xff0c;紅黑樹是二叉搜索樹的另一種優化版本&#xff0c;他與AVL樹的區別在于保持樹的平衡方式不同&…

【Mysql】Navicat數據庫勿刪了mysql.infoschema@localhost,導致打不開數據庫,如何修改

運行報錯如下&#xff1a; 1449 . The user specified as a definer (mysql.infoschemaocalhost) does not exist該方法不需要重啟mysql&#xff0c;或者重裝&#xff1b;僅需要恢復刪除的mysql.infoschemalocalhost用戶 一、登錄建立用戶 mysql -uroot -pxxxxxx密碼二、建立…

【網上商城系統的設計與開發】

目錄 1.實訓概況 1 1.1 實訓題目 1 1.2實訓時間 1 1.3實訓目的 1 1.4 實訓環境 1 1.5 實訓內容 2 1.6 進度安排 3 2.需求分析 5 2.1 功能需求分析 5 2.1.1用戶需求分析 5 2.2.2網站前臺需求 5 2.2.3網站后臺需求 6 2.2 可行性分析 7 2.2.1社會可行性 7 2.2.2技術可行性 8 3.系統…

Sora學習(一):Sora技術路徑整體認知

前文&#xff1a;最近跟著DataWhale組隊學習這一期“Sora原理與技術實戰”&#xff0c;本篇博客主要是基于DataWhale成員、廈門大學平潭研究院楊知錚研究員分享的Sora技術原理詳解課件內容以及參考網上一些博客資料整理而來&#xff08;詳見文末參考文獻&#xff09;&#xff0…

【談一談】并發編程_鎖的分類

【談一談】并發編程_鎖的分類 Hello!~大家好!~每天進步一點點,日復一日,我們終將問劍頂峰 這里主要是介紹下我們常用的鎖可以分為幾類,目的是整體框架作用~方便后續的并發文章 說白了,這篇就是開頭哈~ 本文總綱: 一.可重入鎖和不可重入鎖 我們開發中一般用到的都是可重入鎖比如…

Photoshop 2023:重塑創意,引領數字藝術新紀元

在數字藝術的浩瀚星空中&#xff0c;Adobe Photoshop 2023&#xff08;簡稱PS 2023&#xff09;如同一顆璀璨的新星&#xff0c;為Mac和Windows用戶帶來了前所未有的創意體驗。這款強大的圖像處理軟件不僅繼承了前作的精髓&#xff0c;更在細節上進行了諸多創新&#xff0c;讓每…

運行Python文件時出現‘utf-8’code can‘t decode byte 如何解決?(如圖)

如圖 亦或者出現“SyntaxError: Non-UTF-8 code starting with \xbb ” 出現這種問題往往是編碼格式導致的&#xff0c;我們可以在py文件中的第一行加入以下代碼&#xff1a; # codingutf-8或者 # codinggdk優先使用gbk編碼 解釋一下常用的兩種編碼格式&#xff1a; utf-…

朱維群將出席用碳不排碳碳中和頂層科技路線設計開發

演講嘉賓&#xff1a;朱維群 演講題目&#xff1a;“用碳不排碳”碳中和頂層科技路線設計開發 簡介 姓名&#xff1a;朱維群 性別&#xff1a;男 出生日期&#xff1a;1961-09-09 職稱&#xff1a;教授 1998年畢業于大連理工大學精細化工國家重點實驗室精細化工專業&…

什么是B+樹,和B樹有什么不同?

&#x1f449;博主介紹&#xff1a; 博主從事應用安全和大數據領域&#xff0c;有8年研發經驗&#xff0c;5年面試官經驗&#xff0c;Java技術專家&#xff0c;WEB架構師&#xff0c;阿里云專家博主&#xff0c;華為云云享專家&#xff0c;51CTO 專家博主 ?? 個人社區&#x…

Spring Initializer環境問題

1.基于jdk8與本地 環境準備 1)下載jdk8并安裝 2&#xff09;下載maven 3.6.3并解壓放入D盤maven目錄下&#xff0c;去掉外層 設置阿里源 打開settings.xml,在mirrors標簽之內增加&#xff0c;注意粘貼后</id>中的/有可能被刪掉&#xff0c;要自己補上 <mirror>&l…

健身房預約小程序制作詳細步驟解析

如果你是一位健身愛好者&#xff0c;或者是一位健身教練&#xff0c;你一定知道預約健身的痛苦。傳統的預約方式不僅麻煩&#xff0c;而且效率低下。但是&#xff0c;現在&#xff0c;我們可以使用一種神仙工具——喬拓云網&#xff0c;來搭建一個屬于自己的健身預約小程序&…

【VTKExamples::PolyData】第四十三期 PolyDataPointSampler

很高興在雪易的CSDN遇見你 VTK技術愛好者 QQ:870202403 前言 本文分享VTK樣例PolyDataPointSampler,并解析接口vtkPolyDataPointSampler,希望對各位小伙伴有所幫助! 感謝各位小伙伴的點贊+關注,小易會繼續努力分享,一起進步! 你的點贊就是我的動力(^U^)ノ~YO …

如何使用 CrewAI 構建協作型 AI Agents

一、前言 AI Agents 的開發是當前軟件創新領域的熱點。隨著大語言模型 (LLM) 的不斷進步&#xff0c;預計 AI 智能體與現有軟件系統的融合將出現爆發式增長。借助 AI 智能體&#xff0c;我們可以通過一些簡單的語音或手勢命令&#xff0c;就能完成以往需要手動操作應用程序才能…

運維的利器–監控–zabbix–grafana

運維的利器–監控–zabbix–grafana 一、介紹 Grafana 是一個跨平臺的開源的度量分析和可視化工具 , 可以通過將采集的數據查詢然后可視化的展示 。zabbix可以作為數據源&#xff0c;為grafana提供數據&#xff0c;然后grafana將數據以圖表或者其他形式展示出來。zabbix和gra…

基于YOLOv的目標追蹤與無人機前端查看系統開發

一、背景與簡介 隨著無人機技術的快速發展&#xff0c;目標追蹤成為無人機應用中的重要功能之一。YOLOv作為一種高效的目標檢測算法&#xff0c;同樣適用于目標追蹤任務。通過集成YOLOv模型&#xff0c;我們可以構建一個無人機前端查看系統&#xff0c;實現實時目標追蹤和可視化…

零基礎學編程,中文編程工具之進度標尺構件的編程用法

零基礎學編程&#xff0c;中文編程工具之進度標尺構件的編程用法 一、前言 今天給大家分享的中文編程開發語言工具 進度條構件的用法。 編程入門視頻教程鏈接 https://edu.csdn.net/course/detail/39036 編程工具及實例源碼文件下載可以點擊最下方官網卡片——軟件下載——…

機器人持續學習基準LIBERO系列9——數據集軌跡查看

0.前置 機器人持續學習基準LIBERO系列1——基本介紹與安裝測試機器人持續學習基準LIBERO系列2——路徑與基準基本信息機器人持續學習基準LIBERO系列3——相機畫面可視化及單步移動更新機器人持續學習基準LIBERO系列4——robosuite最基本demo機器人持續學習基準LIBERO系列5——…

Python AI 實現繪畫功能(附帶源碼)

本文我們將為大家介紹如何基于一些開源的庫來搭建一套自己的 AI 作圖工具。 需要使用的開源庫為 Stable Diffusion web UI&#xff0c;它是基于 Gradio 庫的 Stable Diffusion 瀏覽器界面 Stable Diffusion web UI GitHub 地址&#xff1a;GitHub - AUTOMATIC1111/stable-dif…

快速解決maven依賴沖突

我們在開發過程中經常出現maven依賴沖突&#xff0c;或者maven版本不匹配的情況&#xff0c;我們可以使用阿里云原生腳手架來做maven管理&#xff0c;添加需要的組件&#xff0c;然后點擊獲取代碼&#xff0c;就可以獲得對應的依賴文件。