群晖DSM 6.2增加zgrep命令

群晖 `DSM 6.2` 系统上执行 `zgrep` 命令的时候提示找不到命令,其他平台系统(`ARM` ),需要手工编译安装`ZUtils`,来提供。但是如果是 `X86` 系统的话(比如 `DS718+` ),可以直接使用交叉编译环境里的工具,直接拷贝到系统即可。

首先参考 搭建群晖交叉编译环境(DS718+/ubuntu 16.04.6/DSM 6.2.1-23824 Update 6) 搭建群晖 `DSM 6.2` 的编译环境。

`DS718+` 执行如下:

$ cd  ~/toolkit//build_env/ds.x64-6.2/

$ scp -r ./bin/zgrep username@10.10.10.111:~/

$ ssh 10.10.10.111 -l username

$ sudo mv ~/zgrep /usr/local/bin/

 

 

需要编译的(`ARM` 芯片版本),执行如下命令编译:

$ cd ~/toolkit/pkgscripts-ng

# 下载 ZUtils 1.8
$ sudo wget http://deb.debian.org/debian/pool/main/z/zutils/zutils_1.8.orig.tar.xz -O ../build_env/ds.x64-6.2/root/zutils_1.8.orig.tar.xz
 
# 也可以本站下载 sudo wget https://www.mobibrw.com/wp-content/uploads/2019/04/zutils_1.8.orig_.tar.xz -O ../build_env/ds.x64-6.2/root/zutils_1.8.orig.tar.xz

$ sudo chroot ../build_env/ds.x64-6.2/
 
$ cd root
 
$ export PREFIX="/root/build_libs"
 
$ export HOST="x86_64-linux-gnu"
 
$ mkdir -p $PREFIX

# 编译 ZUtils 1.8
$ tar xvf zutils_1.8.orig.tar.xz

$ cd zutils-1.8/
 
$ PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ \
LD_LIBRARY_PATH=$PREFIX/lib/ \
./configure \
--prefix=$PREFIX
 
$ make clean
 
$ make 
 
$ make install

对于编译好的程序,复杂的可以自己制作安装包,简单的可以直接通过SSH推送到设备的/usr/local/bin目录下即可。

比如本次编译结果:

# 暂时只需要zgrep,因此只安装 zgrep
$ scp -r $PREFIX/bin/zgrep username@10.10.10.111:~/

$ ssh 10.10.10.111 -l username

$ sudo mv ~/zgrep /usr/local/bin/

参考链接


ESXi 6.7 使用NUT Client连接群晖UPS服务器

近来增加了一台工控机,上面跑了软路由等业务,万一突然断电 `ESXi` 坏了启不了,估计就得废好大劲折腾了。以前有给群晖配过一台 `APC BK650` 的 `UPS`,目前 `UPS` 的 `COM` 数据输出直接给到了群晖,毕竟无论如何也得优先保障群晖的可靠性。在群晖的设置里面看到过 `UPS` 服务器的选项,所以想着 `ESXi` 能不能连接群晖的 `UPS` 服务器,实现断电自动关机以保证数据安全。

继续阅读ESXi 6.7 使用NUT Client连接群晖UPS服务器

解决Btrfs文件系统ext2_saved文件磁盘占用异常

最近在 `OpenMediaVault 4.1.22-1(Arrakis)` 进行磁盘文件占用分析的时候,发现磁盘空间异常占用问题,如下:

root@openmediavault:/media/6357625f-c966-49ba-9c90-9e8f8ff50433# du -ah --max-depth=1
0	./lost+found
1.5T	./MyCloud
8.0K	./aquota.user
8.0K	./aquota.group
1.3T	./ext2_saved
4.0K	./WDMyCloudSync.sh
2.7T	.

这个 `1.3T ./ext2_saved`  文件是不存在的,并且没办法通过常规命令删除。

这个文件产生的原因是,执行过 从 `EXT3/4` 转换转化分区到 `Btrfs` :

$ btrfs-convert /media/6357625f-c966-49ba-9c90-9e8f8ff50433

完成转换需要删除备份的 `ext2_saved` 子卷,否则空间会不能释放。 请注意,如果没了它(备份子卷),你将没办法还原回 `EXT3/4` 文件系统。

$ sudo apt-get install btrfs-tools

# 执行,然后无视报错
$ btrfs subvolume delete /media/6357625f-c966-49ba-9c90-9e8f8ff50433/ext2_saved

可能会报错:

ERROR: cannot access subvolume /media/6357625f-c966-49ba-9c90-9e8f8ff50433/ext2_saved: No such file or directory

无视这个报错即可。

完成后再次查询文件占用空间:

root@openmediavault:/media/6357625f-c966-49ba-9c90-9e8f8ff50433# du -ah --max-depth=1
0	./lost+found
1.5T	./MyCloud
8.0K	./aquota.user
8.0K	./aquota.group
4.0K	./WDMyCloudSync.sh
1.5T	.

可以看到空间已经被释放了。

参考链接


基于APC BK650-CH UPS连接群晖DS718+通过NUT(Network UPS Tools)实现WDMyCloud Gen1断电自动关机

最近新入手了 群晖 `DS718+`,鉴于群晖断电容易损坏硬盘的传说,为了保证设备的安全,特别购入了 `APC BK650-CH UPS` 。

`APC BK650-CH UPS` 有多个电源插槽,可以同时为多个设备提供断电保护,但是 `APC BK650-CH UPS` 只有一个 `USB` 设备接口,这个接口用来提供电源状态信息,比如是否断电,当前电量信息等数据。这就造成收到断电通知的只能有一个设备,这个设备必须通过网络通知其他设备,才能实现全部的断电通知。

继续阅读基于APC BK650-CH UPS连接群晖DS718+通过NUT(Network UPS Tools)实现WDMyCloud Gen1断电自动关机

解决undefined reference to pthread_atfork/pthread_detach/pthread_create/pthread_join

在编译陈硕github上面的代码时,遇到了链接错误:

../Thread.o: In function `(anonymous namespace)::ThreadNameInitializer::ThreadNameInitializer()':

Thread.cpp:(.text+0x5f): undefined reference to `pthread_atfork'
../Thread.o: In function `muduo::Thread::~Thread()':
Thread.cpp:(.text+0x3f9): undefined reference to `pthread_detach'
../Thread.o: In function `muduo::Thread::start()':
Thread.cpp:(.text+0x50e): undefined reference to `pthread_create'
../Thread.o: In function `muduo::Thread::join()':
Thread.cpp:(.text+0x5ce): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status

在编译时已经加了-lpthread,还是有这个问题。

在这里找到了答案:http://stackoverflow.com/questions/2373109/what-library-to-be-to-be-used-to-avoid-undefined-reference-to-pthread-atfork

pthread_atfork是POSIX标准,在编译时要加上-pthread
-lpthread是老版本的gcc编译器用的,在新版本中应该用-pthread取代-lpthread

参考链接


解决undefined reference to `pthread_atfork`/`pthread_detach`/`pthread_create`/`pthread_join`

搭建群晖交叉编译环境(DS718+/ubuntu 16.04.6/DSM 6.2.1-23824 Update 6)

搭建群晖交叉编译环境(DS718+/ubuntu 16.04.6/DSM 6.2.1-23824 Update 6),以 tcl 8.4.19/expect 5.45.4/dos2unix 7.4.0的编译为例,如下:

$ sudo apt-get -y install git

$ mkdir -p toolkit

$ cd toolkit

$ git clone https://github.com/SynologyOpenSource/pkgscripts-ng.git

# 如果访问github存在困难,可用本站下载一份代码拷贝
# wget https://www.mobibrw.com/wp-content/uploads/2019/04/pkgscripts-ng.zip

$ cd pkgscripts-ng

$ sudo ./EnvDeploy -v 6.2 -p x64

# 如果已经通过其他途径下载,或者已经下载完成,执行如下命令 
# `sudo ./EnvDeploy -v 6.2 -p x64 -t ../toolkit_tarballs/`
# 比如: 
# wget https://www.mobibrw.com/wp-content/uploads/2019/04/base_env-6.2.txz -O ../toolkit_tarballs/
# wget https://www.mobibrw.com/wp-content/uploads/2019/04/ds.x64-6.2.dev.txz -O ../toolkit_tarballs/
# wget https://www.mobibrw.com/wp-content/uploads/2019/04/ds.x64-6.2.env.txz -O ../toolkit_tarballs/
# sudo ./EnvDeploy -v 6.2 -p x64 -t ../toolkit_tarballs/

# 下载 TCL 8.4.19 (不要超过这个版本号,否则 expect 链接不通过)
$ sudo wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz -O ../build_env/ds.x64-6.2/root/tcl8.4.19-src.tar.gz

# 也可本站下载 sudo wget https://www.mobibrw.com/wp-content/uploads/2019/04/tcl8.4.19-src.tar.gz -O ../build_env/ds.x64-6.2/root/tcl8.4.19-src.tar.gz

# 下载 Expect 5.45.4
$ sudo wget https://sourceforge.net/projects/expect/files/Expect/5.45.4/expect5.45.4.tar.gz -O ../build_env/ds.x64-6.2/root/expect5.45.4.tar.gz

# 也可以本站下载 sudo wget https://www.mobibrw.com/wp-content/uploads/2019/04/expect5.45.4.tar.gz -O ../build_env/ds.x64-6.2/root/expect5.45.4.tar.gz

$ sudo chroot ../build_env/ds.x64-6.2/

$ cd root

$ export PREFIX="/root/build_libs"

$ export HOST="x86_64-linux-gnu"

$ mkdir -p $PREFIX

# 编译 TCL 8.4.19
$ tar xvf tcl8.4.19-src.tar.gz

$ cd tcl8.4.19

$ PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ \
LD_LIBRARY_PATH=$PREFIX/lib/ \
./unix/configure \
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
--host=$HOST \
--prefix=$PREFIX \
--disable-shared

$ make clean

$ make 

$ make install

$ cd ..

# 编译 Expect 5.45.4
$ tar xvf expect5.45.4.tar.gz

$ cd expect5.45.4
 
$ CPPFLAGS="-I$PREFIX/include"

$ PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig/ \
LD_LIBRARY_PATH=$PREFIX/lib/ \
LDFLAGS="-lutil" \
./configure \
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
--host=$HOST \
--prefix=$PREFIX \
--enable-static \
--disable-shared

$ make clean

$ make 

$ make install

$ cd ..

# 下载 dos2unix 7.4
# 也可本站下载 https://www.mobibrw.com/wp-content/uploads/2019/04/dos2unix-7.4.0.tar.gz
$ sudo wget https://sourceforge.net/projects/dos2unix/files/dos2unix/7.4.0/dos2unix-7.4.0.tar.gz ../build_env/ds.x64-6.2/root/dos2unix-7.4.0.tar.gz

$ tar xvf dos2unix-7.4.0.tar.gz

$ cd dos2unix-7.4.0

$ make

# 下载 sshpass 1.06
# 也可本站下载 https://www.mobibrw.com/wp-content/uploads/2019/04/sshpass_1.06.orig_.tar.gz
$ sudo wget http://deb.debian.org/debian/pool/main/s/sshpass/sshpass_1.06.orig.tar.gz ../build_env/ds.x64-6.2/root/sshpass_1.06.orig.tar.gz

$ tar xvf sshpass_1.06.orig.tar.gz

$ cd sshpass-1.06

$ make

对于编译好的程序,复杂的可以自己制作安装包,简单的可以直接通过SSH推送到设备的/usr/local/bin目录下即可。

比如本次编译结果:

$ scp -r $PREFIX/lib/tcl8.4 username@10.10.10.111:~/

$ scp $PREFIX/bin/expect username@10.10.10.111:~/

$ scp /root/dos2unix-7.4.0/dos2unix username@10.10.10.111:~/

$ scp /root/sshpass-1.06/sshpass username@10.10.10.111:~/

$ ssh 10.10.10.111 -l username

$ sudo mv ~/tcl8.4 /usr/local/lib/

$ sudo mv ~/expect /usr/local/bin/

$ sudo mv ~/dos2unix /usr/local/bin/

$ sudo mv ~/sshpass /usr/local/bin/

参考链接