作者归档:Henry

TensorFlow学习笔记01

在虚拟环境virtualenv中安装TensorFlow

yum install python34
yum install python34-pip
pip3 install virtualenv
yum install python-devel
mkdir tensorflow
cd tensorflow/
virtualenv venv -p /usr/bin/python3 --no-site-packages # 使用virtualenv虚拟环境安装
cd venv/
. bin/activate
pip install -U TensorFlow

Hello Demo

python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))

准备MNIST数据集

vim input_data.py

内容如下

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

执行后,会自动下载MNIST数据集到MNIST_data这个目录。(需要翻墙)

(venv) [root@localhost MNIST_data]# ll
total 11340
drwxr-xr-x. 2 root root    4096 Nov  8 15:47 .
drwxr-xr-x. 3 root root      43 Nov  8 15:56 ..
-rw-r--r--. 1 root root 1648877 Nov  8 15:47 t10k-images-idx3-ubyte.gz
-rw-r--r--. 1 root root    4542 Nov  8 15:47 t10k-labels-idx1-ubyte.gz
-rw-r--r--. 1 root root 9912422 Nov  8 15:47 train-images-idx3-ubyte.gz
-rw-r--r--. 1 root root   28881 Nov  8 15:47 train-labels-idx1-ubyte.gz

CentOS使用shadowsocks代理

本文主要用于国内服务器访问被GFW屏蔽的外网时的代理设置。由于shadowsocks本身为socket5服务器,所以还需要借助代理工具将流量进行转发,本文中使用的为广泛应用的Privoxy。

ShadowSocks安装配置

首先安装shadowsocks服务器并配置。

yum install epel-release python-pip m2crypto
pip install shadowsocks

创建shadowsocks客户端配置文件

vim /etc/ss_client.json

配置如下

{
    "server":"ss_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"your_password",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

启动shadowsocks服务器

sslocal -c /etc/ss_client.json -d start

Privoxy代理安装配置

之后需要使用Privoxy将流量转发,首先安装Privoxy

yum -y install privoxy

添加privoxy配置

echo 'listen-address localhost:8118' >> /etc/privoxy/config  # 8118为Privoxy默认端口
echo 'forward-socks5 / 127.0.0.1:1080 .' >> /etc/privoxy/config # 全局代理,所有流量都转发到socket5

启动privoxy服务器

systemctl start privoxy

最后,配置环境变量http_proxy/https_proxy

vim /etc/profile

在最后添加

export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
export no_proxy=localhost

使配置生效

source /etc/profile

测试结果

此时,所有的配置已经完成。下面使用curl访问google.com,如果能够获取到内容即成功

curl www.google.com

参考

使用xrdp远程连接CentOS桌面

在最小安装的情况下,CentOS是没有桌面的,所以需要先安装GNOME桌面

yum -y groupinstall "GNOME Desktop"

启动桌面环境

startx

安装epel源

yum -y install epel-release

安装xrdp并启动

yum -y install xrdp
systemctl start xrdp
systemctl enable xrdp

如果有防火墙,配置规则允许3389端口或直接关闭防火墙

systemctl stop firewalld

完成后,直接使用windows远程桌面(mstsc)连接即可

设置为默认登录GUI

systemctl set-default graphical.target

设置为默认登录命令行

systemctl set-default multi-user.target

 

参考:CentOS 7安装Gnome GUI 图形界面

搭建Windows FTP服务器及内网穿透相关

这里使用FileZilla Server作为FTP服务器。本文将分两个部分进行说明,第一部分为FTP服务器的搭建和配置,第二部分为FTP服务器内网穿透(端口转发)相关配置。

FTP服务器搭建

首先在FileZilla官网 下载FileZilla Server端,安装完成后直接运行。运行后会提示设置管理端口(默认14147)及admin用户密码。这些都不是重点,键入密码后继续即可。完成后,我们就看到了FileZilla Server的主界面。

这里看见了一些红字提示:

You appear to be behind a NAT router. Please configure the passive mode settings and forward a range of ports in your router.
Warning: FTP over TLS is not enabled, users cannot securely log in.

主要说明了两方面的内容:1、软件识别到当前环境是部署在路由器NAT之后的,所以需要使用被动模式(passive mode)运行并在路由器上设置端口转发;2、FTP服务没有启用TLS模式,所以用户登录信息是不安全的。

我们先无视这两条警告信息,继续完成设置。首先添加一个FTP用户

进入到用户面板,添加用户信息

完成后,进入共享目录设置(Shared folders),添加需要共享的文件夹/磁盘

完成上述配置后,直接在资源管理器的地址栏中输入

ftp://本机IP/

然后使用刚才配置的用户名和密码即可登陆到FTP共享的文件目录,例如我的本机IP为192.168.50.100

内网穿透(端口转发)

通过以上配置,我们已经可以在本地使用FTP访问到共享的目录,但是,由于服务器配置在路由器后,所以如果想从外网访问到FTP服务器,必须配置端口转发。刚才在进入到FileZilla Server主界面的时候,有一行警告信息:You appear to be behind a NAT router. Please configure the passive mode settings and forward a range of ports in your router. 这一句话已经把所需要做的给说明了,那下面就具体操作一下。

首先,配置两个端口转发记录。之所以是两条,这是由于FTP协议的原因:

默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

这里配置了两条记录,外网3021端口转发到服务器21端口,也就是FTP服务器的控制端口;3020端口转发到服务器的3020端口,这个端口用于之后的被动模式数据传输。

接下来,修改FileZilla的被动模式设置。打开设置面板

启用被动模式(Passive Mode),并将端口设置为上面步骤中用于FTP数据传输设置的端口(3020)

完成后,我们就可以通过FTP客户端访问到FTP服务器了。不过在连接的时候,需要选择模式为被动模式。以FileZilla Client连接为例

新建站点后,填写域名/IP信息,端口选择之前配置端口转发时设置的控制端口(3021),并填好用户信息

在传输设置标签中,选择被动模式

常见问题

问题1:以上配置完成后,可以从本地访问共享目录,但无法从外网访问。

可能原因:防火墙阻止了相关端口的访问。需要关闭防火墙或配置相应端口的白名单规则。

问题2:添加多个文件夹时出现下面两个错误

  • you have shared multiple unrelated directories
  • you need to set a home directory

原因:这两个问题都是由于目录设置不规范导致的,FileZilla的规则为

  • 需要选择一个目录为主目录
  • 其他目录/磁盘需要以别名的方式挂载到主目录下

解决:典型的示例可以像下面一样,主目录为用户共享目录,然后三个磁盘以别名的方式挂在在主目录下

参考:

Zabbix错误”zbx_mem_malloc(): out of memory”

Zabbix Server突然挂了,查看log报错如下:

using configuration file: /etc/zabbix/zabbix_server.conf
...
[file:dbconfig.c,line:545] zbx_mem_malloc(): out of memory (requested 16 bytes)
[file:dbconfig.c,line:545] zbx_mem_malloc(): please increase CacheSize configuration parameter

报错里已经很明确的提示了修复办法:please increase CacheSize configuration parameter

所以,我们就去zabbix_server.conf中找到CacheSize字段

### Option: CacheSize
#   Size of configuration cache, in bytes.
#   Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
# CacheSize=8M

根据服务器配置情况,修改CacheSize

### Option: CacheSize
#   Size of configuration cache, in bytes.
#   Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
CacheSize=2048M

重启Zabbix Server即可

systemctl start zabbix-server

CentOS 5安装Telnet服务

1.安装telnet服务

[root@localhost ~]# yum install telnet
[root@localhost ~]# yum install xinetd

2.检查是否成功安装

[root@localhost ~]# rpm -qa | grep telnet
telnet-0.17-38.el5
telnet-server-0.17-38.el5                                      #####有显示就是正确的

3.修改文件开启服务

[root@localhost home]# vim /etc/xinetd.d/telnet 
# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no                              默认的yes是指禁止远方telnet,改为no就是启动
}

[root@localhost xinetd.d]# service  xinetd  restart
停止 xinetd:                                              [确定]
启动 xinetd:                                              [确定]

4.停止iptables、seliunx(可以在iptables中开启telnet的23端口,后面有介绍)

5.测试能否能用root账户telnet(若没配置一般是不行的)

6.修改配置使root登陆

当我们失败后,linux是会记录下失败记录作为日志在/var/log/secure

Oct 26 08:17:57 localhost login: pam_securetty(remote:auth): access denied: tty 'pts/1' is not secure !
Oct 26 08:18:01 localhost login: FAILED LOGIN 1 FROM 192.168.1.101 FOR root, Authentication failure

可以看到没有pts/1所以被拒绝了

我们可以在修改添加一个虚拟线程

[root@localhost xinetd.d]# vi /etc/securetty 

console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
pts/1

再次测试

Xshell:\> telnet 192.168.1.100

Connecting to 192.168.1.100:23...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
CentOS release 5 (Final)
Kernel 2.6.18-8.el5 on an i686
login: root
Password: 
Last login: Wed Oct 26 08:13:15 from 192.168.1.101
[root@localhost ~]#

ps:不建议直接用root登陆,因为telnet是明文传输。建议用一个普通用户登录然后su到root用户权限

使用Samba远程挂载Windows共享目录

本文将指导如何通过Samba挂载Windows远程目录实现在CentOS下访问Windows共享文件。

前提条件

CentOS:192.168.1.101
Windows:192.168.1.102
Windows共享目录: S盘

首先安装Samba客户端

yum install -y samba-client

安装完成后,可以用smbclient -L命令查看Windows目录共享情况

smbclient -L //192.168.1.102 -U Administrator
Enter Administrator's password:
Domain=[HYPER-V] OS=[Windows Server 2016 Datacenter 14393] Server=[Windows Server 2016 Datacenter 6.3]

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      远程管理
        C$              Disk      默认共享
        D$              Disk      默认共享
        IPC$            IPC       远程 IPC
        S$              Disk      默认共享
        T$              Disk      默认共享
Connection to 192.168.1.102 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
NetBIOS over TCP disabled -- no workgroup available

这里可以看到我将要共享的磁盘<S:>

接下来创建共享目录

mkdir -p /mnt/share

将远程目录mount到/mnt/share目录上

mount -t cifs -o username="Administrator",password="WIN_PASSWD" //192.168.1.102/S$ /mnt/share/

解释一下上述命令

mount: 挂载命令
-t cifs: 挂载文件格式为cifs(Common Internet File System),通用Internet文件系统
-o username,password: option选项,填写Windows用户名和密码
//192.168.1.102/S$: 远程共享目录//IP/DISK$
/mnt/share: 本地目录

挂载完成后即可直接访问该远程目录了。如果需要断开挂载,只需执行:

umont /mnt/share

挂载的Windows共享文件夹在Linux重启之后就会消失的,如果还要使用,是需要重新挂载的。
如果希望Linux开机自动挂载Windows共享文件夹,则需要将挂载命令添加到Linux的/etc/fstab,也就是将前述的命令参数按照fstab的要求添加到fstab里面。

What‘s More…

可以通过使用Apache达到用浏览器访问此目录的效果。这里给出一个参考配置文件。

<VirtualHost *:80>

    DocumentRoot /mnt/share/CONTENTS/

    <Directory /mnt/share/CONTENTS/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/error.log
    CustomLog /var/log/httpd/access.log combined

</VirtualHost>

如果遇到403错误,请确认是否关闭Selinux。

“IDE/ATAPI账户没有足够权限”错误解决

当我通过直接拷贝文件的方式迁移Hyper-V虚拟机时遇到了以上错误,错误内容为:IDE/ATAPI 帐户没有足够的权限。

错误原因为直接拷贝文件,之前的文件所有者和现有用户不一致(虽然表面上看起来是同一个用户)。

解决方法:解绑虚拟磁盘后重新绑定即可。步骤如下:

首先打开出问题的虚拟机设置

在IDE控制器0处,删除之前的虚拟硬盘。这里的删除只是断开连接而已,并不是真正的删除文件。删除后点击确定保存。

重新进入设置,在IDE控制器0出添加刚才解绑的虚拟硬盘

选择虚拟硬盘绑定

完成以上步骤后,重新连接虚拟机开机即可。

参考:Hyper-V虚拟机启动报错:IDE/ATAPI 帐户没有足够的权限