如何使用源码编译BeeGFS搭建开发环境
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章给大家分享的是有关如何使用源码编译BeeGFS搭建开发环境的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如果我们需要动态调试和开发BeeGFS,那么就需要自己手动编
千家信息网最后更新 2025年02月07日如何使用源码编译BeeGFS搭建开发环境
这篇文章给大家分享的是有关如何使用源码编译BeeGFS搭建开发环境的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
如果我们需要动态调试和开发BeeGFS
,那么就需要自己手动编译了,而且能够用最简单的方式运行起来,下面就讲解自己探索和分析的过程。
初始化环境
安装依赖的软件包:
$ yum install -y libuuid-devel libibverbs-devel librdmacm-devel libattr-devel redhat-rpm-config rpm-build xfsprogs-devel cppunit cppunit-devel zlib-devel openssl-devel sqlite sqlite-devel ant gcc-c++ gcc redhat-lsb-core java-devel
获取官方源码
获取指定版本的源码:
$ git clone https://git.beegfs.io/pub/v6.git beegfs-v6$ cd beegfs-v6$ git tag -l6.16.106.116.126.136.146.156.166.176.186.196.26.36.46.56.66.76.86.9$ git checkout -b v6.18 6.18
进行简单的查看和验证:
$ git show 6.18 | head -n12tag 6.18Tagger: Bernd LietzowDate: Mon Mar 12 16:09:35 2018 +0100created tag 6.18commit aee03250ea19502952d2f187e73134996abaec5bAuthor: Bernd Lietzow Date: Mon Mar 12 16:09:13 2018 +0100 updated to release 6.18$ git branch -av master 4a69532 updated to release 6.19* v6.18 aee0325 updated to release 6.18 remotes/origin/HEAD -> origin/master remotes/origin/master 4a69532 updated to release 6.19
分析Makefile
查看他的Makefile,BeeGFS自己实现了一个简单的Makefile工程模板,所有的子模块都使用这一套模板来变异,十分简单高效:
$ make -j$(nproc) -C beegfs_meta/build help[VER] BEEGFS_VERSION="19.5-git8" BEEGFS_VERSION_CODE=18023688make: Entering directory `/root/beegfs-v6/fhgfs_meta/build'Optional arguments: BEEGFS_DEBUG=1 Enables debug information and symbols BEEGFS_DEBUG_OPT=1 Enables internal debug code, but compiled with optimizations CXX=Specifies a c++ compiler DISTCC=distcc Enables the usage of distcc V=1 Print command lines of tool invocations BEEGFS_COMMON_PATH= Path to the beegfs_common directory BEEGFS_OPENTK_PATH= Path to the beegfs_opentk_lib directory BEEGFS_THIRDPARTY_PATH= Path to the beegfs_thirdparty directoryTargets: all (default) build only clean delete compiled files help print this help message rpm create an rpm package deb create debian package filemake: Leaving directory `/root/beegfs-v6/fhgfs_meta/build'$ cat beegfs_meta/build/Makefile# This is the beegfs_meta makefile.# It creates an ELF executable.# # Use "make help" to find out about configuration options.CAN_PACKAGE := yesinclude $(or $(root-dir),../..)/build/Makefile$(call build-executable,\ beegfs-meta,\ $(shell find ../source -iname '*.cpp'),\ opentk common cppunit dl)# enable special reference DirInode debug codeifneq ($(BEEGFS_DEBUG_RELEASE_DIR),) # extra release dir debugging CXXFLAGS += -DBEEGFS_DEBUG_RELEASE_DIRendif$ cat build/Makefile...override V := $(if $V,,@)all:...rpm: ./make-rpm...# build-executable## define a new executable for the build# arguments:# #1: name of the executable# #2: sources# #3: required librariesbuild-executable = $(eval $(call -build-executable-fragment,$(strip $1),$2,$3))define -build-executable-fragmentall: $1CLEANUP_FILES += $1 $(addsuffix .o,$2) $(addsuffix .d,$2)$(addsuffix .o,$2): CXXFLAGS += \ $(foreach lib,$3,$(call resolve-dep-cflags,$(lib)))$1: LDFLAGS += \ -Wl,--start-group $(foreach lib,$3,$(call resolve-dep-ldflags,$(lib))) -Wl,--end-group$1: $(addsuffix .o,$2) $(foreach lib,$3,$(call resolve-dep-deps,$(lib))) @echo "[LD] $$@" $$V$$(CXX) -o $$@ $(addsuffix .o,$2) $$(LDFLAGS)-include $(addsuffix .d,$2)endef
分析RPM脚本
查看他构建
RPM
包的方法,直接打包源码目录,并使用一个RPM
SPEC
文件模板,使用sed
动态生成一个SPEC
文来进行构建:
$ cat beegfs_meta/build/make-rpm #!/bin/bash NAME=beegfs-metaSPEC_FILE=${NAME}.specsource ../../beegfs-versionarch=`uname -m`if [[ "$arch" == "x86_64" ]]; then BUILDARCH="$arch"elif [[ "$arch" =~ 86 ]]; then BUILDARCH="i686"else BUILDARCH=$archfiCONCURRENCY=${MAKE_CONCURRENCY:-4}export BEEGFS_VERSION_PATH=`pwd`/../../beegfs-versionset -epushd ../ TOOLS_ROOT=`pwd`popd BUILD="${TOOLS_ROOT}/build"mkdir -p $BUILD/buildroot/{BUILD,RPMS,S{RPMS,PECS,OURCES}}rm -f $BUILD/buildroot/SOURCES/*.tgzROOT_DIR=${ROOT_DIR:-`(cd ../..; pwd)`}BEEGFS_COMMON_PACKAGE_PATH=${BEEGFS_COMMON_PACKAGE_PATH:-`readlink -f ../../beegfs_common_package`}set +e # test if redhat-rpm-config is installed. If so, we must not specify# %debug_package in the spec file, if not installed we need to define it# in order to strip binaries and to build a debug packagerpm -qa redhat-rpm-config | grep redhat-rpm-configNEED_DEBUG_DEFINE=$?set -epushd $TOOLS_ROOTtar czf $BUILD/buildroot/SOURCES/${NAME}-${BEEGFS_VERSION}.tgz --exclude=buildroot/* *cd $BUILDsed -e "s#%BEEGFS_COMMON_PACKAGE_PATH%#$BEEGFS_COMMON_PACKAGE_PATH#g" \ -e "s/%NAME%/$NAME/g" \ -e "s/%BEEGFS_VERSION%/$BEEGFS_VERSION/g" \ -e "s/%BUILDARCH%/$BUILDARCH/g" \ -e "s/%MAKE_CONCURRENCY%/$CONCURRENCY/g" \ -e "s/%NEED_DEBUG_DEFINE%/$NEED_DEBUG_DEFINE/g" \ ${SPEC_FILE}.in > ${SPEC_FILE}rpmbuild --clean -bb ${SPEC_FILE} --define "_topdir $BUILD/buildroot/" -D "ROOT_DIR $ROOT_DIR"popdrm -fr /var/tmp/${NAME}-root/rm -f /var/tmp/rpm-tmp.*
分析RPM配置
查看
SPEC
中引用的参数,正式上面的脚本替换后的结果:
$ cat beegfs_meta/build/beegfs-meta.spec%define buildarch x86_64%define BEEGFS_COMMON_PACKAGE_PATH /root/beegfs-v6/fhgfs_common_package%define BEEGFS_VERSION %VER%-%RELEASE_STR%%define MAKE_CONCURRENCY 4%define NEED_DEBUG_DEFINE 0%define BEEGFS_VERSION 19.4-git17%define VER %(echo '%{BEEGFS_VERSION}' | cut -d - -f 1)%define BEEGFS_RELEASE_STR %(echo '%{BEEGFS_VERSION}-' | cut -d - -f 2)%define EPOCH %(echo '%{VER}' | cut -d . -f 1)...%buildcd buildmake \ root-dir=%{ROOT_DIR} \ BEEGFS_VERSION=%{BEEGFS_VERSION} \ -j %{MAKE_CONCURRENCY}...$ grep -rHn root-dir beegfs_meta beegfs_meta/build/Makefile:8:include $(or $(root-dir),../..)/build/Makefilebeegfs_meta/build/beegfs-meta.spec.in:74: root-dir=%{ROOT_DIR} \beegfs_meta/build/beegfs-meta.spec:74: root-dir=%{ROOT_DIR} \
正式开始编译
先编译依赖的函数库:
$ make -j$(nproc) -C beegfs_thirdparty/build$ make -j$(nproc) -C beegfs_opentk_lib/build$ make -j$(nproc) -C beegfs_common/build
根据需要编译所需的模块:
$ make -j$(nproc) -C beegfs_meta/build clean# make -j$(nproc) -C beegfs_meta/build BEEGFS_DEBUG=1$ make -j$(nproc) -C beegfs_meta/build[VER] BEEGFS_VERSION="19.5-git9" BEEGFS_VERSION_CODE=18023689make: Entering directory `/root/beegfs-v6/fhgfs_meta/build'[CXX] ../source/app/App.cpp.o[CXX] ../source/components/DatagramListener.cpp.o[CXX] ../source/app/config/Config.cpp.o...[CXX] ../source/toolkit/BuddyCommTk.cpp.o[CXX] ../source/toolkit/StorageTkEx.cpp.o[CXX] ../source/toolkit/XAttrTk.cpp.o[LD] beegfs-metamake: Leaving directory `/root/beegfs-v6/fhgfs_meta/build'$ file /root/beegfs-v6/beegfs_meta/build/beegfs-meta/root/beegfs-v6/beegfs_meta/build/beegfs-meta: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=be90bbf04db11b7dcf46d29240b7cb20ab676cf5, not stripped
也可以编译Debug版本,但是要注意,此时前面依赖的函数库也得编译成Debug版本,否则运行时会直接崩溃:
$ make -j$(nproc) -C beegfs_meta/build BEEGFS_DEBUG=1[VER] BEEGFS_VERSION="19.5-git9" BEEGFS_VERSION_CODE=18023689make: Entering directory `/root/beegfs-v6/fhgfs_meta/build'make: Nothing to be done for `all'.make: Leaving directory `/root/beegfs-v6/fhgfs_meta/build'[root@sacd02 beegfs-v6]# make -j$(nproc) -C beegfs_meta/build rpm[VER] BEEGFS_VERSION="19.5-git9" BEEGFS_VERSION_CODE=18023689make: Entering directory `/root/beegfs-v6/fhgfs_meta/build'./make-rpm~/beegfs-v6/fhgfs_meta ~/beegfs-v6/fhgfs_meta/build~/beegfs-v6/fhgfs_meta/buildredhat-rpm-config-9.1.0-87.el7.centos.noarch~/beegfs-v6/fhgfs_meta ~/beegfs-v6/fhgfs_meta/buildExecuting(%prep): /bin/sh -e /var/tmp/rpm-tmp.0aowao+ umask 022+ cd /root/beegfs-v6/fhgfs_meta/build/buildroot//BUILD+ cd /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILD+ rm -rf beegfs-meta-19.5+ /usr/bin/mkdir -p beegfs-meta-19.5+ cd beegfs-meta-19.5+ /usr/bin/gzip -dc /root/beegfs-v6/fhgfs_meta/build/buildroot/SOURCES/beegfs-meta-19.5-git9.tgz+ /usr/bin/tar -xvvf -drwxr-xr-x root/root 0 2019-05-09 10:32 build/-rw-r--r-- root/root 482 2019-05-08 17:43 build/Makefile-rw-r--r-- root/root 3994 2019-05-08 17:43 build/beegfs-meta.spec.in-rw-r--r-- root/root 199 2019-05-08 17:43 build/config.cpackdrwxr-xr-x root/root 0 2019-05-08 17:43 build/debian/-rw-r--r-- root/root 176 2019-05-08 17:43 build/debian/changelog.in-rw-r--r-- root/root 2 2019-05-08 17:43 build/debian/compat...-rw-r--r-- root/root 27079 2019-05-08 22:43 source/toolkit/BuddyCommTk.cpp.d-rw-r--r-- root/root 26516 2019-05-08 22:43 source/toolkit/XAttrTk.cpp.d-rw-r--r-- root/root 2571472 2019-05-08 22:43 source/toolkit/StorageTkEx.cpp.o-rw-r--r-- root/root 2405768 2019-05-08 22:43 source/toolkit/XAttrTk.cpp.o-rw-r--r-- root/root 3042288 2019-05-08 22:43 source/toolkit/BuddyCommTk.cpp.o+ STATUS=0+ '[' 0 -ne 0 ']'+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .+ exit 0Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.FjeeXr+ umask 022+ cd /root/beegfs-v6/fhgfs_meta/build/buildroot//BUILD+ cd beegfs-meta-19.5+ cd build+ make root-dir=/root/beegfs-v6 BEEGFS_VERSION=19.5-git9 -j 4[VER] BEEGFS_VERSION="19.5-git9" BEEGFS_VERSION_CODE=18023689make[1]: Entering directory `/root/beegfs-v6/fhgfs_meta/build/buildroot/BUILD/beegfs-meta-19.5/build'make[1]: warning: -jN forced in submake: disabling jobserver mode.make[1]: Nothing to be done for `all'.make[1]: Leaving directory `/root/beegfs-v6/fhgfs_meta/build/buildroot/BUILD/beegfs-meta-19.5/build'+ exit 0Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.OeYWrw+ umask 022+ cd /root/beegfs-v6/fhgfs_meta/build/buildroot//BUILD+ '[' /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64 '!=' / ']'+ rm -rf /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64++ dirname /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64+ mkdir -p /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT+ mkdir /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64+ cd beegfs-meta-19.5+ cd build+ echo 'mkdir RPM_BUILD_ROOT (/root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64)'mkdir RPM_BUILD_ROOT (/root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64)+ mkdir -p /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/etc/beegfs/+ cp -a dist/etc/beegfs-meta.conf /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/etc/beegfs/+ mkdir -p /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/etc/init.d/+ INITSCRIPT=dist/etc/init.d/beegfs-meta.init+ install -D dist/etc/init.d/beegfs-meta.init /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/etc/init.d/beegfs-meta+ install -D -m644 dist/usr/lib/systemd/system/beegfs-meta.service /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/usr/lib/systemd/system/beegfs-meta.service+ GENERIC_INITSCRIPT=/root/beegfs-v6/fhgfs_common_package/build/dist/etc/init.d/beegfs-service.init+ cat /root/beegfs-v6/fhgfs_common_package/build/dist/etc/init.d/beegfs-service.init+ install -D beegfs-meta /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/opt/beegfs/sbin/beegfs-meta+ install -D dist/sbin/beegfs-setup-meta /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/opt/beegfs/sbin/beegfs-setup-meta+ install -D dist/etc/default/beegfs-meta /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/etc/default/beegfs-meta+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /root/beegfs-v6/fhgfs_meta/build/buildroot//BUILD/beegfs-meta-19.5extracting debug info from /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64/opt/beegfs/sbin/beegfs-metadwz: Too few files for multifile optimization/usr/lib/rpm/sepdebugcrcfix: Updated 1 CRC32s, 0 CRC32s did match.+ /usr/lib/rpm/check-buildroot+ /usr/lib/rpm/redhat/brp-compress+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1+ /usr/lib/rpm/redhat/brp-python-hardlink+ /usr/lib/rpm/redhat/brp-java-repack-jarsProcessing files: beegfs-meta-19.5-git9el7.x86_64Provides: beegfs-meta = 19:19.5-git9el7 beegfs-meta(x86-64) = 19:19.5-git9el7 config(beegfs-meta) = 19:19.5-git9el7Requires(interp): /bin/sh /bin/shRequires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1Requires(post): /bin/shRequires(preun): /bin/shRequires: /bin/bash libbeegfs-opentk.so()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.2)(64bit) libc.so.6(GLIBC_2.3.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libcppunit-1.12.so.1()(64bit) libdl.so.2()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.2.5)(64bit) libpthread.so.0(GLIBC_2.3.2)(64bit) libpthread.so.0(GLIBC_2.3.3)(64bit) libpthread.so.0(GLIBC_2.3.4)(64bit) librt.so.1()(64bit) librt.so.1(GLIBC_2.2.5)(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(CXXABI_1.3.5)(64bit) libstdc++.so.6(GLIBCXX_3.4)(64bit) libstdc++.so.6(GLIBCXX_3.4.11)(64bit) libstdc++.so.6(GLIBCXX_3.4.15)(64bit) libstdc++.so.6(GLIBCXX_3.4.19)(64bit) libstdc++.so.6(GLIBCXX_3.4.9)(64bit) rtld(GNU_HASH)Processing files: beegfs-meta-debuginfo-19.5-git9el7.x86_64Provides: beegfs-meta-debuginfo = 19:19.5-git9el7 beegfs-meta-debuginfo(x86-64) = 19:19.5-git9el7Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64Wrote: /root/beegfs-v6/fhgfs_meta/build/buildroot/RPMS/x86_64/beegfs-meta-19.5-git9el7.x86_64.rpmWrote: /root/beegfs-v6/fhgfs_meta/build/buildroot/RPMS/x86_64/beegfs-meta-debuginfo-19.5-git9el7.x86_64.rpmExecuting(%clean): /bin/sh -e /var/tmp/rpm-tmp.jbV8Ew+ umask 022+ cd /root/beegfs-v6/fhgfs_meta/build/buildroot//BUILD+ cd beegfs-meta-19.5+ rm -rf /root/beegfs-v6/fhgfs_meta/build/buildroot/BUILDROOT/beegfs-meta-19.5-git9el7.x86_64+ exit 0Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.IPpOum+ umask 022+ cd /root/beegfs-v6/fhgfs_meta/build/buildroot//BUILD+ rm -rf beegfs-meta-19.5+ exit 0~/beegfs-v6/fhgfs_meta/buildmake: Leaving directory `/root/beegfs-v6/fhgfs_meta/build'$ ll beegfs_meta/build/buildroot/RPMS/x86_64/total 18036-rw-r--r-- 1 root root 1165336 May 9 10:33 beegfs-meta-19.5-git9el7.x86_64.rpm-rw-r--r-- 1 root root 17300984 May 9 10:33 beegfs-meta-debuginfo-19.5-git9el7.x86_64.rpm
分析启动脚本
BeeGFS使用Systemd进行管理,其配置文件中直接指定运行程序的路径和参数:
$ systemctl status beegfs-meta.service ● beegfs-meta.service - Start BeeGFS Metadata Server Loaded: loaded (/usr/lib/systemd/system/beegfs-meta.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-05-08 22:33:19 CST; 10min ago Process: 48475 ExecStop=/etc/init.d/beegfs-meta stop (code=exited, status=0/SUCCESS) Process: 48685 ExecStart=/etc/init.d/beegfs-meta start (code=exited, status=0/SUCCESS) Main PID: 48691 (beegfs-meta/Mai) Tasks: 442 Memory: 363.9M CGroup: /system.slice/beegfs-meta.service └─48691 /opt/beegfs/sbin/beegfs-meta cfgFile=/etc/beegfs/beegfs-meta.conf pidFile=/var/run/beegfs-meta.pidMay 08 22:33:19 sacd02 systemd[1]: Starting Start BeeGFS Metadata Server...May 08 22:33:19 sacd02 beegfs-meta[48685]: Starting BeeGFS Meta Server: [ OK ]May 08 22:33:19 sacd02 systemd[1]: Started Start BeeGFS Metadata Server.$ cat /usr/lib/systemd/system/beegfs-meta.service[Unit]Description=Start BeeGFS Metadata ServerRequires=network-online.target# We disable the wants service, because it spams the log files#Wants=beegfs-mgmtd.service beegfs-storage.service openibd.service openib.service rdma.service opensmd.service opensm.serviceAfter=network-online.target beegfs-mgmtd.service beegfs-storage.service openibd.service openib.service rdma.service opensmd.service opensm.service zfs.target[Service]ExecStart=/etc/init.d/beegfs-meta startExecStop=/etc/init.d/beegfs-meta stopType=forking# We disable PIDFile= because it doesn't work with multi-mode configurations#PIDFile=/var/run/beegfs-meta.pid[Install]WantedBy=multi-user.target
为了保持跟早期的SysInitV保持兼容,整整的程序执行脚本在
init.d
目录中:
$ cat /etc/init.d/beegfs-meta#!/bin/bash#### BEGIN INIT INFO# Provides: beegfs-meta# Required-Start:# Should-Start: $network beegfs-mgmtd beegfs-storage openibd openib rdma opensmd opensm# Required-Stop:# Should-Stop: $network beegfs-mgmtd beegfs-storage openibd openib rdma opensmd opensm# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# chkconfig: 35 95 9# Short-Description: BeeGFS Meta# Description: Start BeeGFS Meta### END INIT INFOAPP_NAME="BeeGFS Meta Server"SERVICE_NAME=beegfs-meta# source function library. /etc/beegfs/lib/start-stop-functions. /etc/beegfs/lib/init-multi-modeSYSCONFIG_FILE=/etc/default/${SERVICE_NAME}# Check for missing binaries (stale symlinks should not happen)# Note: Special treatment of stop for LSB conformanceAPP_BIN=/opt/beegfs/sbin/${SERVICE_NAME}test -x $APP_BIN || { echo "$APP_BIN not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; }source ${SYSCONFIG_FILE}if [ "${MULTI_MODE}" = "YES" -o "${MULTI_MODE}" = "yes" ]; then init_multi_mode $1 $2 exit $?fi# Check for existence of needed config file and read itAPP_CONFIG=/etc/beegfs/${SERVICE_NAME}.conftest -r $APP_CONFIG || { echo "$APP_CONFIG not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; }PIDFILE=/var/run/${SERVICE_NAME}.pidDAEMON_ARGS="cfgFile=${APP_CONFIG} pidFile=$PIDFILE"RETVAL=0# Return values acc. to LSB for all commands but status:# 0 - success# 1 - generic or unspecified error# 2 - invalid or excess argument(s)# 3 - unimplemented feature (e.g. "reload")# 4 - user had insufficient privileges# 5 - program is not installed# 6 - program is not configured# 7 - program is not running# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)# # Note that starting an already running service, stopping# or restarting a not-running service as well as the restart# with force-reload (in case signaling is not supported) are# considered a success.case "$1" in start) if [ -f "${SYSCONFIG_FILE}" ]; then if [ "${START_SERVICE}" = "NO" -o "${START_SERVICE}" = "no" ]; then echo "${APP_NAME} not set to be started" exit 0 fi fi echo -n "Starting ${APP_NAME}: " ## create subfolder for lock files, on Debian systems needed mkdir -p /var/lock/subsys ## Start daemon with startproc(8). If this fails ## the return value is set appropriately by startproc. daemon --pidfile $PIDFILE $APP_BIN $DAEMON_ARGS \ && touch /var/lock/subsys/${SERVICE_NAME} RETVAL=$? echo ;; stop) echo -n "Shutting down ${APP_NAME}: " ## Stop daemon with killproc(8) and if this fails ## killproc sets the return value according to LSB. killproc -p $PIDFILE $APP_BIN && rm -f /var/lock/subsys/${SERVICE_NAME} RETVAL=$? echo ;; restart) ## Stop the service and regardless of whether it was ## running or not, start it again. $0 stop $0 start RETVAL=$? ;; status) echo -n "Checking for service ${APP_NAME}: " ## Check status with checkproc(8), if process is running ## checkproc will return with exit status 0. # Return value is slightly different for the status command: # 0 - service up and running # 1 - service dead, but /var/run/ pid file exists # 2 - service dead, but /var/lock/ lock file exists # 3 - service not running (unused) # 4 - service status unknown :-( # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.) status -p $PIDFILE $APP_BIN RETVAL=$? echo ;; *) echo "Usage: $0 {start|stop|status|restart}" exit 3 ;; esacexit $RETVAL
运行编译程序
我们只需要把
BeeGFS
的SysInitV
的启动脚本中改成自己编译的程序,就可以直接无缝运行了:
$ ps -aux | grep beegfs-metaroot 48691 36.7 0.0 33435824 338600 ? Ssl 22:33 4:09 /opt/beegfs/sbin/beegfs-meta cfgFile=/etc/beegfs/beegfs-meta.conf pidFile=/var/run/beegfs-meta.pidroot 51229 0.0 0.0 112712 980 pts/1 R+ 22:44 0:00 grep --color=auto beegfs-meta$ vi /etc/init.d/beegfs-meta#APP_BIN=/opt/beegfs/sbin/${SERVICE_NAME}APP_BIN=/root/beegfs-v6/beegfs_meta/build/${SERVICE_NAME}# /root/beegfs-v6/beegfs_meta/build/beegfs-meta cfgFile=/etc/beegfs/beegfs-meta.conf pidFile=/var/run/beegfs-meta.pid$ systemctl stop beegfs-meta.service$ beegfs-ctl --listtargets --state --nodetype=metaTargetID Reachability Consistency NodeID======== ============ =========== ====== 2 Online Good 2 3 Offline Needs-resync 3$ systemctl start beegfs-meta.service$ beegfs-ctl --listtargets --state --nodetype=metaTargetID Reachability Consistency NodeID======== ============ =========== ====== 2 Online Good 2 3 Online resyncing 3$ systemctl status beegfs-meta.service● beegfs-meta.service - Start BeeGFS Metadata Server Loaded: loaded (/usr/lib/systemd/system/beegfs-meta.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2019-05-09 11:01:41 CST; 21s ago Process: 60986 ExecStop=/etc/init.d/beegfs-meta stop (code=exited, status=0/SUCCESS) Process: 62824 ExecStart=/etc/init.d/beegfs-meta start (code=exited, status=0/SUCCESS) Main PID: 62834 (beegfs-meta/Mai) Tasks: 441 Memory: 53.4M CGroup: /system.slice/beegfs-meta.service └─62834 /root/beegfs-v6/beegfs_meta/build/beegfs-meta cfgFile=/etc/beegfs/beegfs-meta.conf pidFile=/var/run/beegfs-meta.pidMay 09 11:01:40 sacd02 systemd[1]: Starting Start BeeGFS Metadata Server...May 09 11:01:41 sacd02 beegfs-meta[62824]: Starting BeeGFS Meta Server: [ OK ]May 09 11:01:41 sacd02 systemd[1]: Started Start BeeGFS Metadata Server.$ ps -aux | grep beegfs-metaroot 62834 146 0.0 33364184 52596 ? Ssl 11:01 6:34 /root/beegfs-v6/beegfs_meta/build/beegfs-meta cfgFile=/etc/beegfs/beegfs-meta.conf pidFile=/var/run/beegfs-meta.pidroot 63289 0.0 0.0 112708 980 pts/2 S+ 11:06 0:00 grep --color=auto beegfs-meta
感谢各位的阅读!关于"如何使用源码编译BeeGFS搭建开发环境"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
编译
源码
脚本
分析
运行
程序
环境
开发
模板
版本
内容
函数
动态
参数
文件
更多
模块
目录
篇文章
配置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发在哪审核
如何鼓励软件开发人员
黑客网络安全书籍推
微交易软件开发周期
数据库的更新失败怎么办
自学服务器管理
文本取某一段数据库
qq空间 服务器忙
和平精英的免费服务器是多少
上古有灵妖服务器
华为5g网络技术展
腾讯数据库基地广东
宽城区通用网络技术咨询诚信服务
福建智能化软件开发销售
服务器硬盘的温度怎么查看
军转 软件开发面试题
煤炭企业工业网络安全
古交软件开发生产商
企业网络安全级别
冬残奥会网络安全工作保障总结
access2010数据库教程
开发数据库应用语言
app服务器显示404错误
计算机网络技术可以考营养师吗
深圳新伯乐网络技术
软件开发进小公司
大华流媒体服务器接口开发
高性能服务器排名
电脑odbc怎么连接数据库
正式服部落人数最多的服务器