CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

Linux服务器安装与配置管理-源码交易平台丞旭猿

近期准备重新装机来着,实验室新人渐多,先对以前的手稿进行一个粗略的整理,方便动手时快些。

进行配置文件修改的操作请注意先备份原配置文件

说明:命令行前的符号表示需以管理员(root)角色运行命令,$表示无需管理员权限即可执行命令。

CentOS7安装

step1. 启动盘制作(尽量使用Rufus启动盘制作工具)

磁盘分区格式MBR限制了单块磁盘大小为2TB,这种分区格式在Centos下无法挂载超过2T大小的磁盘,如果想挂载超过2TB的磁盘,就要换成其他格式如GPT格式。 如下所示,在使用Rufus工具制作启动盘的过程中,在选项分区方案和目标系统类型中选择用于UEFI计算机的GPT分区方案,文件系统选择FAT32是为了兼容不同操作系统。

Figure 1. 启动盘制作

step2. 安装(我这里是华硕主板)

安装系统过程中,按F2/Del进入启动菜单选择,按F8或者用鼠标选择右下角的启动菜单,在弹出的启动菜单里选中U盘”UEFI:KingstonDataTraveler”点击进入安装流程。或者直接修改启动顺序面板里U盘的位置,拖动到第一个位置,然后点击下方保存并退出(F10)便可通过U盘启动。

Figure 2. 华硕主板的BIOS界面,启动顺序如图中鼠标指针所示(我这里U盘启动器用的是金士顿的U盘)

安装过程中,按界面指引逐项进行操作。安装完成后确认重启即可,注意,重启后先立刻按F2进入启动项选择,将系统安装位置(盘)拖动到启动顺序的第一个位置,然后保存退出,便可进入安装后的系统界面。

Centos 磁盘挂载:

Linux有硬件即文件的哲学,依此我们可以采取不分区直接挂载整个磁盘的方式来扩容目录

对新磁盘进行分区,由于fdisk仅支持2T以内磁盘分区,但该磁盘大于2T,所以使用parted进行GPT格式分区:

挂载过程描述如下: 执行命令$ lsblk查看挂载信息,

[root@localhost ~]lsblkNAME                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                     8:003.7T0disk 
└─sda1                  8:102T0part 
sdb                     8:160238.5G0disk 
├─sdb1                  8:170200M0part /boot/efi
├─sdb2                  8:1801G0part /boot
└─sdb3                  8:190237.3G0part 
  ├─cl_localhost-root 253:0050G0lvm  /
  ├─cl_localhost-swap 253:104G0lvm[SWAP]└─cl_localhost-home 253:50183.3G0lvm  /home
sdc                     8:3203.7T0disk 
sdd                     8:48128.9G0disk 
└─sdd1                  8:49128.9G0part /run/media/tsmc/CENTOS7X8
nvme0n1               259:00238.5G0disk 
├─nvme0n1p1           259:10200M0part 
├─nvme0n1p2           259:201G0part 
└─nvme0n1p3           259:30237.3G0part 
  ├─cl00-swap         253:204G0lvm  
  ├─cl00-home         253:30183.3G0lvm  
  └─cl00-root         253:4050G0lvm
  1. 查看硬盘
fdisk -l

发现硬盘为/dev/sdb 大小4T

2.如果此硬盘以前有过分区,则先对磁盘格式化:

mkfs -t ext4 /dev/sda

此命令会对整个磁盘格式化

  1. 对新磁盘进行分区,由于fdisk仅支持2T以内磁盘分区,但该磁盘大于2T,所以使用parted进行GPT格式分区:
[root@localhost /]parted /dev/sdaGNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Typehelpto view a list of commands.(parted)help查看帮助信息align-check TYPE N                        check partition NforTYPE(min|opt)alignmenthelp[COMMAND]print general help, orhelpon COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel(partition table)mkpart PART-TYPE[FS-TYPE]START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print[devices|free|list,all|NUMBER]display the partition table, available devices, free space, all found
        partitions, or a particular partition
  quitexitprogram
  rescue START END                         rescue a lost partition near START and END
  
  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBERselectDEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle[FLAG]toggle the state of FLAG on selected devicesetNUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle[NUMBER[FLAG]]toggle the state of FLAG on partition NUMBER
  unit UNITsetthe default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted(parted)mklabel gpt执行命令mklabel gpt,把sdb改成gpt大分区格式Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you
want tocontinue?
Yes/No? yes(parted)mkpart primary04000.8GB创建分区Warning: The resulting partition is not properly alignedforbest performance.
Ignore/Cancel? cancel注意,此处提示为磁盘为对齐,会影响性能,所以在此处要进行对齐(parted)quit
Information: You may need to update /etc/fstab.
  1. 查看磁盘参数
[root@localhost /]cat /sys/block/sda/queue/optimal_io_size0[root@localhost /]cat /sys/block/sda/queue/minimum_io_size512[root@localhost /]cat /sys/block/sda/alignment_offset0[root@localhost /]cat /sys/block/sda/queue/physical_block_size512

如果optimal_io_size不为0,暂定是1048576,则可以用optimal_io_size的值加上alignment_offset的值,

然后除以physical_block_size的值,就是起始扇区的位置了,如上面的例子中,可以用这个公式算出来起始扇区的设定值:

(1048576 + 0) / 512 = 2048

如果optimal_io_size为0,那么我们最好直接使用起始扇区的默认值2048。

  1. 最后在分区的时候使用以下的命令进行分区就可以了,不会报warning:
[root@localhost /]parted /dev/sdaGNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Typehelpto view a list of commands.(parted)mkpart primary 2048s 100%(parted)print                                                            
Model: ATA ST4000NM0035-1V4(scsi)Disk /dev/sda: 4001GB
Sector size(logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
​
Number  Start   End     Size    File system  Name     Flags11049kB  4001GB  4001GB               primary
​(parted)align-check optimal1此命令会检查对齐与否1aligned(parted)quit                                                             
Information: You may need to update /etc/fstab.

6.查看磁盘情况:

[root@localhost /]fdisk -l......
Disk /dev/sda: 4000.8 GB,4000787030016bytes,7814037168sectorsUnits=sectors of1*512=512bytes
Sector size(logical/physical):512bytes /512bytes
I/O size(minimum/optimal):512bytes /512bytes
Disk label type: gpt
Disk identifier: 9847A4AC-B5A7-405E-8A30-0B517ED64625
​
​Start          End    Size  Type            Name1204878140354553.7T  Microsoft basic primary
 ....

7.再次格式化磁盘:

[root@localhost /]mkfs.ext4 -F /dev/sdamke2fs 1.42.9(28-Dec-2013)Filesystemlabel=OS type: Linux
Blocksize=4096(log=2)Fragmentsize=4096(log=2)Stride=0blocks, Stripewidth=0blocks244195328inodes,976754646blocks48837732blocks(5.00%)reservedforthe super user
First datablock=0Maximum filesystemblocks=312475648029809block groups32768blocks per group,32768fragments per group8192inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848, 512000000, 550731776,644972544​
Allocating group tables:doneWriting inode tables:doneCreating journal(32768blocks):doneWriting superblocks and filesystem accounting information:done

8.挂载新磁盘到/mnt/sda

[root@localhost /] cd /mnt
[root@localhost mnt] mkdir sda
[root@localhost mnt] mount /dev/sda /mnt/sda
[root@localhost mnt] umount /dev/sda

9.设置自动挂载/mnt/sda

vim /etc/fstab

在最后一行加/dev/sda /mnt/sda ext4 defaults 1 2:, 对于另一块硬盘也按上面的步骤操作,然后将其挂载另一个挂载点上,如下:

[root@localhost mnt] vim /etc/fstab 
​

 /etc/fstab
 Created by anaconda on Sat Nov 16 14:12:24 2019

 Accessible filesystems, by reference, are maintained under /dev/disk
 See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

/dev/mapper/cl_localhost-root /                       xfs     defaults        0 0
UUID=3619ba5d-5d44-4f7c-8b07-90372b1214b1 /boot                   xfs     defaults        0 0
UUID=3488-BCA0          /boot/efi               vfat    umask=0077,shortname=winnt 0 0
/dev/mapper/cl_localhost-home /home                   xfs     defaults        0 0
/dev/mapper/cl_localhost-swap swap                    swap    defaults        0 0
/dev/sda /mnt/sda                   ext4     defaults        1 2
/dev/sdc /home/tsmc                   ext4     defaults        1 2

保存退出

  1. 查看是否挂载/home/tsmc
[root@localhost mnt]df -hFilesystem                     Size  Used Avail Use% Mounted on
devtmpfs                        63G063G   0% /dev
tmpfs                           63G063G   0% /dev/shm
tmpfs                           63G   11M   63G   1% /run
tmpfs                           63G063G   0% /sys/fs/cgroup
/dev/mapper/cl_localhost-root   50G   16G   35G  32% /
/dev/sdb2                     1014M  223M  792M  22% /boot
/dev/sdb1                      200M   12M  189M   6% /boot/efi
/dev/mapper/cl_localhost-home  184G   33M  184G   1% /home

未挂载上!

  1. 使用mount -a命令挂载fstab中未挂载的磁盘
[root@localhost mnt]mount -a[root@localhost mnt]df -hFilesystem                     Size  Used Avail Use% Mounted on
devtmpfs                        63G063G   0% /dev
tmpfs                           63G063G   0% /dev/shm
tmpfs                           63G   11M   63G   1% /run
tmpfs                           63G063G   0% /sys/fs/cgroup
/dev/mapper/cl_localhost-root   50G   22G   29G  44% /
/dev/sdb2                     1014M  224M  791M  23% /boot
/dev/sdb1                      200M   12M  189M   6% /boot/efi
/dev/mapper/cl_localhost-home  184G   33M  184G   1% /home
/dev/sda                       3.6T  7.3G  3.4T   1% /mnt/sda
/dev/sdc                       3.6T  190M  3.4T   1% /home/tsmc

挂载成功。

CentOS第三方源服务

CentOS追求稳定性,所以官方源中自带的软件不多,因而需要一些第三方源,比如EPEL、ATrpms、ELRepo、Nux Dextop、RepoForge等。

1. 系统镜像源:

EPEL

EPEL即Extra Packages for Enterprise Linux,为CentOS提供了额外的10000多个软件包,而且在不替换系统组件方面下了很多功夫,因而可以放心使用。

sudo yum install epel-release

Nux Dextop

Nux Dextop中包含了一些与多媒体相关的软件包,作者尽量保证不覆盖base源。官方说明中说该源与EPEL兼容,实际上个别软件包存在冲突,但基本不会造成影响:

sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

ELRepo

ELRepo包含了一些硬件相关的驱动程序,比如显卡、声卡驱动:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

2. 其它包管理工具镜像源

  • pip镜像源的临时使用方式

加参数-i指定临时国内镜像源即可,例如安装tf1.8:

sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==1.8

以升级tensorflow 1.6版本到1.8(要求cuda9.0支持)为例:

sudo pip install --upgrade tensorflow-gpu==1.8 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
  • pip镜像源永久修改,一劳永逸:

修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url至https://pypi.tuna.tsinghua.edu.cn/simple,内容如下:

[global]index-url=https://pypi.tuna.tsinghua.edu.cn/simple[install]trusted-host=pypi.tuna.tsinghua.edu.cn/simple

驱动安装

1. nouveau驱动去除

执行以下bash脚本文件来关闭Nouveau(建立一个名为 _NvidiaDriver.sh 的文件,将以下脚本内容保存并执行):\

! /bin/bashcentos remove nouveau moduleby chendeqingecho"blacklist nouveau">>  /etc/modprobe.d/blacklist.conf 
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -v /boot/initramfs-$(uname -r).img$(uname -r)wait;echo"nouveau module removal success....."rm -rf /opt/sumihui

查看是否成功去除nouveau驱动 ,若没有任何输出则说明已经成功去除

[root@localhost ~]lsmod | grep nouveau

接下来就可以执行驱动安装了.

2. 安装NVIDIA 驱动(若失败请看下一节)

cuda下载:https://developer.nvidia.com/cuda-90-download-archive(内含相应的NVIDIA驱动)

cudnn下载:https://developer.nvidia.com/rdp/cudnn-archive

[root@localhost Downloads]lltotal2024364-rwxrwxrwx.1sumihui users1643293725Nov1711:14 cuda_9.0.176_384.81_linux.run
-rw-r--r--.1sumihui users348817823Nov1711:16 cudnn-9.0-linux-x64-v7.tgz
-rwxrwxrwx.1root    root80833580Nov1619:40 NVIDIA-Linux-x86_64-384.90.run[root@localhost Downloads]bash cuda_9.0.176_384.81_linux.run -extract=~/NVIDIALogging to /tmp/cuda_install_20730.log
Extracting individual Driver, Toolkit and Samples installers to /root/NVIDIA ...[root@localhost Downloads]cd ~/NVIDIA/[root@localhost NVIDIA]lltotal1609832-rwxr-xr-x.1root root1464606961Nov1711:20 cuda-linux.9.0.176-22781540.run
-rwxr-xr-x.1root root102054400Nov1711:20 cuda-samples.9.0.176-22781540-linux.run
-rwxr-xr-x.1root root81798900Nov1711:20 NVIDIA-Linux-x86_64-384.81.run

安装NVIDIA驱动之前,先输入如下命令关闭图形界面:

[root@localhost NVIDIA]init 3

然后在执行NVIDIA驱动脚本:

Figure 3. 执行NVIDIA驱动脚本

接受协议

DKMS选择No

中间可能会要求生成新的公钥,类似下面:

An X.509 certificate containing the public signing key will be installed to /usr/share/nvidia/nvidia-modsign-crt-1C479B6B.der.

我们需要64-bit,因此这里选No

自动配置 x configuration

下一步便是完成安装:

输入reboot重启,按F2进入华硕主板,禁用UEFI安全启动(disable secure Boot for ASUS motherboard), 禁用原因在图后:

( After you cleared the Secure Boot Keys, Secure Boot will be automatically disabled. You can set the OS Type to Other OS now. ) 参考https://www.cnblogs.com/zhaofenqiang/p/6071385.html

如果Secure Boot state显示为不可用状态,先选择”OS Type”为other OS,然后再进入下方的Key Management选项,选择 “Clear Secure Boot keys” ,保存退出,再次重启进入主板设置后,便可看见安全启动被禁用了,这是改回OS Type为Windows UEFI mode保存退出即可。

重启进入系统过后,使用nvidia-smi命令即可查看显卡信息。

2.1 NVIDIA驱动安装失败方案

如果出现安装失败,可能是存在多个内核版本,且正在使用的内核版本过高,先查看内核版本并卸载多余的高版本并卸载高版本内核附加文件 :

[root@localhost NVIDIA]uname -r3.10.0-1062.4.3.el7.x86_64[root@localhost NVIDIA]uname -aLinux localhost.tsmclab 3.10.0-1062.4.3.el7.x86_641 SMP Wed Nov 13 23:58:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux[root@localhost NVIDIA]rpm -qa |grep kernelkernel-devel-3.10.0-1062.4.3.el7.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-headers-3.10.0-1062.4.3.el7.x86_64
kernel-devel-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-1062.4.3.el7.x86_64
kernel-3.10.0-1062.4.3.el7.x86_64
kernel-tools-3.10.0-1062.4.3.el7.x86_64
abrt-addon-kerneloops-2.1.11-55.el7.centos.x86_64[root@localhost NVIDIA]rpm -e kernel-3.10.0-1062.4.3.el7.x86_64warning: file /lib/modules/3.10.0-1062.4.3.el7.x86_64/updates: remove failed: No such file or directory[root@localhost NVIDIA]rpm -qa |grep kernelkernel-devel-3.10.0-1062.4.3.el7.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-headers-3.10.0-1062.4.3.el7.x86_64
kernel-devel-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-1062.4.3.el7.x86_64
kernel-tools-3.10.0-1062.4.3.el7.x86_64
abrt-addon-kerneloops-2.1.11-55.el7.centos.x86_64[root@localhost NVIDIA]rpm -e kernel-devel-3.10.0-1062.4.3.el7.x86_64[root@localhost NVIDIA]rpm -e kernel-tools-3.10.0-1062.4.3.el7.x86_64

重启后再按前述安装方式安装驱动即可。

3. 安装cuda

浏览用户协议:

按空格间翻页到最后,接受协议:

使用默认安装路径

特别留意一下内容,将在后续环境变量中用到这些路径:

========================================​
Please make sure that
 -   PATH includes /usr/local/cuda-9.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-9.0/lib64, or, add /usr/local/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as root
​
Pleasereadthe release notes in /usr/local/cuda-9.0/doc/
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.0/bin
Installation Complete

将CUDA路径添加至环境变量 在终端输入:vim /etc/profile在profile文件中添加:

exportCUDA_HOME=/usr/local/cuda-9.0exportPATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}exportLD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

之后source /etc/profile即可

[root@localhost NVIDIA]source /etc/profile1cdNVIDIA/2ll3bash cuda-linux.9.0.176-22781540.run4vim /etc/profile5source/etc/profile6nvcc -V7vim /etc/profile8source/etc/profile

在终端输入:nvcc -V会得到相应的nvcc编译器相应的信息,那么CUDA配置成功了。

[root@localhost NVIDIA]nvcc -Vnvcc: NVIDIA(R)Cuda compiler driver
Copyright(c)2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

4. cuda样例测试【验证驱动安装】:

再在NVIDIA目录执行命令输出样例程序:

[root@localhost NVIDIA]bash cuda-samples.9.0.176-22781540-linux.run

在目录 /usr/local/cuda-9.0/samples下 输入命令 $ make 编译samples. 下面的-j16表示以16线程编译

[root@localhost NVIDIA]cd /usr/local/cuda-9.0/samples[root@localhost NVIDIA]make -j16

如果要进行cuda性能测试,可以进samples/bin/…/…/…的底层目录,运行各类实例。

以进入到目录 /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery为例 执行命令 $ ./deviceQuery:

[root@localhost ~]cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery[root@localhost deviceQuery]./deviceQuery./deviceQuery Starting...
......
     < Default(multiple host threads can use ::cudaSetDevice()with device simultaneously)>
> Peer access from GeForce GTX TITAN X(GPU0)-> GeForce GTX TITAN X(GPU1): Yes
> Peer access from GeForce GTX TITAN X(GPU0)-> GeForce GTX TITAN X(GPU2): Yes
> Peer access from GeForce GTX TITAN X(GPU1)-> GeForce GTX TITAN X(GPU0): Yes
> Peer access from GeForce GTX TITAN X(GPU1)-> GeForce GTX TITAN X(GPU2): Yes
> Peer access from GeForce GTX TITAN X(GPU2)-> GeForce GTX TITAN X(GPU0): Yes
> Peer access from GeForce GTX TITAN X(GPU2)-> GeForce GTX TITAN X(GPU1): Yes
​
deviceQuery, CUDADriver=CUDART, CUDA DriverVersion=10.2, CUDA RuntimeVersion=9.0,NumDevs=3Result=PASS

5. 安装cudnn

创建解压目录,cd到加压后的·cuda·目录下,执行复制命令:

[root@localhost Downloads]lltotal2024364-rwxrwxrwx.1sumihui users1643293725Nov1711:14 cuda_9.0.176_384.81_linux.run
-rw-r--r--.1sumihui users348817823Nov1711:16 cudnn-9.0-linux-x64-v7.tgz
-rwxrwxrwx.1root    root80833580Nov1619:40 NVIDIA-Linux-x86_64-384.90.run[root@localhost Downloads]chmod 777 cudnn-9.0-linux-x64-v7.tgz[root@localhost Downloads]lltotal2024364-rwxrwxrwx.1sumihui users1643293725Nov1711:14 cuda_9.0.176_384.81_linux.run
-rwxrwxrwx.1sumihui users348817823Nov1711:16 cudnn-9.0-linux-x64-v7.tgz
-rwxrwxrwx.1root    root80833580Nov1619:40 NVIDIA-Linux-x86_64-384.90.run[root@localhost Downloads]mkdir cudnn_release[root@localhost Downloads]mv cudnn-9.0-linux-x64-v7.tgz cudnn_release/[root@localhost Downloads]cd cudnn_release/[root@localhost cudnn_release]lltotal340644-rwxrwxrwx.1sumihui users348817823Nov1711:16 cudnn-9.0-linux-x64-v7.tgz[root@localhost cudnn_release]tar -zxf cudnn-9.0-linux-x64-v7.tgz[root@localhost cudnn_release]tree -L 3 -C.
├── cuda
│   ├── include
│   │   └── cudnn.h
│   ├── lib64
│   │   ├── libcudnn.so -> libcudnn.so.7
│   │   ├── libcudnn.so.7 -> libcudnn.so.7.0.5
│   │   ├── libcudnn.so.7.0.5
│   │   └── libcudnn_static.a
│   └── NVIDIA_SLA_cuDNN_Support.txt
└── cudnn-9.0-linux-x64-v7.tgz
​3directories,7files[root@localhost cudnn_release]lltotal340644drwxr-xr-x.4root    root70Nov1711:54 cuda
-rwxrwxrwx.1sumihui users348817823Nov1711:16 cudnn-9.0-linux-x64-v7.tgz[root@localhost cudnn_release]cd cuda/[root@localhost cuda]lltotal40drwxr-xr-x.2root root21Nov1711:54 include
drwxr-xr-x.2root root96Nov1711:54 lib64
-r--r--r--.11000100038963Nov82017NVIDIA_SLA_cuDNN_Support.txt[root@localhost cuda]cp include/* /usr/local/cuda-9.0/include/[root@localhost cuda]cp lib64/lib* /usr/local/cuda-9.0/lib64/

Linux用户管理

用户管理的目的:保持用户自身数据与自身程序操作一致性

1. 新增用户并分配用户组及权限

添加新用户到指定的各自主目录下的命令实例如下(示例用户名sumihui),命令参数说明随后介绍。 使用passwd为新建用户设置初始密码,然后设置用户目录所有者及目录权限:

[root@tsmclab ~]useradd -u 556 -d /home/sumihui -g users -m sumihui[root@tsmclab ~]passwd sumihuiChanging passwordforuser sumihui.
New password: 
BAD PASSWORD: The password is shorter than8characters
Retype new password: 
passwd: all authentication tokens updated successfully.[root@tsmclab ~]chown -R :users /home/sumihui[root@tsmclab ~]chmod 760 /home/sumihui[root@tsmclab ~]lltotal24drwx------.2root    root16384Sep1516:32 lost+found
drwxrw----.5sumihui users4096Sep1615:55 sumihui
上述命令使用的解释与演示说明如下:useradd的命令参数说明如下:-u指定用户ID号,该值在系统中必须是唯一的。0~499默认保留给系统用户账户使用,所以该值必须大于499.-d指定用户登入时的主目录,可替换系统默认值 /home/$USERNAME-m自动建立用户的登入主目录-g指定用户所属的群组。值可以是组名也可是GID。用户组必须已经存在,其默认值为100,即users。使用useradd命令所建立的账号,都保存在 /etc/passwd 文本文件中。$ cat /etc/passwd 可以查看所有用户列表$ w 可以查看当前活跃的用户列表$ cat /etc/group 查看用户组chmod 改变文件或目录权限,例如:赋予sumihui目录权限rwxrw—[root@tsmclab ~] chmod 760 /home/sumihuichown设定目录所有者,例如:设定users用户组的所有用户为/home/sumihui目录所有者。[root@tsmclab ~] chown -R :users /home/sumihui设定users用户组的sumihui这一个用户为/home/sumihui目录所有者。[root@tsmclab ~] chown -R sumihui:users /home/sumihui上述两个chown命令的区别在于,当设置/home/sumihui目录权限为760时,对于chown -R :users /data/sumihui(其实默认所有者就是users),其它users用户组用户可访问该目录,否则不可以.

2. 删除用户

万一添加用户出现错误或需要删除不再使用的用户及其数据,可使用userdel命令删除用户或数据,例如:

userdel -r sumihui删除用户并连带用户自家主目录一起删除

userdel sumihui只删除用户

[root@tsmclab ~]userdel -r sumihuiuserdel: /home not owned by sumihui, not removing

3. XRDP远程桌面

CentOS7安装xrdp步骤

1.默认库不包含xrdp,需要安装epel库。

[root@tsmclab ~]yum install epel-release

然后安装xrdp

[root@tsmclab ~]yum install xrdp

2.安装tigervnc-server

[root@tsmclab ~]yum install tigervnc-server

如果Linux服务器需要远程桌面客户端,可同时安装tigervnc

[root@tsmclab ~]yum install tigervnc

3.为当前用户设置vnc密码,如果是其他用户,先su到这个用户,然后再vncpasswd。

[root@tsmclab ~]vncpasswd

这个命令实际上只要是CentOS上已有的账户,通过putty等SSH远程工具登录这个账户后直接运行即可修改当前登录用户的远程桌面密码(vnc密码)

4.配置xrdp.ini文件

[root@tsmclab ~]vim /etc/xrdp/xrdp.ini
max_bpp=32,改为max_bpp=24

5.配置selinux

[root@tsmclab ~]chcon -t bin_t /usr/sbin/xrdp[root@tsmclab ~]chcon -t bin_t /usr/sbin/xrdp-sesman

6.启动xrdp服务,并设置为开机启动

[root@tsmclab ~]systemctl start xrdp[root@tsmclab ~]systemctl enable xrdp

7.打开防火墙3389端口

[root@tsmclab ~]firewall-cmd  --permanent --zone=public --add-port=3389/tcp[root@tsmclab ~]firewall-cmd --reload

8.查看xrdp服务是否正常启动

[root@tsmclab ~]systemctl status xrdp.service[root@tsmclab ~]ss -antup|grep xrdp

也可通过如下命令确定xrdp监听端口3389的状态:

[root@tsmclab ~]netstat -antup | grep xrdp

成功后可以使用windows的远程桌面连接linux.

Docker的使用

1. 安装docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过uname -r命令查看你当前的内核版本

$ uname -r

2、使用root权限登录 Centos。确保 yum 包更新到最新。

$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates|sort -r

7、安装docker

$ sudo yum install docker-ce由于repo中默认只开启stable仓库,故这个命令安装的将是最新稳定版$ sudo yum install 例如:sudo yum install docker-ce-17.09.1.ce

为了兼顾后面有适配的nvidia-docker版本,我们这里选择安装17.09.1版本:

[root@localhost ~]yum install docker-ce-17.09.1.ceLoaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * elrepo: mirrors.neusoft.edu.cn
 * epel: mirrors.tuna.tsinghua.edu.cn
 * nux-dextop: li.nux.ro
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 0:17.09.1.ce-1.el7.centos will be installed
--> Processing Dependency: container-selinux >=2.9forpackage: docker-ce-17.09.1.ce-1.el7.centos.x86_64
......
......(省略)
​
Total download size:21M
Installed size:21M
Is this ok[y/d/N]: y

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctlenabledocker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

2. 使用软链接修改docker默认镜像存储位置

默认情况下Docker的存放位置为:/var/lib/docker可以通过下面命令查看具体位置:

sudo docker info|grep"Docker Root Dir"

解决这个问题,最直接的方法当然是挂载分区到这个目录,但是我的数据盘还有其他东西,这肯定不好管理,所以采用修改镜像和容器的存放路径的方式达到目的。

这个方法里将通过软连接来实现。

首先停掉Docker服务:

systemctl stop docker

或者

service docker stop

然后移动整个/var/lib/docker目录到目的路径:

[root@localhost sda]pwd/mnt/sda/[root@localhost sda]mkdir docker[root@localhost lib]mv /var/lib/docker /mnt/sda/docker[root@localhost lib]ln -s /mnt/sda/docker /var/lib/docker

3. 删除docker的命令

yum remove docker-ce

4. nvidia-docker 安装:

https://blog.exxactcorp.com/installing-using-docker-nv-docker-centos-7/

先查找可安装的nvidia-docker版本:

[root@localhost ~]yum search --showduplicates nvidia-dockerLoaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * elrepo: ftp.ne.jp
 * epel: mirrors.njupt.edu.cn
 * nux-dextop: li.nux.ro==========N/S matched: nvidia-docker==========nvidia-docker2-2.0.0-1.docker1.12.6.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.0-1.docker17.03.2.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.0-1.docker17.06.1.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.0-1.docker17.06.2.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.0-1.docker17.09.0.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.1-1.docker1.12.6.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.1-1.docker1.13.1.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.1-1.docker17.03.2.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.1-1.docker17.06.2.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.1-1.docker17.09.0.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.1-1.docker17.09.1.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.2-1.docker17.09.1.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.2-1.docker17.12.0.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker1.12.6.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker1.13.1.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker17.03.2.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker17.06.2.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker17.09.0.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker17.09.1.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker17.12.0.ce.noarch : nvidia-docker CLI wrapper
nvidia-docker2-2.0.3-1.docker17.12.1.ce.noarch : nvidia-docker CLI wrapper
......
​
  Name and summary matches only, use"search all"foreverything.

由于我们安装的docker是17.09.1版本的。因此我选择安装nvidia-docker2-2.0.3-1.docker17.09.1.ce.noarch。

[root@localhost ~]yum install nvidia-docker2-2.0.3-1.docker17.09.1.ce.noarchLoaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * elrepo: mirrors.neusoft.edu.cn
 * epel: mirrors.tuna.tsinghua.edu.cn
 * nux-dextop: mirror.li.nux.ro
Resolving Dependencies
--> Running transaction check
---> Package nvidia-docker2.noarch 0:2.0.3-1.docker17.09.1.ce will be installed
--> Processing Dependency: nvidia-container-runtime=2.0.0-1.docker17.09.1forpackage: nvidia-docker2-2.0.3-1.docker17.09.1.ce.noarch
--> Running transaction check
---> Package nvidia-container-runtime.x86_64 0:2.0.0-1.docker17.09.1 will be installed
--> Processing Dependency: nvidia-container-runtime-hook < 2.0.0forpackage: nvidia-container-runtime-2.0.0-1.docker17.09.1.x86_64
--> Running transaction check
---> Package nvidia-container-toolkit.x86_64 0:1.0.5-2 will be installed
--> Finished Dependency Resolution

5. 无须每次加带sudo执行docker命令的设置(为了消除非管理员用户执行docker命令的sudo请求)

在root权限下,将当前用户名加入到·docker·组即可,

[root@tsmclab ~]gpasswd -a $USER docker

执行该操作后,用户在下次重新登录时方可生效。如果是刚刚安装的docker,要是还没有docker组那就先添加一个docker组:

[root@tsmclab ~]groupadd docker

6.镜像拉取

tensorflow相应的镜像从https://hub.docker.com/r/tensorflow/tensorflow/tags选择拉取,例如拉取tf1.8 gpu版本,python3解释器,

[root@localhost ~]docker pull tensorflow/tensorflow:1.8.0-gpu-py3

pytorch相应的镜像从https://hub.docker.com/r/pytorch/pytorch/tags中选择拉取。

7. 容器的创建与运行

通过如下命令将以交互模式从test/ubuntu:v1.0镜像中创建并启动一个新容器,在容器内执行/bin/bash命令,并将容器命名为tsmc, 指定容器的hostnametsmclab:

$  docker run --name tsmc -h tsmclab -it test/ubuntu:v1.0 /bin/bash

如果需要映射主机目录到容器目录,可以如下执行(例如主机的目录/home/sumihui/dataset映射到容器的/media):

$  docker run -v /data:/data --name tsmc -h tsmclab -it test/ubuntu:v1.0 /bin/bash
注意:/bin/bash 后面不再接任何命令,即/bin/bash已经结尾了,否则接的内容会被当成bash脚本执行

对于使用了NVIDIA cuda镜像的容器,必须使用nvidia-docker命令建立容器(否则会报找不到libcuda.so.1,从而无法使用GPU算力):

抱歉安装nvidia-docker后一直报告:

[root@localhost ~]nvidia-docker -h/usr/bin/nvidia-docker: line 34: /usr/bin/docker: Permission denied
/usr/bin/nvidia-docker: line 34: /usr/bin/docker: Success

所以下面这种命令方式目前不可用,

$ nvidia-docker run -v /home/tsmc/sumihui/dataset:/media --name tsmc_docker -h tsmclab -it tensorflow/tensorflow:1.8.0-gpu /bin/bash

请改用如下命令,使用runtime命令行参数以指定使用GPU:

$ docker run --runtime=nvidia -v /home/tsmc/sumihui/dataset:/media --name tsmc_docker -h tsmclab -it tensorflow/tensorflow:1.8.0-gpu /bin/bash

【容器自动创建脚本】为了防止新手在不熟悉命令的情况下产生误操作,用户可在自己的主目录下创建一个bash脚本,命名为build_docker_container.sh, 写入以下内容:

!/bin/bashDATE=$(date +%Y%m%d%H%M)container_name="${USER}_${DATE}"bind_dir="dataset"image="tensorflow/tensorflow:1.8.0-gpu-py3"cd~
​if[-d${bind_dir}];thenecho "Detects folder exists"breakelsemkdir -v -p${bind_dir}fi​
​
docker run --runtime=nvidia\-v /home/tsmc/$USER/${bind_dir}:/media\--name${container_name}\-h tsmclab\-it${image}/bin/bash

用户可修改脚本5行的内容,例如修改容器的名字,例如container_name=”tsmc_docker”, 修改镜像名:image=pytorch/pytorch:latest,修改容器要关联的宿主机目录为自己的下载目录:bind_dir=”Downloads”。

保存并执行便可自动从已有的镜像中创建一个新的容器。

8. 容器源更新:

更换/etc/apt/sources.list为阿里镜像源,然后执行update命令,如果遇到下面这种卡住的情况:

root@tsmclab:/home apt update
Get:1 http://mirrors.aliyun.com/ubuntu xenial InRelease[247kB].......
Get:39 http://mirrors.aliyun.com/ubuntu xenial-security/universe amd64 Packages[590kB]Get:40 http://mirrors.aliyun.com/ubuntu xenial-security/multiverse amd64 Packages[6283B]0%[Working]

可以退出先执行如下操作,然后再更新源:

root@tsmclab:/home apt clean
root@tsmclab:/homecd/etc/apt/
root@tsmclab:/etc/apt rm -r /etc/apt/sources.list.d
root@tsmclab:/etc/apt apt update

完成后即可正常安装软件了,以安装vim为例:

root@tsmclab:/etc/apt apt install vim

限制容器CPU资源占用

控制已经创建的单一容器内所有运行进程最大CPU资源占用比为300%(比例自行协商分配):

$ docker container update --cpu-period100000--cpu-quota300000<容器名>

系统用户监控日志

/media/secureLog目录下建立监控日志(监控内容涵盖所有人登录IP、操作历史), 向/etc/profile末尾增加写入如下shell脚本程序即可:

historyUSER_IP=`who -u am i 2>/dev/null|awk{print $NF}|sed -es/[()]//g`PRE_ID=`whoami`if["$USER_IP"=""]thenUSER_IP=`hostname`fiif[! -d /media/secureLog]thenmkdir /media/secureLog
chmod -R777/media/secureLogfiif[! -d /media/secureLog/${LOGNAME}]thenmkdir /media/secureLog/${LOGNAME}chmod770/media/secureLog/${LOGNAME}fiexportHISTSIZE=4096DT=`date"+%Y%m%d%H%M"`exportHISTFILE="/media/secureLog/${LOGNAME}/${PRE_ID}-${DT}.log.${USER_IP}"

当然,Linux可以通过/var/log/wtmp文件来查看可疑IP登陆

$ last -f /var/log/wtmp

该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大。查看/var/log/secure文件寻找可疑IP登陆次数。

多用户系统的资源平衡分配(宿主机):

1. 使用cgroups限制cpu资源实例,以避免某个进程占据所有cpu资源

场景: 在一个机器上运行多个可能消耗大量资源的程序时,我们不希望出现某个程序占据了所有的资源,导致其他程序无法正常运行,或者造成系统假死无法维护。特别是考虑到设备将用于多人使用,这更需要对所有用户进行适当的控制,以便在繁忙的时候,所有在运行用户都可以获得均衡的计算资源。这时候用 cgroups 就可以很好地控制进程的资源占用。

cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间。这里的 cfs 是完全公平调度器的缩写。cpu.cfs_period_us 就是时间周期,默认为 100000,即百毫秒。cpu.cfs_quota_us 就是在这期间内可使用的 cpu 时间,默认 -1,即无限制。

我们主要对用户运行的实例进行资源控制,先进入到系统cgroup文件目录区域:

[root@localhost ~]cd /sys/fs/cgroup/cpu[root@localhost cpu]lltotal0-rw-r--r--.1root root0Nov1715:56 cgroup.clone_children
--w--w--w-.1root root0Nov1715:56 cgroup.event_control
-rw-r--r--.1root root0Nov1715:56 cgroup.procs
-r--r--r--.1root root0Nov1715:56 cpuacct.stat
-rw-r--r--.1root root0Nov1715:56 cpuacct.usage
-r--r--r--.1root root0Nov1715:56 cpuacct.usage_percpu
-rw-r--r--.1root root0Nov1715:56 cpu.cfs_period_us
-rw-r--r--.1root root0Nov1715:56 cpu.cfs_quota_us
-rw-r--r--.1root root0Nov1715:56 cpu.rt_period_us
-rw-r--r--.1root root0Nov1715:56 cpu.rt_runtime_us
-rw-r--r--.1root root0Nov1715:56 cpu.shares
-r--r--r--.1root root0Nov1715:56 cpu.stat
-rw-r--r--.1root root0Nov1715:56 notify_on_release
-rw-r--r--.1root root0Nov1715:56 tasks

先备份原始的文件,然后我们修改cpu.cfs_quota_us文件中的数值为cpu.cfs_period_us中数值的3倍(因为我们有12核心,总算力是1200%),表示每个用户所有进程的总cpu 占用被限制为cpu总算力的四分之一即300% :

[root@localhost cpu]cat cpu.cfs_period_us100000[root@localhost cpu]cat cpu.cfs_quota_us-1[root@localhost cpu]vim cpu.cfs_quota_us300000

严格来说,因为我们规划使用docker,而在docker中运行的程序都是root进程,因此这个设置没有意义。仅对宿主机程序运行有用,容器的限制请参考前一节《限制容器CPU资源使用》。

客户端:

推荐VS Code, 配置Remote – SSH插件等,参考腾讯技术工程的专栏文章https://zhuanlan.zhihu.com/p/96819625

或者使用SecureCRT、MobaXterm

在CentOS中安装FTP服务(参考链接

切换到root登录以执行以下命令:

step1:安装vsftpd服务

[root@tsmclab ~]yum install vsftpd

step2: 启用vsftpd服务

[root@tsmclab ~]systemctl start vsftpd[root@tsmclab ~]systemctl enable vsftpd

step3:检查FTP服务状态

[root@tsmclab ~]systemctl status vsftpd

step4:在/etc/vsftpd/vsftpd.conf中配置vsftpd

VSFTPD配置文件”vsftpd.conf”位于”/etc/vsftpd”目录下,修改之前先对原始文件进行备份。

[root@tsmclab ~]cd /etc/vsftpd/[root@tsmclab vsftpd]cp vsftpd.conf vsftpd.conf.origbackup

使用vim编辑配置文件”vsftpd.conf”中的以下项,使得仅Linux系统本地用户可以访问FTP服务:

Allow anonymous FTP? (Beware - allowed by default if you comment this out).anonymous_enable=NOUncomment this to allow local users to log in.When SELinux is enforcing check for SE bool ftp_home_dirlocal_enable=YES

按如下方式配置”write_enabel”项,以允许写文件,配置chroot_local_user项以阻止FTP用户访问他们主目录之外的其它文件:

write_enable=YESchroot_local_user=YES

为每个用户配置自己的FTP上传目录(注意,请先设置好chroot_local_user项),在”vsftpd.conf”文件末尾追加以下行:

Here we configure FTP directories to allow upload when chroot enabled. This is the recommended method.user_sub_token=$USERlocal_root=/home/$USER/ftp

默认vsftpd能够使用任意端口访问FTP连接,这里提供一个限制vsftpd最大最小端口范围的配置:

pasv_min_port=40000pasv_max_port=41000

为了限制用户及其登录行为,在 userlist_enable=YES这一行的后面添加以下行:

userlist_file=/etc/vsftpd/user_listuserlist_deny=NO

保存以上编辑并退出,重启VSFTPD服务:

[root@tsmclab vsftpd]systemctl restart vsftpd

step5:配置防火墙

允许FPT端口通过防火墙,并重启防火墙

[root@tsmclab vsftpd]firewall-cmd --permanent --add-port=20-21/tcp[root@tsmclab vsftpd]firewall-cmd --permanent --add-port=40000-41000/tcp[root@tsmclab vsftpd]firewall-cmd --reload
执行第一行命令时,如果碰到提示ModuleNotFoundError:No module named ‘gi’, 则是由于python版本非系统自带的2.7导致该文件执行有误 ,解决方法是修改”/usr/bin/firewall-cmd”文件中的第一行pythonpython2.7:[root@tsmclab ~] vim /usr/bin/firewall-cmd!/usr/bin/python2.7 -Es-*- coding: utf-8 -*-保存并退出再次执行firewall-cmd即可 ,若产生新提示”FirewallD is not running”, 则再查找firewall的绝对路径:[root@tsmclab ~] which firewalld/sbin/firewalld修改firewall-cmd文件中的第一行python为python2.7,完成后继续执行上述命令行操作即可:[root@tsmclab ~] which firewalld/sbin/firewalld[root@tsmclab ~] vim /usr/sbin/firewalld!/usr/bin/python2.7 -Es

step6:配置FTP用户

若用户不在Linux用户表中,请先新建Linux用户,然后将Linux用户添加到FTP用户列表中,在目录/etc/vsftpd下编辑user_list文件追加用户名即可:

vim /etc/vsftpd/user_list

step7:使用FTP客户端访问FTP服务

可使用开源软件工具 FileZilla 访问服务

【参考资料】:

磁盘挂载一节有参考链接:https://www.cnblogs.com/wq242424/p/9187285.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容