当前位置: 首页 > news >正文

做网站需不需要服务器互联网营销是干什么

做网站需不需要服务器,互联网营销是干什么,重庆网站制作,五个成功品牌推广案例Linux运维_Bash脚本_构建安装Systemd-250 Bash (Bourne Again Shell) 是一个解释器,负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件,并于 1989 年发布的免费软件,作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…

Linux运维_Bash脚本_构建安装Systemd-250

Bash (Bourne Again Shell) 是一个解释器,负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件,并于 1989 年发布的免费软件,作为 Sh (Bourne Shell) 的替代品。

您可以在 Linux 和 MacOS 机器上使用 Bash,甚至可以通过适用于 Linux 的 Windows 子系统在 Windows 10 机器上使用。

使用方法

  • 下载源码包:

libcap-2.68.tar.xz

MarkupSafe-1.1.1.tar.gz

Jinja2-2.9.6.tar.gz

automake-1.16.tar.gz (Maybe Not Necessary)

util-linux-2.39.3.tar.xz

systemd-250.tar.gz

  • 放于指定路径:

这里 Bash Shell 脚本的全局变量 STORAGE 指定的存放源码包的路径 /home/goufeng 可进行修改。

  • 执行 Bash Shell 脚本:

输入 /[路径名]/[脚本名].sh 即可进行自动编译部署,过程中提示输入 (y/n) 输入 y 则进行下一步,这样分阶段确认的原因是为了确保能够看到上一个源码编译结果中可能的错误和提示。

完整脚本

#! /bin/bash
# Create By GF 2024-03-15 12:55# --------------------------------------------------
# Install First: 
# * GNU-Tools (Contains: pkg-config, m4, autoconf, automake, libtool, gettext, flex, bison, libiconv, make)
# * CMake >= 3.14.0 (Maybe Not Necessary)
# * Python == 3.x.x
# * Meson
# * Ninja# ------------------- Dependency -------------------
# Need File: libcap-2.68.tar.xz
# --------------------- Jinja2 ---------------------
# Need File: MarkupSafe-1.1.1.tar.gz
# Need File: Jinja2-2.9.6.tar.gz
# ------------------- util-linux -------------------
# Need File: automake-1.16.tar.gz (Maybe Not Necessary)
# Need File: util-linux-2.39.3.tar.xz
# ----------------- Systemd - 250 ------------------
# Need File: systemd-250.tar.gz# ##################################################
STORAGE=/home/goufeng# ############################################ Dependency ############################################# Function: 制作安装(Make Install) libcap-2.68
# ##################################################
function Make_Install_libcap_2_68() {if [[ ! -d "/opt/libcap-2.68" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_MADE=0local STEP_INSTALLED=0local STEP_COPIED=0# ------------------------------------------echo "[Confirm] Make and Install ( libcap-2.68 )? (y/n)"# ..........................................read VERIFY# ..........................................if [[ $VERIFY != "y" ]]; then exit 1; fi# ------------------------------------------tar -Jxvf $STORAGE/libcap-2.68.tar.xz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/libcap-2.68 && make && STEP_MADE=1# ------------------------------------------# default installs the library libcap.XX.Y in /lib[64]/# the binaries in /sbin/# the header files in /usr/include# the {libcap,libpsx}.pc files in /usr/lib[64]/pkgconfig# the Go packages (if built) under /usr/share/gocode/src# ..........................................# Skip # cd $STORAGE/libcap-2.68 && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_MADE == 1 ]]; thenif [[ ! -d "/opt/libcap-2.68" ]]; then mkdir /opt/libcap-2.68; fiif [[ ! -d "/opt/libcap-2.68/include" ]]; then mkdir /opt/libcap-2.68/include; fiif [[ ! -d "/opt/libcap-2.68/lib" ]]; then mkdir /opt/libcap-2.68/lib; fiif [[ ! -d "/opt/libcap-2.68/lib/pkgconfig" ]]; then mkdir /opt/libcap-2.68/lib/pkgconfig; fi# ......................................rsync -av $STORAGE/libcap-2.68/libcap/include/ /opt/libcap-2.68/include/# ......................................rm -f /opt/libcap-2.68/include/sys/psx_syscall.h && \cp -vf $STORAGE/libcap-2.68/psx/psx_syscall.h /opt/libcap-2.68/include/sys/# ......................................cp -vf $STORAGE/libcap-2.68/libcap/libcap.a       /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libcap.so      /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libcap.so.2    /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libcap.so.2.68 /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libpsx.a       /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libpsx.so      /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libpsx.so.2    /opt/libcap-2.68/lib/cp -vf $STORAGE/libcap-2.68/libcap/libpsx.so.2.68 /opt/libcap-2.68/lib/# ......................................cp -vf $STORAGE/libcap-2.68/libcap/libcap.pc /opt/libcap-2.68/lib/pkgconfig/cp -vf $STORAGE/libcap-2.68/libcap/libpsx.pc /opt/libcap-2.68/lib/pkgconfig/# ......................................sed -i "s%prefix\=/usr%prefix\=/opt/libcap-2.68%" /opt/libcap-2.68/lib/pkgconfig/libcap.pcsed -i "s%libdir\=/lib64%libdir\=\$\{prefix\}/lib%" /opt/libcap-2.68/lib/pkgconfig/libcap.pcsed -i "s%includedir\=/usr/include%includedir\=\$\{prefix\}/include%" /opt/libcap-2.68/lib/pkgconfig/libcap.pc# ......................................sed -i "s%prefix\=/usr%prefix\=/opt/libcap-2.68%" /opt/libcap-2.68/lib/pkgconfig/libpsx.pcsed -i "s%libdir\=/lib64%libdir\=\$\{prefix\}/lib%" /opt/libcap-2.68/lib/pkgconfig/libpsx.pcsed -i "s%includedir\=/usr/include%includedir\=\$\{prefix\}/include%" /opt/libcap-2.68/lib/pkgconfig/libpsx.pc# ......................................STEP_COPIED=1fi# ------------------------------------------if [[ $STEP_COPIED == 1 ]]; thenif [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fiif [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi# ......................................# Skip # rsync -av /opt/libcap-2.68/include/ /usr/local/include/# ......................................# Skip # rsync -av /opt/libcap-2.68/lib/ /usr/local/lib/# ......................................cp -vf /opt/libcap-2.68/lib/pkgconfig/libcap.pc /opt/lib/pkgconfig/cp -vf /opt/libcap-2.68/lib/pkgconfig/libpsx.pc /opt/lib/pkgconfig/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/libcap-2.68 && return 0elseecho "[Caution] Path: ( /opt/libcap-2.68 ) Already Exists."# ------------------------------------------return 0fi
}# ############################################## Jinja2 ############################################### Function: 构建安装(Build Install) MarkupSafe-1.1.1 (by Python3)
# ##################################################
function Build_Install_MarkupSafe_1_1_1_by_Python3() {# 使用 expr index "$string" "$substring" 来判断字符串 $string 中是否包含子字符串 $substring。# Use the expr index "$string" and "$substring" to determine whether the string $string contains a substring $substring.# ..............................................# 如果子字符串存在, 则返回子字符串在原字符串中的位置 (从 1 开始), 否则返回 0。# If the substring exists, return the position of the substring in the original string (starting from 1), otherwise return 0.local EXISTS_LINE=$(pip3 list | grep "MarkupSafe")local EXISTS_NAME=$(expr index "$EXISTS_LINE" "MarkupSafe")local EXISTS_VERSION=$(expr index "$EXISTS_LINE" "1.1.1")if [[ $EXISTS_NAME == 0 && $EXISTS_VERSION == 0 ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_BUILDED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Build and Install ( MarkupSafe-1.1.1 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf $STORAGE/MarkupSafe-1.1.1.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/MarkupSafe-1.1.1 && python3 setup.py build && STEP_BUILDED=1# ------------------------------------------cd $STORAGE/MarkupSafe-1.1.1 && python3 setup.py install && STEP_INSTALLED=1# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/MarkupSafe-1.1.1 && return 0elseecho "[Caution] Python Package: ( MarkupSafe-1.1.1 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 构建安装(Build Install) Jinja2-2.9.6 (by Python3)
# ##################################################
function Build_Install_Jinja2_2_9_6_by_Python3() {# 使用 expr index "$string" "$substring" 来判断字符串 $string 中是否包含子字符串 $substring。# Use the expr index "$string" and "$substring" to determine whether the string $string contains a substring $substring.# ..............................................# 如果子字符串存在, 则返回子字符串在原字符串中的位置 (从 1 开始), 否则返回 0。# If the substring exists, return the position of the substring in the original string (starting from 1), otherwise return 0.local EXISTS_LINE=$(pip3 list | grep "Jinja2")local EXISTS_NAME=$(expr index "$EXISTS_LINE" "Jinja2")local EXISTS_VERSION=$(expr index "$EXISTS_LINE" "2.9.6")if [[ $EXISTS_NAME == 0 && $EXISTS_VERSION == 0 ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_BUILDED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Build and Install ( Jinja2-2.9.6 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf $STORAGE/Jinja2-2.9.6.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/Jinja2-2.9.6 && python3 setup.py build && STEP_BUILDED=1# ------------------------------------------cd $STORAGE/Jinja2-2.9.6 && python3 setup.py install && STEP_INSTALLED=1# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/Jinja2-2.9.6 && return 0elseecho "[Caution] Python Program: ( Jinja2-2.9.6 ) Already Exists."# ------------------------------------------return 0fi
}# ############################################ util-linux ############################################# Function: 编译安装(Compile Install) automake-1.16
# ##################################################
function Compile_Install_automake_1_16() {if [[ ! -d "/opt/automake-1.16" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( automake-1.16 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf automake-1.16.tar.gz && STEP_UNZIPPED=1# ------------------------------------------cd $STORAGE/automake-1.16 && ./configure --prefix=/opt/automake-1.16 && STEP_CONFIGURED=1# ------------------------------------------make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; thenln -sf /opt/automake-1.16/bin/aclocal       /usr/local/bin/ln -sf /opt/automake-1.16/bin/aclocal-1.16  /usr/local/bin/ln -sf /opt/automake-1.16/bin/automake      /usr/local/bin/ln -sf /opt/automake-1.16/bin/automake-1.16 /usr/local/bin/fi# ..........................................if [[ $STEP_INSTALLED == 1 && -d "/opt/libtool-2.4.6" ]]; thencp -vf /opt/libtool-2.4.6/share/aclocal/*.m4 /opt/automake-1.16/share/aclocal/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/automake-1.16 && return 0elseecho "[Caution] Path: ( /opt/automake-1.16 ) Already Exists."# ------------------------------------------return 0fi
}# Function: 编译安装(Compile Install) util-linux-2.39.3
# ##################################################
function Compile_Install_util_linux_2_39_3() {# util-linux-2.39.3 Provide: blkid           (Sys Binary File)# util-linux-2.39.3 Provide: fdisk           (Sys Binary File)# util-linux-2.39.3 Provide: mount           (Binary File)# util-linux-2.39.3 Provide: uuidd           (Sys Binary File)# util-linux-2.39.3 Provide: libblkid.a      (Static Libraries)# util-linux-2.39.3 Provide: libblkid.so     (Shared Libraries)# util-linux-2.39.3 Provide: libfdisk.a      (Static Libraries)# util-linux-2.39.3 Provide: libfdisk.so     (Shared Libraries)# util-linux-2.39.3 Provide: libmount.a      (Static Libraries)# util-linux-2.39.3 Provide: libmount.so     (Shared Libraries)# util-linux-2.39.3 Provide: libsmartcols.a  (Static Libraries)# util-linux-2.39.3 Provide: libsmartcols.so (Shared Libraries)# util-linux-2.39.3 Provide: libuuid.a       (Static Libraries)# util-linux-2.39.3 Provide: libuuid.so      (Shared Libraries)if [[ ! -d "/opt/util-linux-2.39.3" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_CONFIGURED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Compile and Install ( util-linux-2.39.3 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -Jxvf $STORAGE/util-linux-2.39.3.tar.xz && STEP_UNZIPPED=1# ------------------------------------------# First, disable a problematic test:# 首先, 禁用有问题的测试:#     sed -i '/test_mkfds/s/^/#/' tests/helpers/Makemodule.am# Skip # sed -i '/test_mkfds/s/^/#/' $STORAGE/util-linux-2.39.3/tests/helpers/Makemodule.am# ------------------------------------------# 1. Installation of Util-linux:# #     ./configure --bindir=/usr/bin    \#                 --libdir=/usr/lib    \#                 --runstatedir=/run   \#                 --sbindir=/usr/sbin  \#                 --disable-chfn-chsh  \#                 --disable-login      \#                 --disable-nologin    \#                 --disable-su         \#                 --disable-setpriv    \#                 --disable-runuser    \#                 --disable-pylibmount \#                 --disable-static     \#                 --without-python     \#                 --without-systemd    \#                 --without-systemdsystemunitdir        \#                 ADJTIME_PATH=/var/lib/hwclock/adjtime \#                 --docdir=/usr/share/doc/util-linux-2.39.3#     The --disable and --without options prevent warnings about building components that either require packages not in LFS, or are inconsistent with programs installed by other packages.#     --disable 和 --without 选项可防止有关构建组件的警告, 这些组件要么需要不在 LFS 中的程序包, 要么与其他程序包安装的程序不一致。# ..........................................# 2. Installation of Util-linux - 32-bit:#     Move a tool out of the way which is optionally used by configure but will report invalid pathes for multilib builds.#     将一个工具移到可供 configure 选择使用的位置, 但该工具将报告多分支生成的无效路径。#     #         mv /usr/bin/ncursesw6-config{,.tmp}# #     CC="gcc -m32" \#     ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime   \#                 --host=i686-pc-linux-gnu \#                 --libdir=/usr/lib32      \#                 --docdir=/usr/share/doc/util-linux-2.39.3 \#                 --disable-chfn-chsh      \#                 --disable-login          \#                 --disable-nologin        \#                 --disable-su             \#                 --disable-setpriv        \#                 --disable-runuser        \#                 --disable-pylibmount     \#                 --disable-static         \#                 --without-python         \#                 --without-systemd        \#                 --without-systemdsystemunitdir#     Restore the tool previously moved away:#     恢复以前移走的工具:#     #         mv /usr/bin/ncursesw6-config{.tmp,}#     After "make", install the package:#     #         make DESTDIR=$PWD/DESTDIR install#         cp -Rv DESTDIR/usr/lib32/* /usr/lib32#         rm -rf DESTDIR# ..........................................# 3. Installation of Util-linux - x32-bit#     Move a tool out of the way which is optionally used by configure but will report invalid pathes for multilib builds.#     将一个工具移到可供 configure 选择使用的位置, 但该工具将报告多分支生成的无效路径。#     #         mv /usr/bin/ncursesw6-config{,.tmp}# #     CC="gcc -mx32" \#     ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime   \#                 --host=x86_64-pc-linux-gnux32 \#                 --libdir=/usr/libx32 \#                 --docdir=/usr/share/doc/util-linux-2.39.3 \#                 --disable-chfn-chsh  \#                 --disable-login      \#                 --disable-nologin    \#                 --disable-su         \#                 --disable-setpriv    \#                 --disable-runuser    \#                 --disable-pylibmount \#                 --disable-static     \#                 --without-python     \#                 --without-systemd    \#                 --without-systemdsystemunitdir#     Restore the tool previously moved away:#     恢复以前移走的工具:#     #         mv /usr/bin/ncursesw6-config{.tmp,}#     After "make", install the package:#     #         make DESTDIR=$PWD/DESTDIR install#         cp -Rv DESTDIR/usr/libx32/* /usr/libx32#         rm -rf DESTDIR# ..........................................cd $STORAGE/util-linux-2.39.3 && ./configure --prefix=/opt/util-linux-2.39.3 && STEP_CONFIGURED=1# ------------------------------------------# If desired, run the test suite as a non-root user:# 如果需要, 请以非 root 用户身份运行测试套件:#     Warning#     Running the test suite as the root user can be harmful to your system.#     To run it, the CONFIG_SCSI_DEBUG option for the kernel must be available in the currently running system and must be built as a module.#     Building it into the kernel will prevent booting. For complete coverage, other BLFS packages must be installed.#     If desired, this test can be run by booting into the completed LFS system and running:#     以 root 用户身份运行测试套件可能会对系统有害。#     要运行它, 内核的 CONFIG_SCSI_DEBUG 选项必须在当前运行的系统中可用, 并且必须作为模块构建。#     将其构建到内核中会阻止启动。为了实现完全覆盖, 必须安装其他 BLFS 软件包。#     如果需要, 可以通过引导到完整的 LFS 系统并运行以下程序来运行此测试:# #         bash tests/run.sh --srcdir=$PWD --builddir=$PWD# # chown -R tester .# su tester -c "make -k check"## The hardlink tests will fail if the host's kernel does not have the option CONFIG_CRYPTO_USER_API_HASH enabled or does not have any options providing a SHA256 implementation (for example, CONFIG_CRYPTO_SHA256, or CONFIG_CRYPTO_SHA256_SSSE3 if the CPU supports Supplemental SSE3) enabled.# In addition, two sub-tests from misc: mbsencode and one sub-test from script: replay are known to fail.# 如果主机内核未启用选项 CONFIG_CRYPTO_USER_API_HASH 或未启用任何提供 SHA256 实现的选项 (例如, 如果 CPU 支持补充 SSE3, 则为 CONFIG_CRYPTO_SHA256 或 CONFIG_CRYPTO_SHA256_SSSE3), 则硬链接测试将失败。# 此外, 来自 misc:mbsencode 的两个子测试和来自 script:replay 的一个子测试都失败了。make && make install && STEP_INSTALLED=1# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; then# Skip # if [[ ! -d "/usr/local/sbin" ]]; then mkdir /usr/local/sbin; fi# ......................................if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fiif [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi# ......................................# Skip # ln -sf /opt/util-linux-2.39.3/bin/* /usr/local/bin/# ......................................# Skip # ln -sf /opt/util-linux-2.39.3/sbin/* /usr/local/sbin/# ......................................# Skip # rsync -av /opt/util-linux-2.39.3/include/ /usr/local/include/# ......................................# Skip # rsync -av /opt/util-linux-2.39.3/lib/ /usr/local/lib/# ......................................cp -f /opt/util-linux-2.39.3/lib/pkgconfig/*.pc /opt/lib/pkgconfig/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/util-linux-2.39.3 && return 0elseecho "[Caution] Path: ( /opt/util-linux-2.39.3 ) Already Exists."# ------------------------------------------return 0fi
}# ########################################## Systemd - 250 ############################################ Function: 构建安装(Build Install) Systemd-250
# ##################################################
function Build_Install_Systemd_250() {# Recommended#     Linux-PAM is not strictly required to build systemd, but the main reason to rebuild systemd in BLFS (it's already built in LFS anyway) is for the systemd-logind daemon and the pam_systemd.so PAM module.#     Linux-PAM is required for them. All packages in BLFS book with a dependency on systemd expects it has been rebuilt with Linux-PAM.# 推荐#     构建 systemd 并不严格要求 Linux-PAM, 但在 BLFS 中重建 systemd (无论如何, 它已经在LFS中构建) 的主要原因是 systemd-logind 守护进程和 PAM_systemd.so PAM 模块。#     它们需要 Linux PAM。BLFS 书中所有依赖 systemd 的包都希望它已经用 Linux-PAM 重新构建。# ..............................................# Configuring systemd#     The /etc/pam.d/system-session file needs to be modified and a new file needs to be created in order for systemd-logind to work correctly. Run the following commands as the root user:#     #         grep 'pam_systemd' /etc/pam.d/system-session ||#         cat >> /etc/pam.d/system-session << "EOF"#         # Begin Systemd addition#         #         session  required    pam_loginuid.so#         session  optional    pam_systemd.so#         #         # End Systemd addition#         EOF#         #         cat > /etc/pam.d/systemd-user << "EOF"#         # Begin /etc/pam.d/systemd-user#         #         account  required    pam_access.so#         account  include     system-account#         #         session  required    pam_env.so#         session  required    pam_limits.so#         session  required    pam_loginuid.so#         session  optional    pam_keyinit.so force revoke#         session  optional    pam_systemd.so#         #         auth     required    pam_deny.so#         password required    pam_deny.so#         #         # End /etc/pam.d/systemd-user#         EOF# ..............................................# Important#     Now ensure Shadow-4.14.5 has been already rebuilt with Linux-PAM-1.6.0 support first, then logout, and login again.#     This ensures the running login session registered with systemd-logind and a per-user systemd instance running for each user owning a login session.#     Many BLFS packages listing Systemd as a dependency needs the systemd-logind integration and/or a running per-user systemd instance.# 特别重要#    现在, 请先确保 Shadow-4.14.5 已经重建并支持 Linux-PAM-1.6.0, 然后注销并再次登录。#    这确保了使用 systemd-logind 注册的正在运行的登录会话, 以及为每个拥有登录会话的用户运行的每个用户的 systemd 实例。#    许多将 Systemd 列为依赖项的 BLFS 包需要 systemd-logind 集成 和/或 按用户运行的 Systemd 实例。# ..............................................# Warning#     If upgrading from a previous version of systemd and an initrd is used for system boot, you should generate a new initrd before rebooting the system.# 警告#     如果从以前版本的 systemd 升级并使用 initrd 进行系统引导, 则应在重新启动系统之前生成新的 initrd。if [[ ! -d "/opt/sandbox-systemd/systemd-250" ]]; thenlocal VERIFYlocal STEP_UNZIPPED=0local STEP_BUILDED=0local STEP_INSTALLED=0# ------------------------------------------read -p "[Confirm] Build and Install ( systemd-250 )? (y/n)>" VERIFYif [[ "$VERIFY" != "y" ]]; then exit 1; fi# ------------------------------------------tar -zxvf $STORAGE/systemd-250.tar.gz && STEP_UNZIPPED=1# ------------------------------------------if [[ $STEP_UNZIPPED == 1 ]]; then# Remove two unneeded groups, render and sgx, from the default udev rules:# 从默认 udev 规则中删除两个不需要的组件 render 和 sgx:#     sed -i -e 's/GROUP="render"/GROUP="video"/' \#            -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in# ......................................sed -i "143s/MOUNT_ATTR_RDONLY/MOUNT_ATTR_IDMAP/" $STORAGE/systemd-250/src/shared/mount-util.csed -i "146s/MOUNT_ATTR_NOSUID/MOUNT_ATTR_IDMAP/" $STORAGE/systemd-250/src/shared/mount-util.csed -i "149s/MOUNT_ATTR_NODEV/MOUNT_ATTR_IDMAP/" $STORAGE/systemd-250/src/shared/mount-util.csed -i "152s/MOUNT_ATTR_NOEXEC/MOUNT_ATTR_IDMAP/" $STORAGE/systemd-250/src/shared/mount-util.cfi# ------------------------------------------# Default Build Options:#     meson setup ..                \#           --prefix=/usr           \#           --buildtype=release     \#           -Ddefault-dnssec=no     \#           -Dfirstboot=false       \#           -Dinstall-tests=false   \#           -Dldconfig=false        \#           -Dman=auto              \#           -Dsysusers=false        \#           -Drpmmacrosdir=no       \#           -Dhomed=false           \#           -Duserdb=false          \#           -Dmode=release          \#           -Dpam=false             \#           -Dpamconfdir=/etc/pam.d \#           -Ddev-kvm-mode=0660     \#           -Dnobody-group=nogroup  \#           -Ddocdir=/usr/share/doc/systemd-250# ..........................................# *  Option: --buildtype=release: Specify a buildtype suitable for stable releases of the package, as the default may produce unoptimized binaries.# ..........................................# *  Option: --prefix=/usr: Installation prefix. The installation prefix must be below the root prefix.#                           安装的前缀(路径)。安装前缀(路径)必须在根目录前缀(路径)之下。# ..........................................# *  Option: -Dmode=developer: autoenable features suitable for systemd development/release builds (default 'developer').#                             适用于 systemd development/release 版本的 autoenable 功能 (默认 "developer")。# ..........................................# *  Option: -Dpamconfdir=/etc/pam.d: Forces the PAM files to be installed in /etc/pam.d rather than /usr/lib/pam.d.# ..........................................# *  Option: -Drootprefix=/: override the root prefix [default '/' if split-usr and '/usr' otherwise]. The installation prefix must be below the root prefix.#                            覆盖根目录前缀(路径)[如果系统是 split-usr 则默认为 "/", 否则为 "/usr"]。安装前缀(路径)必须在根目录前缀(路径)之下。# ..........................................# *  Option: -Duserdb=false: Removes a daemon that does not offer any use under a BLFS configuration. If you wish to enable the userdbd daemon, replace "false" with "true" in the above meson command.# ..........................................# *  Option: -Dhomed=false: Removes a daemon that does not offer any use under a traditional BLFS configuration, especially using accounts created with useradd.#                           To enable systemd-homed, first ensure that you have cryptsetup-2.7.0 and libpwquality-1.4.5 installed, and then change "false" to "true" in the above meson setup command.#                           删除在传统BLFS配置下不提供任何用途的守护程序, 尤其是使用使用 useradd 创建的帐户。#                           要启用 systemd-homed, 首先确保安装了 cryptsetup-2.7.0 和 libpwquality-1.4.5, 然后在上述介子设置命令中将 "false" 更改为 "true"。# ..........................................# * Attention:#   此处安装 Systemd 时, 为了不影响系统原有的 Systemd 环境, 采用隔离安装。根目录设置 -Drootprefix=/opt/sandbox-systemd, Systemd 安装目录设置 --prefix=/opt/sandbox-systemd/systemd-250。cd $STORAGE/systemd-250 && meson build/ --prefix=/opt/sandbox-system/opt/systemd-250 \--pkg-config-path=/opt/lib/pkgconfig \-Drootprefix=/opt/sandbox-system \-Dmode=release && \STEP_BUILDED=1# ------------------------------------------# * Problem: ../src/shared/mount-util.c:143:22: error: ‘MOUNT_ATTR_RDONLY’ undeclared (first use in this function); did you mean ‘MOUNT_ATTR_IDMAP’?#                             f |= MOUNT_ATTR_RDONLY;#                                  ^~~~~~~~~~~~~~~~~#                                  MOUNT_ATTR_IDMAP#            ../src/shared/mount-util.c:143:22: note: each undeclared identifier is reported only once for each function it appears in#            ../src/shared/mount-util.c:146:22: error: ‘MOUNT_ATTR_NOSUID’ undeclared (first use in this function); did you mean ‘MOUNT_ATTR_RDONLY’?#                             f |= MOUNT_ATTR_NOSUID;#                                  ^~~~~~~~~~~~~~~~~#                                  MOUNT_ATTR_RDONLY#            ../src/shared/mount-util.c:149:22: error: ‘MOUNT_ATTR_NODEV’ undeclared (first use in this function); did you mean ‘MOUNT_ATTR_NOSUID’?#                             f |= MOUNT_ATTR_NODEV;#                                  ^~~~~~~~~~~~~~~~#                                  MOUNT_ATTR_NOSUID#            ../src/shared/mount-util.c:152:22: error: ‘MOUNT_ATTR_NOEXEC’ undeclared (first use in this function); did you mean ‘MOUNT_ATTR_NODEV’?#                             f |= MOUNT_ATTR_NOEXEC;#                                  ^~~~~~~~~~~~~~~~~#                                  MOUNT_ATTR_NODEV#            [338/1802] Compiling C object src/shared/libsystemd-shared-250.a.p/mount-setup.c.o#            ninja: build stopped: subcommand failed.#   - Solve: 按照提示修改:#                MOUNT_ATTR_RDONLY 改为: MOUNT_ATTR_IDMAP#                MOUNT_ATTR_NOSUID 改为: MOUNT_ATTR_IDMAP#                MOUNT_ATTR_NODEV  改为: MOUNT_ATTR_IDMAP#                MOUNT_ATTR_NOEXEC 改为: MOUNT_ATTR_IDMAPcd $STORAGE/systemd-250 && ninja -C build/ install && STEP_INSTALLED=1# ------------------------------------------# After configured, As the root user, replace the running systemd manager (the init process) with the systemd executable newly built and installed:# 配置完成后, 作为 root 用户, 用新构建和安装的 systemd 可执行文件替换正在运行的 systemd 管理器 (init进程):#    systemctl daemon-reexec# ------------------------------------------if [[ $STEP_INSTALLED == 1 ]]; then# ......................................# Regular synchronization file path.if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fiif [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi# ......................................# Skip # ln -sf /opt/sandbox-system/opt/systemd-250/bin/* /usr/local/bin/# ......................................# Skip # rsync -av /opt/sandbox-system/opt/systemd-250/include/ /usr/local/include/# ......................................# Skip # rsync -av /opt/sandbox-system/opt/systemd-250/lib/ /usr/local/lib/# ......................................cp -f /opt/sandbox-system/opt/systemd-250/lib/pkgconfig/libsystemd.pc /opt/lib/pkgconfig/# Skip # cp -f /opt/sandbox-system/opt/systemd-250/lib/pkgconfig/libudev.pc /opt/lib/pkgconfig/# ......................................# Sandbox system synchronization file path.if [[ ! -d "/opt/sandbox-system/lib" ]]; then mkdir /opt/sandbox-system/lib; fiif [[ ! -d "/opt/sandbox-system/lib/pkgconfig" ]]; then mkdir /opt/sandbox-system/lib/pkgconfig; fi# ......................................cp -f /opt/sandbox-system/opt/systemd-250/lib/pkgconfig/libsystemd.pc /opt/sandbox-system/lib/pkgconfig/# Skip # cp -f /opt/sandbox-system/opt/systemd-250/lib/pkgconfig/libudev.pc /opt/sandbox-system/lib/pkgconfig/fi# ------------------------------------------cd $STORAGE && rm -rf $STORAGE/systemd-250 && return 0elseecho "[Caution] Path: ( /opt/sandbox-systemd/systemd-250 ) Already Exists."# ------------------------------------------return 0fi
}function main() {# ----------- Compilation Environment ----------# 编译 Systemd 时需要引入 libcap 的 include 头文件。# >>>>>>>>>>>>>>>>>>>>>>> PCRE2 的 include 头文件。export C_INCLUDE_PATH=/opt/libcap-2.68/include:/opt/pcre2-10.43/includeexport CPLUS_INCLUDE_PATH=/opt/libcap-2.68/include:/opt/pcre2-10.43/include# ..............................................# 编译 Systemd 时需要引入 PCRE2 的 lib 库文件。export LIBRARY_PATH=/opt/pcre2-10.43/libexport LD_LIBRARY_PATH=/opt/pcre2-10.43/lib# ----------------- Dependency -----------------Make_Install_libcap_2_68# ------------------- Jinja2 -------------------Build_Install_MarkupSafe_1_1_1_by_Python3Build_Install_Jinja2_2_9_6_by_Python3# ----------------- util-linux -----------------Compile_Install_automake_1_16Compile_Install_util_linux_2_39_3# --------------- Systemd - 250 ----------------Build_Install_Systemd_250
}main

总结

以上就是关于 Linux运维 Bash脚本 构建安装Systemd-250 的全部内容。

更多内容可以访问我的代码仓库:

https://gitee.com/goufeng928/public

https://github.com/goufeng928/public

http://www.dt0577.cn/news/19183.html

相关文章:

  • 深圳企业网站制作设计长沙正规竞价优化服务
  • 怎么做购物平台网站网站建设深圳公司
  • 做阿里巴巴网站图片大全十大搜索引擎地址
  • 青岛商业网站建设附近广告公司
  • 企业wap网站源码超云seo优化
  • 网站建设与管理用什么软件有哪些seo提升关键词排名
  • 网络营销推广运营山东网络优化公司排名
  • 四川网站建设培训班短视频seo营销系统
  • 打开一张图片后点击跳转到网站怎么做的公司网站制作要多少钱
  • 做家装的网站有哪些内容目前最好的引流推广方法
  • 酒店类网站开发的策略台州网站优化公司
  • 网站源码大全 最新国内最新十大新闻
  • 网站建设平台简介网站查询系统
  • 绍兴专业制作网站网站改版seo建议
  • 深圳沙井网站建设上海关键词排名推广
  • 提供网站建设电话吉林seo网络推广
  • 网站流量与带宽长沙seo公司排名
  • 永川网站开发58同城安居客
  • 静态展示网站模板网络推广服务外包公司
  • 网站生成静态页面学校seo推广培训班
  • pc端网站设计规范大数据精准客户
  • 个人网站建设完整教程网络营销常见术语
  • 给彩票网站做代理违法吗百度知道网页版地址
  • seo网站优化方案书软文宣传
  • wordpress邮件wp smtp深圳关键词排名seo
  • 做网站 二维码登录seo tdk
  • 关于做数学 平方差公式的网站上海seo搜索优化
  • 山西省旅游网站建设分析爱网站查询挖掘工具
  • 装修设计培训班哪个好seo网站建设是什么意思
  • 做网站广告有哪些职位百度文库官网首页