标签归档:Linux

C++14 standard requested but CXX14 is not defined

在安装R包的时候遇到报错,C++14 standard requested but CXX14 is not defined

查了很多办法,刚开始是根据https://github.com/stan-dev/rstan/issues/892修改.R下面的Makevars,

但是包另外一个错g++: error: unrecognized command line option ‘-std=c++14’

于是继续查到c++1y这个问题,但依然没有解决问题。

复盘了一下,感觉是gcc的问题,所以升级了最新的gcc

# 系统是CentOS
sudo yum install centos-release-scl
sudo yum install devtoolset-10
scl enable devtoolset-10 bash

但是装包的时候新版的gcc依然不能别识别,所以修改Makevars,最终用了如下的配置,重点是指定了新版的g++和c++的路径,这样问题就解决了

MAKEFLAGS = -j18

## C++ flags
CXX=g++
CXX11=g++
CXX14=/opt/rh/devtoolset-9/root/usr/bin/g++
CXX17=g++

CXXFLAGS=-O3 -march=native -Wno-ignored-attributes
CXX11FLAGS=-O3 -march=native -Wno-ignored-attributes
CXX14FLAGS=-O3 -march=native -Wno-ignored-attributes
CXX17FLAGS=-O3 -march=native -Wno-ignored-attributes

CXXPICFLAGS=-fPIC
CXX11PICFLAGS=-fPIC
CXX14PICFLAGS=-fPIC
CXX17PICFLAGS=-fPIC

CXX11STD=-std=c++11
CXX14STD=-std=c++14
CXX17STD=-std=c++17

## C flags
CC=/opt/rh/devtoolset-10/root/usr/bin/gcc
FLAGS=-O3 -march=native

## Fortran flags
FC=gfortran
F77=gfortran
FFLAGS=-O3 -march=native
FCFLAGS=-O3 -march=native

总结:
1,upgrade gcc

2, specify the absolute gcc and g++ path

如果可以的话,建议把整个系统的gcc都替换成新版的

#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
#####################################################################

Failed to mount 大容量的RAID组

我们的存储服务器有两组RAID,容量均大于150T,我在mount的时候,提示我

NTFS signature is missing.
Failed to mount '/dev/sdc': Invalid argument
The device '/dev/sdc' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

是因为没有分区导致的,分区之后就可以了。分区的命令

# 使用parted命令进行分区,等同parted; select /dev/sdc
parted /dev/sdc 

# 创建分区表
mklabel gpt 

# 使用print命令查看当前分区情况
print 

# 留1M的空余空间,目的是为了让数据块整齐,提高磁盘的运行效率, -1表示分区的结尾  意思是划分整个硬盘空间为主分区
mkpart primary 1 -1 

p  # print的简写

# 使用q命令退出, 
quit 

# 退出之后会提示
会提示Information: You may need to update /etc/fstab.


# 格式化分区,为分区写入文件系统,格式为ext4
mkfs –t ext4 /dev/sdc1 # 格式化分区

# 使用blkid命令,找到 UUID,然后编辑 /etc/fstab,实现自动挂载
vim /etc/fstab

UUID=******	directory	ext4	defaults	0	0

参考:

https://www.cnblogs.com/kreo/p/9462641.html

https://www.cnblogs.com/saszhuqing/p/9964262.html

确定物理网口对应的名称以及配置静态IP

确定物理网口对应的名称

在一台ubuntu的机器上,有四个物理网口,我想知道每个网口对应的MAC地址。使用ip a可以看到网口的MAC地址和名称,比如列出了ens1f0, ens1f1, ens4f0, ens4f1。
原来的网卡interface都是eth开头,后来改成了enp, ens等。

Names incorporating Firmware/BIOS provided index numbers for on-board devices (example: eno1)
Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: ens1)
Names incorporating physical/geographical location of the connector of the hardware (example: enp2s0)
Names incorporating the interfaces’s MAC address (example: enx78e7d1ea46da)
Classic, unpredictable kernel-native ethX naming (example: eth0)

那么如何确定机器上的ens1f0对应的哪个物理网口呢,可以用ethtool来实现,ethtool是用于查询及设置网卡参数的命令。用ethtool -p enos1f1,看哪个网口在闪灯,就能确定这个物理网口对应的名称。记得不要插网线。

ethtool -p|--identify DEVNAME   Show visible port identification (e.g. blinking)

如果没有一个网口亮灯,很可能是因为网口不支持,则可以尝试ethtool -t enosf1f1,大概在4秒之后,网口的灯会亮,这个时候就可以确定enos1f1对应的具体的物理网口了。

ethtool -t|--test DEVNAME       Execute adapter self test

很简单的一个命令,知道了就很简单,不知道就很难想到。

配置静态IP

/etc/netplan/00-installer-config.yaml

network:
  ethernets:
    enp0s3:  # 网卡名
      addresses: [192.168.1.3/24] # ip地址和子网掩码,24对应255.255.255.0
      gateway4: 192.168.1.1 # 网关
      nameservers:
        addresses: [4.2.2.2, 8.8.8.8] # DNS
  version: 2

配置好了之后,生效
sudo netplan apply

小试shell中的神器zsh

很早就知道神器zsh的存在,一直没有用,今天手痒装了一下,哈哈,用起来还不错。

zsh是bash的增强版,可以兼容bash,可谓是shell中的战斗机,非常方便的命令提示、补全、忽略大小写等功能,一个字爽,可参见

https://www.zhihu.com/question/21418449

不过通常zsh配置起来比较复杂麻烦,于是诞生了oh-my-zsh,专门为简化zsh的配置而开发,http://ohmyz.sh,极大的简化了zsh的配置,还是一个字,爽。

安装zsh

首先查看系统是否安装了zsh,发现系统没有安装zsh
cat /etc/shells 或者chsh -l

/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/dash
/bin/ksh

如果没有zsh,直接安装oh my zsh会报错Zsh is not installed! Please install zsh first!,所以第一步应该是先安装zsh
如果你有sudo权限或者root权限,可以执行

 apt-get install zsh

如果没有的话(如果有的话,忽略这一步),比如只能安装在自己的HOME目录下,可以通过下载源码自己编译的方式,实现安装zsh

wget -c https://jaist.dl.sourceforge.net/project/zsh/zsh/5.5.1/zsh-5.5.1.tar.gz
tar -xvzf zsh-5.5.1.tar.gz
cd zsh-5.5.1
./configure --prefix=/PATH
make
make install

在.bashrc文件中设置启动
exec /share/apps/zsh/bin/zsh -l
此时还要确保zsh在环境变量中,如果没有,请设置。

安装oh my zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"


既然用了zsh,我也尝试了一下新的虚拟终端MobaXterm。
https://mobaxterm.mobatek.net
安利的文章可以看这个,https://www.isharebest.com/mobaxterm.htm
这个虚拟终端的功能非常丰富,但用起来有时候莫名其妙的卡。或许zsh和Xshell更搭。

尝试了下命令提示的功能,如图,还是很方便的,后续以后会经常用zsh了。

oh my zsh的主题列表https://github.com/robbyrussell/oh-my-zsh/wiki/themes
#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
#####################################################################

解决 mount: unknown filesystem type ‘ntfs’

移动硬盘是ntfs格式的,服务器不能mount,报错 mount: unknown filesystem type ‘ntfs’

解决方法:安装 NTFS-3G,官网 https://www.tuxera.com/community/open-source-ntfs-3g

安装

wget -c https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz
tar -xvzf ntfs-3g_ntfsprogs-2017.3.23.tgz 
cd ntfs-3g_ntfsprogs-2017.3.23
./configure 
make 
sudo make install

挂载

mount –t ntfs-3g /dev/sd**  /target

#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
#####################################################################