Blast Error: mdb_env_open: Function not implemented 错误

最近在使用RepeatMasker时产生这个错误:

Building general libraries in: ~/soft/RepeatMasker/Libraries/CONS-Dfam_withRBRM_3.7/general
RepeatMasker::createLib(): Error invoking ~/soft/rmblast-2.14.0/bin/makeblastdb on file ~/soft/RepeatMasker/Libraries/CONS-Dfam_withRBRM_3.7/general.working/is.lib.

查看makeblastdb.log文件时,发现是BLAST Database creation error: mdb_env_open: Function not implemented,当我单独使用rmblast中的makeblastdb和ncbi-blast+中的makeblastdb时都会发生上述错误,我的blast++版本是2.10.0,但使用blast++ 2.7版本就不会出现上述问题,可能是系统C++版本和blast++编译的C++版本不一致导致的,解决的方法有两种,一种是直接使用低版本的blast++如2.7版本,也可以使用blast++的源代码进行编译安装,可以参考RMBlast 官网的方法,不过时间有点长。

  1. Download NCBI Blast+ and rmblast patch file:
    ncbi-blast-2.14.1+-src.tar.gz
    isb-2.14.1+-rmblast.patch.gz
  2. Install Dependencies:
    You will need a C++ compiler and essential build tools such as make and autotools.
    • Debian and derivatives (Ubuntu, Mint, etc.): apt install build-essential
    • Fedora: yum groupinstall “Development Tools”
    Other missing dependencies might be detected by the configure step later, depending on your operating system.
  3. Unpack Distribution:
    Unpack the distribution in your home directory or in a temporary location ( i.e. /tmp ).
    • cd /mytmp/location/
    • tar zxvf ncbi-blast-2.14.1+-src.tar.gz
    • gunzip isb-2.14.1+-rmblast.patch.gz
  4. Patch:
    • cd ncbi-blast-2.14.1+-src
    • patch -p1 < ../isb-2.14.1+-rmblast.patch
  5. Build:
    To compile the programs for installation in /usr/local/rmblast run:
    • cd ncbi-blast-2.14.1+-src/c++
    • ./configure –with-mt –without-debug –without-krb5 –without-openssl –with-projects=scripts/projects/rmblastn/project.lst –prefix=/usr/local/rmblast
    • make
      • make -j can be used to parallelize the build on multiprocessor systems, e.g. make -j2 to dedicate two cores to the build process.
    • make install
  6. Configure RepeatMasker/RepeatModeler:
    To use the new search engine with RepeatMasker or RepeatModeler, run/re-run the configure program in the RepeatMasker directory and the configure program in the RepeatModeler directory.

BUSCO结果画图

1、新建一个文件夹,将BUSCO的结果文件拷贝到的这个文件夹中,注意最好不要修改文件名称,如果修改,只改“short_summary.specific.eudicots_odb10.yourname.txt”中的”yourname”部分,且其中不要出现”.”,否则识别不出来,出现“No files matching the pattern short_summary.[generic|specific]* were found in result/” 这种错误。

mkdur -p plot/result
cd plot
cp ../JDB/short_summary.specific.eudicots_odb10.JDB.txt result/
cp ../SX/short_summary.specific.eudicots_odb10.SX.txt result/
cp ../RP_draf.asm_HiC/short_summary.specific.eudicots_odb10.RP_draf.asm_HiC.txt result/short_summary.specific.eudicots_odb10.RP_draf.txt
cp ../RP_draf.asm.hic.hap1/short_summary.specific.eudicots_odb10.RP_draf.asm.hic.hap1.txt result/short_summary.specific.eudicots_odb10.RP_hap1.txt
cp ../RP_draf.asm.hic.hap2/short_summary.specific.eudicots_odb10.RP_draf.asm.hic.hap2.txt result/short_summary.specific.eudicots_odb10.RP_hap2.txt

2、运行generate_plot.py 程序生成图,如果是用conda安装的busco,可以先激活busco,或者用其绝对路径“~/anaconda3/envs/busco/bin/generate_plot.py”

conda activate busco
generate_plot.py -wd result

libc.so.6被误删的恢复

说出来都是泪,国庆都都这个事耽搁了,libc.so.6文件被我不小心删掉了,踩了所有能踩到的坑,终于恢复了。

事情的起因是由于需要做进化树,出来可能树比较大,所以下载了命令行版的MEGA11(mega-cc-11.0.13-1.x86_64),但在安装过程中显示需要glibc2.34, 我用yum最多只能更新到glibc2.28,而是下载了glibc2.34源代码进行编译安装,安装在了/usr/local文件夹中,但系统默认的还是/lib64/中的glibc2.28,于是想着像其它软件一样,先把现在使用的libc.so.6删掉,然后重新建立一个软连接到/usr/local/glicb2.34中的libc.so.6,但当我删除掉/lib64中的libc.so.6后,一切都变了,除了cd命令,其它命令都用不了,除了当前运行的用户,其它用户远程连接也进去不了,想着第二天去机房登录root再改过来不就行了,便第二天去机房发现root用户也登录不了,这时windows思维来了,重启可以解决80%的问题,果断重启了,这也使我失去了最后一次挽救的机会,重启之后,原来的连接也断了,没办法,只能到处找攻略,发现手贱的不只我一个,于是按照攻略开启了曲折的营救模式。

由于服务器安装的是CentOS8,但CentOS8官方已不支持了,官网上下不到系统,我想CentOS7应该也可以,于是就下载了一个CentOS7系统制作启动盘,这就开启了踩坑之旅。

首先出现的是问题是进入救援模式后出现:

No Caching mode page found
Assuming drive cache:write through

2. 修改U盘位置

出现此种情况之后,安装无法进行下去,只能重启,通过搜索发现是由于系统没有识别引导路径,在进入到启动盘界面时,用上下键选择救援模式,然后按”e”进入编辑模式,将hd:后的内容换成U盘所在的盘符位置,如:

vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_64 rescue quiet
###修改为
vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sdc4:/ rescue quiet
###如果不知道U盘的位置,可以退出后进入shell模式,然后使用:
ls /dev/sd*
##或者使用查看
fdisk -l

这一步没有问题后按”ctrl+x”运行,看见有选择界面后选择“ 1 continue”,可以运行了,但一直是出现一排排的等于号,我以为可能是由于服务器中文件比较多,加载时间比较长,但等我第二天过来一看还是如此,第三天也一样,我看到别人的只有两排等于号,第四天终于受不了,给终止了,重新找原因。

多年的经验告诉我,百娘在关键时候是不行的,解决问题的最佳途径是要找官方的说明文档,中文中论坛中的解释很多都是很片面的,而是找到了官方的关于救援模式的说明文件,里面详细说明了救援模式的来龙去脉,而且告诉了具体的操作方法,发现救援模式是用Anaconda做的一个小的linux环境,使用Alt+Tab可以切换到命令模式,可以运行

systemctl --no-wall rescue

重新进入救援模式,发现还是出现原来的情况,但是如果选择2 “Read-only mount”的话可以挂载文件,这下心里就有底了,实在弄不了可以选择这个把数据拷贝出来。

3. 更换系统盘

后来想了一下,会不会是由于我的系统是CentOS8,而我使用的救援模式所采用的系统是CentOS7,导致挂载失败,于是重新找了个CentOS8系统,由于官方不支持CentOS8了,很多镜像也去掉这个版本了,幸好阿里云镜像中还有,使用UltraISO做了个新的启动盘,由于U盘比较旧了,插在服务器上接触不良,老是识别不了,没办法重新找了一个好一点的金士顿的盘才做好,但是每次开机时都是直接进入了系统,没有先启动U盘,一开始时我不是已经设置了U盘先启动的吗,使我进一步怀疑是不是U盘有问题,插到其它的电脑试了都没有问题后,重新打开BIOS设置看下是不是U盘先启动,但发现启动顺序恢复到了默认设置,按F2重新设置启动顺序,终于顺利进入了U盘的救援模式,按照上面的操作按”e”进入编辑模式,将hd:后的内容换成U盘所在的盘符位置,进入到系统救援模式,按”1) Continue”,但又遇到了新的问题,就是找不到可用的 linux 系统,明明刚才用CentOS7启动盘的时候可以找到系统吗。而是又搜索了这个错误信息,终于找到了解决的办法。

4. 激活引导分区

出现的错误信息如下:

you don't have any Linux partitions,
Press return to get a shell.
The system will reboot automatically when you exit from the shell.

参考这篇文章介绍的方法终于解决了。运行”fdisk -l”查看分区情况,看到/dev/sda1 后面加了个“*”号,这个可能就是引导分区了,运行”lvdisplay”查看逻辑卷,找到需要激活的逻辑卷,使用vgchange命令进行激活,但当我使用mount挂载时还是找不到,运行”systemctl –no-wall rescue”重新进入救援模式,按”1) Continue”没有出现找不到linux系统,激活的引导程序所在的系统找到了,不到1分钟swap中的内容就挂载上去,因为不需要修改/root和/home中的内容,所以选择不挂载这两个盘。这一步需要运行的命令如下:

###查看磁盘分区情况
fdisk -l
###查看逻辑卷
lvdisplay
###激活逻辑卷
vgchange -ay /dev/cl   ##cl是上一步需要激活的"VG name"
###重新进入救援模式
systemctl --no-wall rescue

5. 恢复libc.so.6文件

与CentOS7不同的是CentOS8默认挂载的文件夹是”/mnt/sysroot/”,不是”/mnt/sysimage”, “chroot /mnt/sysroot”进入到服务器的系统目录(注意不是启动盘中的系统目录),运行”ls‘可以看到系统目录中的文件,进入libc.so.6文件原来的目录”lib64″,拷贝一个libc.so.6文件到这个文件夹中就可以了。

###进入系统目录
chroot /mnt/sysroot
###拷贝文件
cp lib64/libc-2.28.so /lib/libc.so.6     ##因为原来libc.so.6只是libc-2.28.so的软连接,所以直接复制原文件过来就可以了
###重启系统
reboot 

由于系统软件有更改,重启时需要进行安全校验,可能进入系统会花费较长时间,可以更改启动文件来进行设置不检验,启动后再更过来,但是不建议这么做,因为服务器一般启动了很久才会关,有可能有搞忘了改,反正几天时间都花了,多等几分钟也没关系。

参考资料:

https://docs.centos.org/en-US/centos/install-guide/Rescue_Mode/         ###官方资料
https://www.thegeekdiary.com/how-to-boot-into-rescue-mode-or-emergency-mode-through-systemd-in-centos-rhel-7-and-8/                     ###多种进入救援模式的方法
https://www.tecmint.com/recover-or-rescue-corrupted-grub-boot-loader-in-centos-7/   ###CentOS7的救援模式
https://zhuanlan.zhihu.com/p/398478111   ###国内比较详细的介绍救援模式的方法
https://www.golinuxcloud.com/e2fsck-repair-filesystem-in-rescue-mode-ext4/ ###找不到linux系统搜到的解决方法
https://blog.csdn.net/leenhem/article/details/118111370   ###救援模式挂载lvm出错的解决方法

Error loading shared libraries libcrypto.so.1.1

openssh文件损坏,导致连不上网,也运行不了远程连接。连网时出现“Error loading shared libraries libcrypto.so.1.1”,“error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory”,因为OpenSSL库默认存储在/usr/lib64下,该目录也将包含在搜索路径中。如果OpenSSL是从源代码编译的,那么共享库将安装在/usr/local/lib64下(如果在配置OpenSSL时未使用前缀选项)。这意味着,新安装的库不在搜索路径中,这就是此错误的原因。所以我们需要做的就是,使用下面的命令在搜索路径中包含OpenSSL库。

echo "/usr/local/lib64" > /etc/ld.so.conf.d/openssl.conf
ldconfig

conda环境激活与退出

非根用户在本用户下安装和激活环境并安装conda包:

1、首先初始化shell,我这里选择的是bash。

conda init bash

2、退出当前的shell,重新打开shell,然后激活选择的环境,如admixture。

conda activate admixture

3、退出激活的环境

conda deactivate admixture

4、更新conda

conda update conda
5、增加conda源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
conda config --show-sources

6、登录时不自动激活conda
conda config --set auto_activate_base false

linux挂载移动硬盘

挂载移动硬盘可以使用mount命令,注意需要root权限,先使用fdisk -l查看插入的硬盘名称,移动硬盘一般在最后几行,然后使用mount命令挂载。

fdisk -l
mount /dev/sdc1 /mnt/

卸载硬盘使用unmount命令,如果显示busy,就使用-f参数强行卸载。

umount -f /mnt

如果还是不行的话,可能是其它用户正在挂载的目录里面,或者root用户正在挂载的目录里面,退出挂载的目录,然后使用umount命令就可以了。