广告

本站里的文章大部分经过自行整理与测试

2016年5月30日星期一

Ubuntu - Vagrant 基础学习

https://vagrantcloud.com/

$ su

# Vagrant 需要用到 virtualbox
$ apt-get install virtualbox
$ apt-get install vagrant

# 开个文件夹, 进入..

$ mkdir demo
$ cd demo

# 下载

$ vagrant box add ubuntu/trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
 

$ vagrant init ubuntu/trusty64    # 初始化, 会准备 Vagrantfile
$ vagrant up                              # 启动虚拟机, 如果没有运行 vagrant box add, 会自动去找与下载

# SSH 连接至虚拟机

$ vagrant ssh
$ lsb_release -a
$ exit

$ vagrant halt        # 关闭虚拟机
$ vagrant reload    # 重启虚拟机
$ vagrant status    # 查看虚拟机状态
$ vagrant destroy  # 销毁当前虚拟机

2016年5月26日星期四

VirtualBox - Mac OS X 10.11 启动设置

VirtualBox 安装 OS X 虚拟机
什么都不设置的话,会出现 FATAL: No bootable medium found! System halted.

1. 先弄个虚拟机名为 ElCapitan, 设置

Settings... - General - Basic 

Name: ElCapitan
Type: Mac OS X
Version: Mac OS X 10.11 El Capitan (64-bit)
 

- Enable EFI (Special OSes only) 
* 不启动 EFI, 会出现错误 Configuration error: Querying "UUID" failed (VERR_CFGM_VALUE_NOT_FOUND)

2. 通过命令, 修改 ElCapitan.vbox 文件 

开启 command prompt, 输入以下

> cd "C:\Program Files\Oracle\VirtualBox" 

# VirtualBox 4.X.X
> VBoxManage modifyvm "ElCapitan" --cpuidset 00000001 000306a9 04100800 7fbae3ff bfebfbff
# VirtualBox 5.0.X
> VBoxManage modifyvm "ElCapitan" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff
 

# EFI
> VBoxManage setextradata "ElCapitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "MacBookPro11,3"
> VBoxManage setextradata "ElCapitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
> VBoxManage setextradata "ElCapitan" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple"
 

# SMC
> VBoxManage setextradata "ElCapitan" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
> VBoxManage setextradata "ElCapitan" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

# 0:640x480, 1:800x600, 2:1024x768, 3:1280x1024, 4:1440x900, 5:1920x1200
 > VBoxManage setextradata "ElCapitan" "VBoxInternal2/EfiGopMode" 4

3. 启动虚拟机 

启动虚拟机成功后, 
如果不能输入, 关闭虚拟机设置以下驱动, 后再启动..

Settings... - USB - USB Device Filters 

a) USB OPTICAL MOUSE
b) SIGMACHIP USB Keyboard

2016年5月25日星期三

Vmware / VirtualBox 相互转换

Vmware 转 VirtualBox 

1. 在 Vmware 转换 vmx 去 ovf 文件

File - Export to OVF - 选个地方放 ubuntu_1604_x64.ovf 文件

2. 等待转换完成..
 

3. 在 VirtualBox 开始导入 ubuntu_1604_x64.ovf 文件

File - Import Appliance... - Import Virtual Appliance 
- 选 ubuntu_1604_x64.ovf 文件的位置

4. 第 1 次导入 VirtualBox, 会出现错误 

Error reading "/Appliance.ovf": 
Host resource of type "Other Storage Device (20)" is supported 
with SATA AHCI controllers only, line 47.

用 Text Editor 打开
ubuntu_1604_x64.ovf 文件改字
- 将所有 "ElementName" 改为 "Caption"
- "vmware.sata.ahci" 改为 "AHCI"
 


5. 第 2 次导入 VirtualBox, 会出现错误

The SHA digest of 'ubuntu_1604_x64.ovf' does not match the one in 'ubuntu_1604_x64.mf' (VERR_MANIFEST_DIGEST_MISMATCH).

- ubuntu_1604_x64.mf 文件 


6. 第 3 次导入 VirtualBox... 成功了..

VirtualBox 转 Vmware

File -  Export Appliance... - 放 ubuntu_1604_x64.ova 位置
之后就可以在 Vmware 打开 ova 文件

2016年5月24日星期二

Docker - Tomcat

https://registry.hub.docker.com/_/tomcat/

$ docker run --name tomcat_server -d -p 8080:8080 tomcat:8.5.2-jre8


# 复制这个文件

$ docker cp tomcat_server:/usr/local/tomcat/conf/tomcat-users.xml /home/用户名

$ gedit /home/用户名/tomcat-users.xml

# 在里面添加
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui"/>

$ cd /home/用户名
$ mkdir docker_tomcat
$ mv tomcat-users.xml docker_tomcat

$ cd docker_tomcat

$ gedit Dockerfile

FROM tomcat:8.5.2-jre8

COPY tomcat-users.xml /usr/local/tomcat/conf/

# 编译成镜像 tomcat_conf

$ docker build -t tomcat_conf .

# 撤除容器
$ docker stop tomcat_server
$ docker rm tomcat_server


# 运行容器
$ docker run --name tomcat_server -d -p 8080:8080 tomcat_conf 

http://127.0.0.1:8080

2016年5月22日星期日

Linux - 在 context menu 增加程序链接

Nautilus-actions

1. 安装

$ su
$ apt-get install nautilus-actions  # ubuntu / debian
$ zypper install nautilus-actions   # OpenSUSE

http://www.rpmfind.net/linux/rpm2html/search.php?query=nautilus-actions
$ dnf install *.rpm   # fedora

2. 打开设置页

$ nautilus-actions-config-tool

3. 添加与设置


a) Action - Nautilus Item  
    - Display item in selection context menu
    - Display item in location context menu
    - Display item in the toolbar
    - Context label   显示的名字
    - Icon   图标
b) Command   命令
    - Path + Parameters
c) Mimetypes  文件类型
 
可以参考 /usr/share/applications/*.desktop

4. Save 记录操作 (也就是按添加图标的右边)

5. 退出, logout 或重启电脑就可看到效果了

Nemo 

$ sudo apt-get install nemo   # ubuntu / Linux Mint
$ sudo pacman -S nemo  # Arch Linux

例子: 
$ gedit /home/用户名/.local/share/nemo/actions/banshee.nemo_action

[Nemo Action]
Name=Enqueue in Banshee
Comment=Enqueue in Banshee
Quote=double
Exec=banshee --play-enqueued %F
Selection = any
Extensions=mp3;flac;ogg;

Linux - Python - pip 安装

Arch Linux

$ sudo pacman -S python-pip

Ubuntu / Debian

$ sudo apt-get install python-pip

Fedora 


$ su
$ dnf install python-setuptools
$ dnf upgrade python-setuptools
$ dnf install python-pip python-wheel

OpenSUSE


$ sudo zypper install python3-pip python3-setuptools python3-wheel

CentOS / RHEL

$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ python get-pip.py



$ su

$ yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
$ yum -y update
$ yum -y install python-pip


$ pip -V
$ pip install --upgrade pip

memcached 安装

Windows 

http://downloads.northscale.com/memcached-win32-1.4.4-14.zip
http://downloads.northscale.com/memcached-win64-1.4.4-14.zip
http://downloads.northscale.com/memcached-1.4.5-x86.zip
http://downloads.northscale.com/memcached-1.4.5-amd64.zip


memcached-1.4.5 以下的安装


c:\memcached\memcached.exe -d install

c:\memcached\memcached.exe -d start
c:\memcached\memcached.exe -d stop
"c:\memcached\memcached.exe" -d runservice -m 512


c:\memcached\memcached.exe -d uninstall

memcached-1.4.5 或以上的安装


schtasks /create /sc onstart /tn memcached /tr "'c:\memcached\memcached.exe' -m 512"
schtasks /delete /tn memcached

php.ini 需要添加


extension=php_memcache.dll
 


Linux

# 去 http://pecl.php.net 下载最新的包, 现在的是memcached-2.2.7.tgz
$ wget http://pecl.php.net/get/memcached-2.2.7.tgz
$ tar zxvf memcached-2.2.7.tgz
$ cd memcached-2.2.7


$ sudo apt-get install php7.0-dev   # 如果已安装 PHP 的话, 就跳过
$ phpize


$ ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config -with-zlib-dir


如果 libmemcached 是自己选定位置安装的,
那还要加上-with-libmemcached-dir=<DIR>

$ make && make install

PHP + memcached  整合


$ whereis php  # 找出 php.ini 的位置

$ gedit php.ini
extension=/usr/local/php/lib/php/extensions/xxx/memcached.so

$ php -m   # 会多出 memcached 模块


Python + memcached  整合

pip install python-memcached
pip install python3-memcached


python 代码 

import memcache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
mc.set("some_key", "Some value")
value = mc.get("some_key")
mc.set("another_key", 3)
mc.delete("another_key")
mc.set("key", "1")   # note that the key used for incr/decr must be a string.
mc.incr("key")
mc.decr("key")

2016年5月21日星期六

Windows - Docker 安装

Windows 版的 Docker

https://www.docker.com/products/docker-toolbox
https://github.com/docker/toolbox/releases/download/v1.11.1b/DockerToolbox-1.11.1b.exe

https://training.docker.com/self-paced-training

Windows 版 VirtualBox 运行 Linux, Docker 才能运行 (毕竟 Docker 出自 Linux),
之后你可以选择用有界面的 (Kitematic) 或直接用 docker 指令输入 (Terminal),
但发觉 Kitematic 并没有提示镜像是可以自己编译的,
所以, 我觉得花点时间学 docker 指令是必要的 

Linux - Docker 安装

Ubuntu

$ su
$ apt-get install curl
$ apt-get install docker.io


Linux Mint 18

$ su
$ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

$ gedit /etc/apt/sources.list.d/docker.list

# Ubuntu Xenial (16.04)

deb https://apt.dockerproject.org/repo ubuntu-xenial main

$ apt-get update
$ apt-get purge lxc-docker

# apt-get install linux-image-extra-$(uname -r)
$ apt-get install docker-engine 


Fedora 23

$ su
$ dnf update -y
$ dnf -y install docker-io
 

CentOS 7
 

$ su

$ yum install docker



# 安装较新版的 docker

$ gedit /etc/yum.repos.d/docker.repo

[virt7-docker-common-candidate]
name=virt7-docker-common-candidate
baseurl=http://cbs.centos.org/repos/virt7-docker-common-candidate/x86_64/os/
enabled=1
gpgcheck=0 


$ yum install docker --disablerepo=extras 

安装后..

# 将 username 加入, 让这个 ID 可以运行 docker
$ usermod -aG docker username


$ groupadd docker
$ gpasswd -a ${USER} docker
$ service docker restart 
 


$ systemctl start docker
$ systemctl enable docker


# 查看 docker 状况
$ systemctl status docker

# 关闭 docker
$ systemctl disable docker
$ systemctl stop docker  

Docker - PHP + memcached

Ubuntu - Docker - Nginx / PHP / MySql
http://jasonmun.blogspot.my/2016/05/ubuntu-docker-nginx-php-mysql.html

在弄 php-fpm-mysql 镜像的时候,
Dockerfile 文件中添加安装 memcached 模块

\
&& apt-get install -y libmemcached-dev \
&& pecl install memcached \
&& docker-php-ext-enable memcached

https://hub.docker.com/_/memcached

# 启动容器
$ docker run --name memcached-ct -d -p 11211:11211 memcached:1.4.25


# 如果是之后添加的, php-fpm-mod 和 nginx_server 都要撤除与重启
$ docker stop php-fpm-mod
$ docker rm php-fpm-mod
$ docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql
$ docker stop nginx_server
$ docker rm nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix

# 进入容器 php-fpm-mod 中
$ docker exec -it php-fpm-mod bash
$ php -m   # 可以找到 memcached 模块

# 测试
$ telnet 192.168.247.128 11211

Trying 192.168.247.128...
Connected to 192.168.247.128.
Escape character is '^]'.
set id 0 0 4
1234
STORED
get id
VALUE id 0 4
1234
END

quit
 

PHP 代码 
<?php
    $memcache = new Memcache;
    $memcache->connect("192.168.247.128",11211);

    echo "Server's version: " . $memcache->getVersion() . "<br />\n";

    $testArray = array('horse', 'cow', 'pig');
    $tmp = serialize($testArray);

    $memcache->add("key", $tmp, 30);

    echo "Data from the cache:<br />\n";
    print_r(unserialize($memcache->get("key")));
?>

2016年5月20日星期五

Ubuntu - Docker - Nginx / PHP / MySql + phpmyadmin

1. mysql_data 和 wwwroot 
(用这可以避免当 mysql 更换时, 再输入资料)

https://hub.docker.com/_/busybox/

$ docker run --name=mysql_data -v /var/lib/mysql -d busybox echo MySQL Data
$ cd /home/用户名
$ mkdir www
$ docker run --name=wwwroot -v /home/用户名/www:/var/www/html -d busybox echo wwwroot


* 这 2 个容器不需要开启, 因它们只是用作挂载主机的文件夹到容器中而已

2. Mysql Server 5.5 (3306/tcp)

https://hub.docker.com/_/mysql/

# mysql - 设置密码
$ docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
# mysql - 设置空密码
$ docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -d mysql:5.5

# 进入容器 mysql
$ docker exec -it mysql_server bash

$ mysql -uroot -p123456


mysql> create database test_db;
mysql> create table student (name VARCHAR(20), age INT(10));
mysql> insert into student (name, age) values ("Andrew", "40"); 
mysql> quit

$ exit  # 退出回主机

# 检查容器 mysql_server 有没有 up
$ docker ps -a
$ docker start mysql_server 

3. php-fpm-mod - php-fpm 5.6.19 加入一些 mysql 模块
制作成 php-fpm-mysql 镜像 (9000/tcp)
 
https://hub.docker.com/_/php/

$ cd /home/用户名
$ mkdir dockerfile_php
$ cd dockerfile_php
$ gedit Dockerfile
 

# 应可以改去 php:5.6.21-fpm, 但 php:7-fpm 会有些模块不能安装
FROM php:5.6.19-fpm

# Install modules
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-configure mysqli --with-mysqli=mysqlnd  \
    && docker-php-ext-install mysqli  \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd  \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-configure mysql --with-mysql=mysqlnd  \
    && docker-php-ext-install mysql

CMD ["php-fpm"]

# 编译镜像 php-fpm-mysql

$ docker build -t php-fpm-mysql /home/用户名/dockerfile_php
$ docker images
# 运行容器 php-fpm-mod

$ docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql

$ docker exec -it php-fpm-mod cat /etc/hosts
172.17.0.2    mysql ad0d03214936 mysql_server  
# 从这里知道 mysql_server 的 IP
172.17.0.3    f20cb9377b85


# 在 php-fpm-mod 测试 mysql

$ docker exec -it php-fpm-mod ping -c 3 mysql 

# 检查容器 php-fpm-mod 有没有 up
$ docker ps -a
$ docker start php-fpm-mod 
 
4. 准备3个测试文件

$ gedit /home/用户名/www/index.html

<html>
<head>
<title>Testing</title>
</head>
<body>
Testing
</body>
</html>

$ gedit /home/用户名/www/index.php

<?php
phpinfo();
?>

$ gedit /home/用户名/www/mysql.php
 

<?php
$con = mysql_connect("172.17.0.2","root","123456");

if (!$con) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("test_db", $con);

$result = mysql_query("SELECT * FROM student");
while($row = mysql_fetch_array($result)) {
    echo $row['name'] . " " . $row['age'];
    echo "<br />";
}
mysql_close($con);
?>

5. Nginx Server (因要改设置文件, 所以要制作 nginx-fix 镜像)

https://hub.docker.com/_/nginx/

# 可以先运行容器 nginx_server, 备份里面的 /etc/nginx/conf.d/default.conf
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx 
$ docker cp nginx_server:/etc/nginx/conf.d/default.conf /home/用户名/default-ori.conf 
$ docker stop nginx_server
$ docker rm nginx_server  # 撤容器 nginx_server

 
# 准备编译 nginx-fix-0 镜像
$ cd /home/用户名
$ mkdir dockerfile_nginx

# 准备 nginx 设置文件
$ gedit /home/用户名/dockerfile
_nginx/default.conf

server {
    listen 80;

    root /var/www/html;
    index index.html index.htm index.php;

    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

# 准备 Dockerfile 编译镜像
$ gedit /home/用户名/dockerfile
_nginx/Dockerfile

FROM nginx
COPY default.conf /etc/nginx/conf.d/

# 编译镜像 nginx-fix-0
$ docker build -t nginx-fix-0 /home/用户名/dockerfile
_nginx
$ docker images

# 运行容器 nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix-0

如果现在去浏览 http://127.0.0.1/index.php   # 用 ifconfig 找 IP
会发现空白一片


以下开始 Fix 问题..
 
# $ docker exec -it nginx_server cat /etc/nginx/fastcgi_params
# 容器 nginx_server 中复制 fastcgi_params 出来
$ docker cp nginx_server:/etc/nginx/fastcgi_params /home/用户名/dockerfile
_nginx 
$ docker stop nginx_server
$ docker rm nginx_server  # 撤容器 nginx_server

$ docker rmi nginx-fix-0   # 镜像 nginx-fix-0

# 在 fastcgi_params 中添加一行
$ gedit /home/用户名/dockerfile
_nginx/fastcgi_params

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
# 添加这行以解决空白页的问题
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

# 修改 Dockerfile, 添加 fastcgi_params 文件
$ gedit /home/用户名/dockerfile
_nginx/Dockerfile

FROM nginx
COPY default.conf /etc/nginx/conf.d/
COPY fastcgi_params /etc/nginx/


# 重新编译镜像 nginx-fix
$ docker build -t nginx-fix /home/用户名/dockerfile
_nginx
$ docker images

# 再运行容器 nginx_server
$ docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix


# 检查容器 nginx_server 有没有 up
$ docker ps -a
$ docker start nginx_server   

6. phpmyadmin (8080/tcp)

$ docker run --name phpmyadmin --link mysql_server -e PMA_HOST=mysql_server -p 8080:80 -d phpmyadmin/phpmyadmin

这个要用 http://127.0.0.1:8080
 
7. 开关容器程序 (不一定要用 docker-compose)

$ gedit control.sh

if [ `docker ps -a | grep -c "mysql_data"` -eq 0 ]
then
      var1=`docker run --name=mysql_data -v /var/lib/mysql -d busybox echo MySQL Data`
fi

if [ `docker ps -a | grep -c "wwwroot"` -eq 0 ]

then
      var1=`docker run --name=wwwroot -v /home/用户名/www:/var/www/html -d busybox echo wwwroot`
fi

if [ `docker ps -a | grep -c "mysql_server"` -eq 0 ]

then
      var1=`docker run --name=mysql_server --volumes-from mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5`
fi

if [ `docker ps -a | grep -c "php-fpm-mod"` -eq 0 ]

then
      var1=`docker run --name php-fpm-mod --volumes-from wwwroot --link mysql_server:mysql -d php-fpm-mysql`
fi

if [ `docker ps -a | grep -c "nginx_server"` -eq 0 ]

then
      var1=`docker run --name=nginx_server --volumes-from wwwroot --link php-fpm-mod:php -p 80:80 -d nginx-fix`
      var1=`docker stop nginx_server`
fi

var=`docker ps`

if [ `echo $var | grep -c "80/tcp" ` -gt 0 ]
then
  var1=`docker stop nginx_server`
  var1=`docker rm nginx_server`

  if [ `echo $var | grep -c "9000/tcp" ` -gt 0 ]
  then
      var1=`docker stop php-fpm-mod`
      var1=`docker rm php-fpm-mod` 
  fi

  if [ `echo $var | grep -c "3306/tcp" ` -gt 0 ]
  then
      var1=`docker stop mysql_server`
      var1=`docker rm mysql_server`
  fi

else
  var1=`docker start mysql_server`

  if [ `echo $var | grep -c "9000/tcp" ` -eq 0 ]
  then
      var1=`docker start php-fpm-mod`
  fi

  if [ `echo $var | grep -c "80/tcp" ` -eq 0 ]
  then
      var1=`docker start nginx_server`
  fi
fi

var=`docker ps`
echo "$var"


$ ./control.sh