记录
「记录」在vSphere中基于Ubuntu Server 1604部署Docker,并安装CUDA,构建多层虚拟化深度学习开发环境
首先准备好Ubuntu Server 1604的虚拟机,只设定基本功能,不添加显卡直通等特殊功能,以便于基础环境完成后进行快照。
安装好系统后,进行ssh端口设置,apt换源,apt upgrade等基本操作,之后关机打快照。
1、 显卡直通
1.1、 添加显卡直通
勾选“预留所有客户机内存(全部锁定)”,并添加显卡PCI设备,确定修改。不在第一步直通显卡的话,之后的驱动安装可能有问题!

1.2、 修改虚拟机硬件配置参数
切换到“虚拟机硬件”选项卡。展开“高级”,修改“配置参数”。 在打开的“配置参数”对话框中,点击“添加配置参数”,填入“
hypervisor.cpuid.v0 = FALSE”,确定修改。完成后务必再次进入“配置参数”,检查参数确实已经添加并保存!


1.3、 启动虚拟机并配置基本环境
配置网络、换源、更新软件包等
完成基本配置后建议对虚拟机生成快照!
2、 安装显卡驱动
2.1、 下载驱动
可以在 NVIDIA驱动下载 或者 Geforce显卡驱动下载 页面搜索并下载需要的驱动程序,也可以通过直接拼接资源链接:
http://cn.download.nvidia.com/XFree86/Linux-x86_64/[驱动版本号]/NVIDIA-Linux-x86_64-[驱动版本号].run,进行下载。比如我要下载430.14版本号的Linux驱动,可以直接在服务器运行以下代码:
1 2 |
cd ~/downloads wget https://cn.download.nvidia.cn/XFree86/Linux-x86_64/430.14/NVIDIA-Linux-x86_64-430.14.run |
2.2、 检查GPU
应该显示相应的PCI设备
1 |
lspci | grep -i nvidia |
2.3、 禁用nouveau
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 若有输出则表示nouveau正在加载,需要禁用。 lsmod | grep nouveau cd /etc/modprobe.d sudo touch blacklist-nouveau.conf sudo nano blacklist-nouveau.conf # 文件中添加以下内容 blacklist nouveau options nouveau modeset=0 # “4.4.0-83”可能会根据机器差异发送变化,需要到具体路径下确认。 cd /lib/modules/4.4.0-83-generic/kernel/drivers/gpu/drm/nouveau sudo rm -rf nouveau.ko sudo rm -rf nouveau.ko.org sudo nano /etc/modprobe.d/blacklist.conf # 文件末尾追加以下内容 blacklist rivafb blacklist vga16fb blacklist nouveau blacklist nvidiafb blacklist rivatv # 更新并重启 sudo update-initramfs -u sudo reboot |
2.3、 安装显卡驱动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
sudo apt-get remove --purge nvidia-* cd ~/downloads sudo chmod +x NVIDIA-Linux-x86_64-430.14.run sudo ./NVIDIA-Linux-x86_64-430.14.run --no-x-check --no-nouveau-check --no-opengl-files # --no-x-check 安装驱动时关闭X服务 # --no-nouveau-check 安装驱动时禁用nouveau # --no-opengl-files 只安装驱动文件,不安装OpenGL文件 # 随后会进入一个简陋的彩色界面,根据它的指示安装就可以了。 # 重启,检查驱动是否已正常运行 sudo reboot nvidia-smi # 应该显示相应的显卡运行情况 |
安装完驱动建议对虚拟机生成快照!
然后开机安装docker,去清华源帮助文档里找清华源安装方法。安装好之后配置docker远程管理,参考“docker 配置 TLS 认证开启远程访问”和“Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)”。配置好docker之后关机打快照。
在ESXi中添加显卡直通,并启动。
2020年6月28日补充
2.4、安装CUDA
本处使用的CUDA安装文件是文章在19年6月初次完成时下载的,因此安装方法也是当时的安装方法。根据从英伟达官网的CUDA安装文档来看,最新的推荐安装方式似乎变成了用apt包管理器安装。但是根据最新的安装文档,我在操作过程中出现了两个问题:首先是所有的下载资源(包括软件源证书和软件包)都无法在中国大陆正常下载;另一个是安装后server系统会出现GUI界面。因此,我决定使用去年的安装包和安装方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
cd ~/downloads sudo chmod +x ./cuda_10.0.130_410.48_linux.run # 安装依赖包 sudo apt-get install linux-headers-$(uname -r) sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev # 安装CUDA sudo sh ./cuda_10.0.130_410.48_linux.run # 经过一小段时间的等待,会出现一个非常长的用户许可协议,按住回车键直到协议走完,不用担心按过头,最后需要输入accept才会继续。 # 之后会有安装选项,类似下面的内容。注意如果已经安装驱动,就不需要再次安装了! Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48? (y)es/(n)o/(q)uit: n Install the CUDA 10.0 Toolkit? (y)es/(n)o/(q)uit: y Enter Toolkit Location [ default is /usr/local/cuda-10.0 ]: Do you want to install a symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y Install the CUDA 10.0 Samples? (y)es/(n)o/(q)uit: y Enter CUDA Samples Location [ default is /home/ubuntu ]: Installing the CUDA Toolkit in /usr/local/cuda-10.0 ... Installing the CUDA Samples in /home/ubuntu ... Copying samples to /home/ubuntu/NVIDIA_CUDA-10.0_Samples now... Finished copying samples. # 安装完成后应该显示如下信息 =========== = Summary = =========== Driver: Not Selected Toolkit: Installed in /usr/local/cuda-10.0 Samples: Installed in /home/ubuntu Please make sure that - PATH includes /usr/local/cuda-10.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.0/doc/pdf for detailed information on setting up CUDA. ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 10.0 functionality to work. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file: sudo <CudaInstaller>.run -silent -driver Logfile is /tmp/cuda_install_6983.log # 安装完成后应该还需要配置环境变量等操作,但我不需要在宿主机运行cuda,因此略过。 # 重启,检查CUDA是否已正常运行 sudo reboot cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery sudo make ./deviceQuery # 应该返回以下信息 ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 2 CUDA Capable device(s) Device 0: "GeForce RTX 2080 Ti" CUDA Driver Version / Runtime Version 10.2 / 10.0 CUDA Capability Major/Minor version number: 7.5 Total amount of global memory: 11019 MBytes (11554717696 bytes) (68) Multiprocessors, ( 64) CUDA Cores/MP: 4352 CUDA Cores GPU Max Clock rate: 1545 MHz (1.54 GHz) Memory Clock rate: 7000 Mhz Memory Bus Width: 352-bit L2 Cache Size: 5767168 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 1024 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 3 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 3 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > Device 1: "GeForce RTX 2080 Ti" CUDA Driver Version / Runtime Version 10.2 / 10.0 CUDA Capability Major/Minor version number: 7.5 Total amount of global memory: 11019 MBytes (11554717696 bytes) (68) Multiprocessors, ( 64) CUDA Cores/MP: 4352 CUDA Cores GPU Max Clock rate: 1545 MHz (1.54 GHz) Memory Clock rate: 7000 Mhz Memory Bus Width: 352-bit L2 Cache Size: 5767168 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 1024 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 3 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 4 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > > Peer access from GeForce RTX 2080 Ti (GPU0) -> GeForce RTX 2080 Ti (GPU1) : No > Peer access from GeForce RTX 2080 Ti (GPU1) -> GeForce RTX 2080 Ti (GPU0) : No deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.2, CUDA Runtime Version = 10.0, NumDevs = 2 Result = PASS |
安装完CUDA建议对虚拟机生成快照!
3、 安装Docker
3.1、 安装Docker
根据清华开源镜像站的帮助文档,安装Docker。
3.2、 安装nvidia-docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
cd ~ # 添加软件源 curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update sudo apt-get install -y nvidia-docker2 # 修改docker配置 sudo pkill -SIGHUP dockerd sudo nano /etc/docker/daemon.json # 配置文件样例,$端口号是你设定的端口号 { "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:$端口号"], "registry-mirrors": ["https://******.mirror.aliyuncs.com"], "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } # 主配置文件的启动参数和上述配置有冲突,重启docker会导致如下报错: Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. # 因此,同时修改主配置文件 sudo nano /lib/systemd/system/docker.service # 修改ExecStart参数为如下样式: ExecStart=/usr/bin/dockerd # -H fd:// --containerd=/run/containerd/containerd.sock # 刷新配置,重启docker systemctl daemon-reload sudo systemctl restart docker |
安装并配置好docker建议对虚拟机生成快照!
4、 配置TLS远程管理,及Portainer接入
配置TLS远程管理是在Docker服务器(运行docker守护进程的服务器)进行配置,因此下面的$HOST是Docker服务器的IP!
4.1、 修改openssl配置的CA部分
ubuntu 16.04 下 openssl 配置文件位置:/usr/lib/ssl/openssl.cnf,其他系统可参考
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sudo su nano /usr/lib/ssl/openssl.cnf # 修改以下部分,路径仅作示例 [ CA_default ] dir = /etc/openssl # 创建相关目录和文件 mkdir /etc/openssl cd /etc/openssl mkdir -p {certs,private,tls,crl,newcerts} # 注意serial要有数字,不然会报错 echo 00 > serial touch index.txt |
4.2、 生成私钥并自签证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# 生成CA私钥,必须设定一个CA私钥密码,该密码很重要,之后的步骤要输入 openssl genrsa -out private/cakey.pem -des 4096 # 返回如下内容 Generating RSA private key, 4096 bit long modulus ..............++ .........................................................................................................................++ e is 65537 (0x10001) Enter pass phrase for private/cakey.pem: Verifying - Enter pass phrase for private/cakey.pem: # 用CA自签证书 openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem # 返回如下内容 # 执行后首先会要求输入CA私钥密码 Enter pass phrase for private/cakey.pem: # 之后会要求填写一些信息,其中Common Name为必填项!$HOST是Docker服务器(运行docker守护进程的服务器)的IP You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Beijing Locality Name (eg, city) []:Beijing Organization Name (eg, company) [Internet Widgits Pty Ltd]:BISTU Organizational Unit Name (eg, section) []:PCIJLab Common Name (e.g. server FQDN or YOUR name) []:$HOST Email Address []: |
4.3、 颁发证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# 生成要颁发证书的密钥文件 openssl genrsa -out private/docker.key 4096 # 返回如下内容 Generating RSA private key, 4096 bit long modulus ...................++ ...................................................++ e is 65537 (0x10001) # 生成证书请求 openssl req -new -key private/docker.key -days 3650 -out docker.csr # 需要填写请求信息,其中Common Name为必填项!$HOST是Docker服务器(运行docker守护进程的服务器)的IP You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Beijing Locality Name (eg, city) []:Beijing Organization Name (eg, company) [Internet Widgits Pty Ltd]:BISTU Organizational Unit Name (eg, section) []:PCIJLab Common Name (e.g. server FQDN or YOUR name) []:$HOST Email Address []: # 下面的密码和公司名都可以留空 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: # 颁发证书 openssl ca -in docker.csr -out certs/docker.crt -days 3650 # 会要求输入CA私钥密码 Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for /etc/openssl/private/cakey.pem: # 之后会显示相关信息,并要求确认 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 0 (0x0) Validity Not Before: Jul 8 10:07:47 2020 GMT Not After : Jul 6 10:07:47 2030 GMT Subject: countryName = CN stateOrProvinceName = Beijing organizationName = BISTU organizationalUnitName = PCIJLab commonName = $HOST X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 9A:21:68:DD:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF X509v3 Authority Key Identifier: keyid:19:D5:EF:76:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF Certificate is to be certified until Jul 6 10:07:47 2030 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated |
4.4、 配置Docker使用TLS认证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# 转存生成的秘钥和证书 cd /etc/docker/ mkdir ssl cd /etc/docker/ssl cp /etc/openssl/cacert.pem ./ca.pem cp /etc/openssl/newcerts/00.pem ./cert.pem cp /etc/openssl/private/docker.key ./key.pem # 修改配置文件 nano /etc/docker/daemon.json # 配置文件样例,$端口号是你设定的端口号 { "tlsverify": true, "tlscacert": "/etc/docker/ssl/ca.pem", "tlscert": "/etc/docker/ssl/cert.pem", "tlskey": "/etc/docker/ssl/key.pem", "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:$端口号"], "registry-mirrors": ["https://******.mirror.aliyuncs.com"], "default-shm-size": "32G", "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } # 重启Docker systemctl restart docker |
4.5、 Portainer接入
如果已经添加过服务器,只更新TLS认证配置,则只需要上传相应证书:
将/etc/docker/ssl/
目录内的cert.pem
和key.pem
文件拷贝到本地,上传至Portainer。

如果是新服务器,按照下面步骤进行添加:


配置好TLS远程管理后建议对虚拟机生成快照!
参考资料
「记录」博客重生记——Ubuntu 18.04安装LNMP+phpmyadmin
因为各种客观+主观的原因(chrome恶心的安全措施、长期没有对服务器系统进行升级、脑子被门夹了非要上https、海森堡编辑器全是bug、研二全是事情等等),我做了各种令人窒息的操作,导致我的站点和博客彻底凉凉。为了完成曾老师的作业,也为了能好好做记录,我终于下定决心把整个站点重建一遍。

其实最早只是想着从ubuntu16迁移到18,结果玩脱了。不过既然都上18了,再退到16岂不是坑都白踩了,而且16也不一定能活多久,干脆一步到位。
这次记录除了包括在ubuntu18上部署lnmp、phpmyadmin以外,还会有https站点迁移的内容,读者请各取所需。
首先安装 lnmp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
sudo apt-get update # 安装nginx sudo apt-get install nginx # 为了避免安装apache,分别安装php组件 sudo apt-get install php7.2-cli php7.2-cgi php7.2-fpm php7.2-mbstring php7.2-mysql curl php7.2-curl # 安装mysql # 要注意的一点是在ubuntu18安装mysql5.7的时候不会提示设置root密码,而是直接静默安装,这是正常的,安装完成后root账户没有密码,但只有ubuntu的root用户才可以用root登陆mysql,此外还有有一个debian系系统特有的账户,密码随机的写在一个配置文件里 sudo apt-get install mysql-server # 配置nginx # 直接移动文件夹或者删掉重建都行,不过移动的话记得给里面的示例文件改名 sudo mv /var/www /var/nginx sudo mv /var/nginx/html /var/nginx/www # 为了方便远程编辑站点目录下的文件,我喜欢将站点根目录属主改为自己的用户 sudo chown -R ubuntu:ubuntu /var/nginx sudo ln -s /var/nginx /nginx sudo ln -s /var/nginx ~/nginx sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup sudo nano /etc/nginx/sites-available/default |
下面给一个配置文件样本,是一个很早的原始版本,仅供测试参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; root /var/nginx/www; # Add index.php to the list if you are using PHP index index.php index.html index.htm; server_name www.test.com test.com *.test.com; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { include snippets/fastcgi-php.conf; # # With php7.2-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php7.2-fpm: fastcgi_pass unix:/run/php/php7.2-fpm.sock; } } |
有了简单配置之后可以测试下nginx和php了,一定先测试后迁移,因为在迁移过程中涉及的步骤和环节很多,而且中间几乎无法测试,一旦前期有问题最后都没法定位错误!
使用php探针测试会发现页面显示白页,nginx日志无问题,这是一个bug,解决方法如下
1 2 3 4 5 6 7 |
sudo nano /etc/nginx/fastcgi_params # 文件末尾增加 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; # 重启服务 sudo service php7.2-fpm restart sudo service nginx restart |
测试通过之后就可以开始迁移了,但是建议先把phpmyadmin装了,这样可以先配置数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
cd /var/nginx/www/ # 下载地址去官方找最新的 wget https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.zip unzip phpMyAdmin-4.8.5-all-languages.zip mv ./phpMyAdmin-4.8.5-all-languages ./pma # 这一步不是必须的 sudo chown www-data:www-data -R ./pma # 因为mysql的新安全措施,phpmyadmin无法用root登陆,必须新建一个账户 # root没有密码,但必须sudo或以root身份登陆ubuntu sudo mysql --user=root mysql # 'phpmyadmin'@'localhost'是限定本地域登陆的'phpmyadmin'用户,@'localhost'可以不加,如果想换其他用户名只需要替换phpmyadmin # your_pass替换成你要设定的密码 CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'your_pass'; GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; # 登陆phpmyadmin,如果提示“配置文件现在需要一个短语密码。” cd /var/nginx/www/pma sudo nano ./libraries/config.default.php # 找到以下行,并修改: $cfg['blowfish_secret'] = 'your-url.com'; cp config.sample.inc.php config.inc.php sudo nano ./config.inc.php # 找到以下行,并修改: $cfg['blowfish_secret'] = '6OppxJrNhNcv2lEUTzRKavXIN6DcjJ1Y'; # 注意config.inc.php文件中的字符串必须是32位字符! # 如果没有把phpmyadmin目录属主转移给www-data,还需要手动创建一个临时目录 mkdir ./tmp sudo chown www-data:www-data -R ./tmp |
终于可以开始迁移服务器了
1 2 3 4 5 6 7 8 9 |
# 迁移数据库 # 用phpmyadmin导入旧的数据库要保证php上传文件大小的限制已经被完全解除 sudo nano /etc/php/7.2/fpm/php.ini # 修改以下行: upload_max_filesize = 500m; post_max_size = 500m; max_execution_time = 600; max_input_time = 600; memory_limit = 512m; |
完成数据库迁移之后,就是最关键的部分了,之后的步骤中间几乎完全不能调试
- 将整站数据上传至相应的服务器目录
- 修改目录属主和权限
- 将原服务器的nginx配置文件替换掉新服务器nginx的配置文件
- 修改新服务器nginx服务器文件,使得其中一些小条目符合新服务器配置
- 将ssl证书配置到相应目录
- 重启nginx
- 进入wordpress目录修改wp-config.php中的数据库连接信息
- 修改dns解析地址到新服务器
- 通过url访问页面测试
如果一切正常,恭喜你完成了全部步骤!
「记录」制作macOS High Sierra 10.13.6的ISO安装镜像
最近掏了一个dell 9020sff,心血来潮想要装mac虚拟机,但是折腾了好久总是出各种奇怪的问题,后来还是在一个台湾的博客里找到解决方法,在这记录一下。废话不多说,先上干货。
制作macOS High Sierra 10.13.6的ISO安装镜像
首先准备好一个mac系统,不管是实体mac还是mac虚拟机都行,甚至比较老的OS X也行(我用的10.8,虽然官方说这个版本支持升级到10.13,但从store下载的原版app在10.8里提示已损坏无法打开,但这并不影响iso的制作)。然后需要下载好10.13的安装应用,建议从mac app store下载,把app放在应用程序目录。
注意:下面的代码中默认的10.13安装app路径是:”/Applications/Install\ macOS\ High\ Sierra.app”,如果你的安装app不在默认位置,请自行替换路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
hdiutil attach /Applications/Install\ macOS\ High\ Sierra.app/Contents/SharedSupport/InstallESD.dmg -noverify -mountpoint /Volumes/highsierra hdiutil create -o /tmp/HighSierraBase.cdr -size 7316m -layout SPUD -fs HFS+J hdiutil attach /tmp/HighSierraBase.cdr.dmg -noverify -mountpoint /Volumes/install_build asr restore -source /Applications/Install\ macOS\ High\ Sierra.app/Contents/SharedSupport/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase # 注意,下面这一条命令会报一些文件或目录不存在的警告,但这是正常的 cp -R /Volumes/highsierra/Packages /Volumes/OS\ X\ Base\ System/System/Installation hdiutil detach /Volumes/OS\ X\ Base\ System/ hdiutil detach /Volumes/highsierra/ mv /tmp/HighSierraBase.cdr.dmg /tmp/BaseSystem.dmg hdiutil create -o /tmp/HighSierra.cdr -size 8965m -layout SPUD -fs HFS+J hdiutil attach /tmp/HighSierra.cdr.dmg -noverify -mountpoint /Volumes/install_build asr restore -source /Applications/Install\ macOS\ High\ Sierra.app/Contents/SharedSupport/BaseSystem.dmg -target /Volumes/install_build -noprompt -noverify -erase cp /tmp/BaseSystem.dmg /Volumes/OS\ X\ Base\ System hdiutil detach /Volumes/OS\ X\ Base\ System/ hdiutil convert /tmp/HighSierra.cdr.dmg -format UDTO -o /tmp/HighSierra.iso mv /tmp/HighSierra.iso.cdr ~/Desktop/Install\ macOS\ High\ Sierra.iso rm /tmp/HighSierra.cdr.dmg |
如果没有意外,你就可以在桌面找到iso安装镜像了。
参考资料:製作 macOS High Sierra 10.13 的可開機安裝隨身碟及 ISO 映像檔
神奇的坑
在找到正确的解决方法之前,我当然也踩了不少坑,一度甚至想放弃,但「缘,妙不可言!」,所以在这记录一些比较神奇的坑。
1、用官方推荐的createinstallmedia创建的dmg,用磁盘工具另存为“DVD/CD 主映像”,会储存为.cdr文件,但这个文件不能直接改后缀成.iso!
直接改后缀看似没有什么问题,在win里也能打开,也可以在esxi里挂载,但是在安装中要么无法引导,要么在引导的最后阶段出现禁止符号!!!没错,就是这个符号🚫。黑色的背景,白色的禁止符,我一直以为是我虚拟机的问题,废了好大劲才晓得是镜像问题。
2、不可以在mac以外的系统里将dmg或cdr转为iso,不管用什么工具都不行,必须用mac!
我试过百度上几乎所有的转换方案,包括软碟通啊,或是什么其他的软件,最后事实证明,都TMD在骗人,浪费我的时间和精力!SB百度!
3、VMware虚拟macOS需要加两个高级参数
有两个修改方法。第一个是直接改vmx文件,另一个是在vsphere client里“编辑虚拟机设置”,“虚拟机选项”选项卡,展开“高级”,点“编辑配置”。确保下面两个参数正确,否则无法打开虚拟机,或运行出现奇怪的错误。
smc.present = “TRUE”
smc.version = 0
「记录」在Ubuntu Server 1604上部署SOCKS5服务器dante-server
因为某些原因,我需要部署一台代理服务器,之前配置了http缓存代理,但是有些网站访问异常,而且有些软件不支持http代理,所以萌生了部署SOCKS5服务。
1、安装 dante-server
1 |
sudo apt install dante-server |
2、配置
备份配置文件
1 2 |
sudo cp /etc/danted.conf /etc/danted.conf.backup sudo nano /etc/danted.conf |
查找以下关键行进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 设置日志文件位置 # the server will log both via syslog, to stdout and to /var/log/lotsoflogs logoutput: /var/log/danted/output.log # 设置网卡和端口 # Alternatively, the interface name can be used instead of the address. internal: ens33 port = 1080 # 设置出口 # all outgoing connections from the server will use the IP address external: ens33 # 设置模式为无验证 # methods for socks-rules. method: username none #rfc931 # 设置客户端可以通过任何ip访问任何ip # This is identical to above, but allows clients without a rfc931 (ident) # too. In practise this means the socksserver will try to get a rfc931 # reply first (the above rule), if that fails, it tries this rule. client pass { from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0 log: connect disconnect } # 设置协议支持tcp和udp # everyone from our internal network, 10.0.0.0/8 is allowed to use # tcp and udp for everything else. pass { from: 0.0.0.0/0 to: 0.0.0.0/0 protocol: tcp udp log: connect disconnect } |
创建日志文件夹,并重启服务
1 2 |
sudo mkdir /var/log/danted/ sudo service danted restart |
「记录」Windows下更换pip源为清华源
在资源管理器中访问路径:%appdata%
新建pip文件夹,在pip文件夹内新建文件:pip.ini
文件内容:
1 2 3 4 |
[global] timeout = 600 index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn |
「记录」重新安装Adobe Ps & Lr CC 2015,并激活
因为给电脑换了CPU所以导致之前用的好好的Ps和Lr需要重新激活,因为某些未知的原因激活不了,我只好清理后重装,折腾了很久,这次记下来免得以后忘了。
1、首先要彻底清理旧的软件,可以先用官方卸载器卸载,然后再用清理工具清理,也可以不卸载直接清理。
运行“AdobeCreativeCloudCleanerTool.exe”,选择语言,确认,然后选择要清理的软件:
选择“1、All”,工具会自动扫描并列出所有电脑中的adobe软件:
选择“Clean All”,确认,等待清理完毕。
2、清理旧的授权文件,清空以下目录内的全部文件。
C:\Program Files (x86)\Common Files\Adobe\SLCache
C:\ProgramData\Adobe\SLStore
3、清理host文件中全部关于adobe的记录!
4、重启并断网,断网、断网!
5、运行Ps安装程序
选择右下角的“登陆”,然后选择“稍后连接”,接受许可协议,进入序列号输入界面,
打开序列号生成工具,先选择产品,确认选择正确后点击左边按钮,生成序列号,不要关闭生成工具,或把序列号存在一个文件里,
输入序列号后点“下一步”,点“稍后连接”,选择安装目录,并安装,安装完成后点“立即启动”,
启动Ps后关闭,并关闭要求登陆的窗口,重新打开Ps,在登录窗口选择“连接Internet时是否出现问题?”,
生成请求代码后,检查序列号生成工具中的产品选项,并保证序列号是刚才输入的序列号,
将请求代码粘贴到序列号下面的文本框,点击左侧按钮生成响应代码,粘入激活窗口,
Ps安装激活完成。
6、运行Lr安装程序
选择右下角的“登陆”,然后选择“稍后连接”,接受许可协议,进入序列号输入界面,
打开序列号生成工具,先选择产品,确认选择正确后点击左边按钮,生成序列号,不要关闭生成工具,或把序列号存在一个文件里,
输入序列号后点“下一步”,点“稍后连接”,选择安装目录,并安装,安装完成后点“立即启动”,
启动Lr后关闭,并关闭要求登陆的窗口,重新打开Lr,在登录窗口选择“连接Internet时是否出现问题?”,
选“脱机激活”,并“生成请求代码”,生成请求代码后,检查序列号生成工具中的产品选项,并保证序列号是刚才输入的序列号,
将请求代码粘贴到序列号下面的文本框,点击左侧按钮生成响应代码,粘入激活窗口,
Lr安装激活完成。
7、在host中加入以下记录
# Adobe
127.0.0.1 lmlicenses.wip4.adobe.com
127.0.0.1 lm.licenses.adobe.com
127.0.0.1 na1r.services.adobe.com
127.0.0.1 hlrcv.stage.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 activate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.adobe.com
8、联网重启
「记录」树莓派raspbian-stretch系统安装LNMP环境 & 解决无法安装php5-mysql的问题
为了能让实验室的路由器一直保持登陆状态,但又不想使用非官方固件,因为非官方固件都不够稳定,所以买了一个树莓派 zero-w。
本着新硬件就要用新系统的想法,刷了官方才出了不到一个月的系统:2017-09-07-raspbian-stretch,然后在安装LNMP环境的过程中遇到很多奇怪的问题,在这里记录一下。
先插一个zero-w的网络配置过程,虽然不是什么大问题,但是着实坑了我很久。
正常刷好系统后,用电脑在/boot分区的根目录创建名为“wpa_supplicant.conf”的文本文件,内容为:
1 2 3 4 5 6 7 8 |
country=CN ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="Port-2.4G" psk="port65536" } |
注意:WiFi名称不能包含“_”,就是下划线,因为有些情况下下划线和空格会混淆。WiFi加密模式只能为“WPA-PSK [TKIP]”,因为wpa不支持AES加密。
然后在/boot分区的根目录创建名为“ssh”的空目录,这样就会自动打开ssh服务。
配置好网络后,开始换源。
阿里云
Raspbian http://mirrors.aliyun.com/raspbian/raspbian/清华大学
Raspbian http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/
1 2 |
sudo mv /etc/apt/sources.list /etc/apt/sources.list.buckup sudo nano /etc/apt/sources.list |
文件内容如下:
1 2 |
deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free deb-src http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free |
保存
1 |
sudo apt-get update |
配置LNMP环境
先上干货:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 建议分条执行,避免一次安装太多出错了都不知道是哪里的原因 sudo apt-get install nginx sudo apt-get install curl libcurl3 libcurl3-dev sudo apt-get install php5-cli php5-cgi php5-fpm sudo apt-get install php5-curl php5-mcrypt php5-gd # 务必使用archive.raspbian.org官方的安装包,我多次尝试使用packages.debian.org的包,每次都会出现安装完php5-mysql后php5-fpm无法启动的错误,原因未知 cd ~/Downloads/ wget http://archive.raspbian.org/raspbian/pool/main/m/mysql-5.5/libmysqlclient18_5.5.57-0%2bdeb8u1_armhf.deb # 要先安装libmysqlclient18的依赖包mysql-common,或者直接先安装mysql-server sudo apt-get install mysql-server sudo apt-get install mysql-common sudo dpkg --install ./libmysqlclient18_5.5.57-0+deb8u1_armhf.deb sudo apt-get install php5-mysql # 正常配置nginx和其它环境,bala~bala~ |
如果直接按照通常步骤直接安装php5-mysql,会提示如下错误:
1 2 3 4 5 6 7 8 9 10 11 12 |
pi@pi-zero-w:~ $ sudo apt-get install php5-mysql 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件 包尚未被创建或是它们已被从新到(Incoming)目录移出。 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: php5-mysql : 依赖: libmysqlclient18 但无法安装它 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。 |
为了解决这个问题,我参考了「libmysqlclient18 has no installation candidate」。
尝试手动下载并安装packages.debian.org提供的libmysqlclient18包,libmysqlclient18_5.5.57-0+deb8u1_armhf.deb,文件sha1:16237a52a6c3b945c30a8fdf401816277d7f2436。
手动安装libmysqlclient18后,可以成功安装php5-mysql。但是apt-get在安装完,重启php5-fpm的时候会出现以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
pi@pi-zero-w:~ $ sudo apt-get install php5-mysql 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列【新】软件包将被安装: php5-mysql 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。 需要下载 0 B/51.6 kB 的归档。 解压缩后会消耗 212 kB 的额外空间。 正在选中未选择的软件包 php5-mysql。 (正在读取数据库 ... 系统当前共安装有 124140 个文件和目录。) 正准备解包 .../php5-mysql_5.6.22+dfsg-2+b3_armhf.deb ... 正在解包 php5-mysql (5.6.22+dfsg-2+b3) ... 正在处理用于 php5-fpm (5.6.22+dfsg-2+b3) 的触发器 ... 正在设置 php5-mysql (5.6.22+dfsg-2+b3) ... Creating config file /etc/php5/mods-available/mysql.ini with new version php5_invoke: Enable module mysql for fpm SAPI php5_invoke: Enable module mysql for cli SAPI php5_invoke: Enable module mysql for cgi SAPI Creating config file /etc/php5/mods-available/mysqli.ini with new version php5_invoke: Enable module mysqli for fpm SAPI php5_invoke: Enable module mysqli for cli SAPI php5_invoke: Enable module mysqli for cgi SAPI Creating config file /etc/php5/mods-available/pdo_mysql.ini with new version php5_invoke: Enable module pdo_mysql for fpm SAPI php5_invoke: Enable module pdo_mysql for cli SAPI php5_invoke: Enable module pdo_mysql for cgi SAPI 正在处理用于 php5-fpm (5.6.22+dfsg-2+b3) 的触发器 ... Job for php5-fpm.service failed because a fatal signal was delivered to the control process. See "systemctl status php5-fpm.service" and "journalctl -xe" for details. invoke-rc.d: initscript php5-fpm, action "restart" failed. ● php5-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php5-fpm.service; enabled; vendor preset: enabled) Active: failed (Result: signal) since Thu 2017-09-28 16:08:51 CST; 140ms ago Process: 8289 ExecStart=/usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf (code=killed, signal=ILL) Process: 8283 ExecStartPre=/usr/lib/php5/php5-fpm-checkconf (code=exited, status=0/SUCCESS) Main PID: 8289 (code=killed, signal=ILL) 9月 28 16:08:50 pi-zero-w systemd[1]: Starting The PHP FastCGI Process Manager... 9月 28 16:08:50 pi-zero-w php5-fpm-checkconf[8283]: Illegal instruction 9月 28 16:08:51 pi-zero-w systemd[1]: php5-fpm.service: Main process exited, code=…/ILL 9月 28 16:08:51 pi-zero-w systemd[1]: Failed to start The PHP FastCGI Process Manager. 9月 28 16:08:51 pi-zero-w systemd[1]: php5-fpm.service: Unit entered failed state. 9月 28 16:08:51 pi-zero-w systemd[1]: php5-fpm.service: Failed with result 'signal'. Hint: Some lines were ellipsized, use -l to show in full. dpkg: 处理软件包 php5-fpm (--configure)时出错: 子进程 已安装 post-installation 脚本 返回错误状态 1 在处理时有错误发生: php5-fpm E: Sub-process /usr/bin/dpkg returned an error code (1) |
尝试多次后,我发现之前参考的讨论里有人说使用archive.raspbian.org官方的libmysqlclient18包,于是进行尝试,并获得成功。
包下载地址:libmysqlclient18,sha1:a5f6877e856a58efbf9046f8db752646895b137b。
「记录」解决Ubuntu 16.04无法安装php5的问题
在Ubuntu 16.04 中默认无法安装php5,只能安装php7,直接用如下命令
1 |
sudo apt-get install php5-mysql |
会提示
1 2 3 4 5 |
Package php5-mysql is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package 'php5-mysql' has no installation candidate |
按照这个文章中给出的解决方法,执行以下指令
1 2 3 |
sudo apt-get purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "` sudo add-apt-repository ppa:ondrej/php sudo apt-get update |
「记录」UITableView运行时动态改变行高
在cell中加入一个可以改变cell高度的button,就是下面这种效果
核心代码:
1 2 |
[weakSelf.tableView beginUpdates]; [weakSelf.tableView endUpdates]; |
在Cell.h中添加tableview更新块属性:
1 |
@property void (^refreshTableViewBlock)(); |
button的点击事件:
1 2 3 4 5 6 7 |
- (void)buttonTouchUpInside:(UIButton *)sender { self.lable.numberOfLines = 8; [self.lable sizeToFit]; if (self.refreshTableViewBlock) { self.refreshTableViewBlock(); } } |
在TableViewController的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中添加:
1 2 3 4 |
cell.refreshTableViewBlock = ^{ [weakSelf.tableView beginUpdates]; [weakSelf.tableView endUpdates]; }; |
参考资料:http://www.jianshu.com/p/e86f1989b1d6
「记录」Win10磁盘占用100%无响应导致系统卡死的解决过程
之前内置的硬盘里有个120g的小固态留着没分区,想着以后可以折腾双系统什么的。昨天突然想用,却发现怎么也没法格式化,格式化一半就无响应了。因为曾经在这个固态上装过一次系统,一切正常,所以觉得很奇怪。怀疑是不是主板接口问题(之前有块三星固态就是用着用着就无响应,怀疑过,但是那个三星固态放到移动硬盘盒子里毛病照旧,所以排除了主板和接口问题),就换了一个接口,发现问题依旧。然后就怀疑是不是硬盘坏了,但是基本没用过怎么会坏呢,先拆出来接硬盘盒看看。在经过复杂的拆机后,放在硬盘盒子里接在surface上格式化,非常顺利,没有任何问题。诶,这就奇葩了,莫非真是主板问题?接口换过了还是有问题,那就说明几个SATA接口都有问题,南桥有问题么,那为啥别的硬盘都正常?重新装回去,然后顺便换了一下硬盘的顺序,接在一个之前接别的硬盘的接口上,进入系统发现问题解决了,格式化正常,重新删掉分区新建并格式化也正常,我以为问题自己解决了,然而我往硬盘里装虚拟机的时候,又无响应!然后用ssd测速软件测速,也是无响应。
总结一下表现的问题就是:硬盘在进行资源密集操作的时候,磁盘活动时间占用100%,传输速率下降为0,极少情况程序报“I/O错误”,大部分情况程序无响应,操作系统正常,但无法完全关机。
我不愿相信是自己主板有问题,因为毕竟有些硬盘用的好好的,而且技嘉大厂主板很少有问题,于是网上搜索相关问题。大部分类似情况都是因为微软自带的安全扫面,或者系统策略设置导致的,也有说是Win8.1系统自己的原因,Win7就没问题。我认为这些都不能解释和解决我遇到的问题,于是继续找,终于找到一个我认为比较靠谱的文章:【教程】完美解决windows10磁盘占用100%并出现卡顿、假死现
楼主在进行磁盘扫描的时候,win10有大量超时坏道,win8pe就没有问题,这正好对应我电脑上硬盘时好时坏,且换个电脑就没有问题的表现。最后楼主发现win10自带的驱动是06年的驱动①!我立刻想到自从用win8.1以来,我从来没有专门安装过主板的驱动,甚至连显卡驱动都让系统自动下载安装,新电脑也一样没有安装技嘉附带的光盘上的驱动!我立即用光盘重新安装全部驱动,再次尝试用测速软件测试,硬盘活动时间占用100%时,传输速率不再下降为0,程序运行正常,问题解决。
因此,整个问题都是因为win10自动选择的驱动导致的。我回忆之前微软曾经把自动识别并安装驱动作为win8.1的一个特性进行宣传,且win10也强调内置了通用驱动,而现实是残酷的,自动识别的驱动是有缺陷的,这不但导致用户不能正常使用,甚至增加了用户解决问题的复杂程度!
①:为何很多驱动程序日期都是2006年6月21日? cnbeta的这篇文章解释了为何微软内置驱动都是06年的,但是实际情况是我在安装了厂商的专用驱动后,问题得到了解决,事实证明就算微软会更新自己的驱动,也不能因此不安装厂商的专用驱动!
「记录」使用ettercap进行基于ARP欺骗的中间人监听
首先,安装ettercap
1 |
sudo apt-get install ettercap-graphical |
然后,运行ettercap图形界面
1 |
screen sudo ettercap -G |
Sniff -> Unified sniffing…
选择想要使用的网卡,并确定
Host -> Host list
Host -> Scan for hosts
找到想要监听的设备,添加target1
对路由器添加target2
Mitm -> ARP poisoning…
Start -> Start sniffing
View -> Connections
确认已经成功监听后,就可以用其他工具抓包、攻击···
「记录」ubuntu搭建python开发环境
1 2 3 4 5 6 |
# 安装python2.7 sudo apt-get install python2.7 python2.7-dev # 很多pip安装的包都需要libssl和libevent编译环境 sudo apt-get install build-essential libssl-dev libevent-dev libjpeg-dev libxml2-dev libxslt-dev # 安装python包管理器pip sudo apt-get install python-pip |