Deepin 使用记录

本文是在我安装好 Deepin 15.5 之后做的系统环境初始化记录。方便以后安装新系统直接按照以前的习惯初始化环境。其中包含基础环境配置,和常见服务安装,如
Redis 等。

操作系统 Deepin 15.5

1
2
sudo modprobe psmouse  ##启用触摸板
sudo rmmod psmouse ##禁用触摸板

取消搜狗輸入法快捷鍵

修改 apt 源为 清华源

1
2
3
4
## Generated by deepin-installer
deb [by-hash=force] https://mirror.tuna.tsinghua.edu.cn/deepin/ panda main contrib non-free
# deb [by-hash=force] http://packages.deepin.com/deepin panda main contrib non-free
#deb-src http://packages.deepin.com/deepin panda main contrib non-free

使用 ll 命令

如果有需要也可以修改 root 目录中的,这样sudo下也可以使用

vim ~/.bashrc

1
2
3
4
# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
#alias l='ls -CF'

升级 python 为 3.6

修改 python3 命令默认使用 python3.6

1
2
3
cd /usr/bin/
rm -rf python3
ln -s python3.6 python3

注意:python 默认是软连接到 python2.x 上的,不可以把 python 作为默认使用 python3.x。如果这样可以的话那 Linux 就没有存在 python2.x 的意义了。但是由于 Linux 起源和 python 比较早,致使现在 Linux 系列都依赖于 python2。如果更改或者卸载 python2 会造成系统问题。

安装 python3-pip

1
sudo apt install python3-pip

配置 pip 使用清华源

1
2
mkdir ~/.pip
vim ~/.pip/pip.conf
1
2
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

配置 root 用户使用

1
sudo cp -r ~/.pip /root/

创建 pip 链接 pip3

1
2
cd /usr/bin/
ln -s pip3 pip

注意:使用 pip 安装,默认会安装到家目录 ~/.local/ 下面,包会在 .local/lib/ 对应 python 版本。也会在 .local/bin/ 生成对应的可执行文件。
而使用 sudo pip install 则会装在 /usr/local/lib/ 对应的 python 版本下。
这里的python版本为你安装 pip 时的版本

安装 virtualenv

1
sudo pip install virtualenv

安装 shadowsocks 客户端

1
sudo pip install shadowsocks

创建 ss 配置文件

sudo vim /etc/shadowsocks.conf

1
2
3
4
5
6
7
{"server" : "IP",
"server_port" : 8388,
"password" : "pass",
"method" : "aes-256-cfb",
"local_address":"127.0.0.1",
"localPort" : 1080,
"timeout":120}

运行 sslocal -c /etc/shadowsocks.conf

意外问题

  1. AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

错误重现

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
$ sslocal -c /etc/shadowsocks.conf
INFO: loading config from /etc/shadowsocks.conf
2018-03-24 00:31:11 INFO loading libcrypto from libcrypto.so.1.1
Traceback (most recent call last):
File "/usr/local/bin/sslocal", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/local.py", line 39, in main
config = shell.get_config(True)
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/shell.py", line 262, in get_config
check_config(config, is_local)
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/shell.py", line 124, in check_config
encrypt.try_cipher(config['password'], config['method'])
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/encrypt.py", line 44, in try_cipher
Encryptor(key, method)
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/encrypt.py", line 83, in __init__
random_string(self._method_info[1]))
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/encrypt.py", line 109, in get_cipher
return m[2](method, key, iv, op)
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/crypto/openssl.py", line 76, in __init__
load_openssl()
File "/usr/local/lib/python3.6/dist-packages/shadowsocks/crypto/openssl.py", line 52, in load_openssl
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
File "/usr/lib/python3.6/ctypes/__init__.py", line 361, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python3.6/ctypes/__init__.py", line 366, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

错误解决:安装shadowsocks服务报错问题

这个问题是由于在openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup函数,如官网中所说:

1
EVP_CIPHER_CTX was made opaque in OpenSSL 1.1.0. As a result, EVP_CIPHER_CTX_reset() appeared and EVP_CIPHER_CTX_cleanup() disappeared.
1
EVP_CIPHER_CTX_init() remains as an alias for EVP_CIPHER_CTX_reset(). 

修改方法:

  1. 用vim打开文件:

    vim /usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py

    (该路径请根据自己的系统情况自行修改,如果不知道该文件在哪里的话,可以使用find命令查找文件位置)

  2. 跳转到52行(shadowsocks2.8.2版本,其他版本搜索一下cleanup)

  3. 进入编辑模式

  4. 将第52行

    libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)

    改为

    libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)

  5. 再次搜索cleanup(全文件共2处,此处位于111行),将

    libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx)
    改为

    libcrypto.EVP_CIPHER_CTX_reset(self._ctx)

  6. 保存并退出

  7. 启动shadowsocks服务:service shadowsocks start 或 sslocal -c ss配置文件目录

  8. 问题解决

配置 Chrome 使用 代理

下载 Chrome 扩展程序

http://note.youdao.com/noteshare?id=ee6e65186fd5a78358a3d503e95c4746

下载扩展程序备份数据

http://note.youdao.com/noteshare?id=8042047a6a81df37c561165c9775c6e4

  1. Chrome 扩展安装

    在 Chrome 中 按下 Alt + E 组合键,更多工具 ==> 扩展程序;或者直接浏览器输入 chrome://extensions/

    打开 扩展程序 ,将下载的插件拖入页面以安装插件。

    安装完成后打开插件,选择导入/导出 ==> 从备份文件恢复

    然后选择下载的扩展程序备份数据。

  2. 使用插件

    浏览器右上角点击插件图标,选择 auto switch ,浏览器打开谷歌应该可以访问了。

安装 JDK

配置 JAVA 环境变量

1
2
3
4
# JAVA ENV
JAVA_HOME=/usr/local/share/jdk1.8.0_161
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin

安装 Idea Pycharm

配置桌面启动器

cd /usr/share/applications

vim idea.desktop

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Version=1.0
Name=Ieda
Comment=this is idea
Exec=/opt/software/idea-IU-173.4674.33/bin/idea.sh
Icon=/opt/software/idea-IU-173.4674.33/bin/idea.png
Terminal=false
Type=Application
Categories=Development

Pycharm 相同

安装便签

安装 Docker

免sudo使用docker命令

如果还没有 docker group 就添加一个:

1
sudo groupadd docker

将用户加入该 group 内。然后退出并重新登录就生效啦。

1
sudo gpasswd -a ${USER} docker

重启 docker 服务

1
sudo service docker restart

切换当前会话到新 group 或者重启 X 会话

1
newgrp - docker

注意:最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以 docker images 执行时同样有错。

安装 Redis

注意:下面的操作和给出链接的安装目录不一样,切勿两边操作。

  1. 下载 http://redis.io/download

  2. 解压

    1
    tar -zxvf ~/Downloads/redis-3.2.11.tar.gz -C /tmp/
  3. 编译并安装

编译:

1
2
cd /tmp/redis-3.2.11/
sudo make

最后几行的输出

1
2
3
4
5
6
7
8
9
10
    CC redis-benchmark.o
LINK redis-benchmark
INSTALL redis-check-rdb
CC redis-check-aof.o
LINK redis-check-aof

Hint: It's a good idea to run 'make test' ;)

make[1]: Leaving directory '/tmp/redis-3.2.11/src'

编译测试:

1
2
sudo make test

注意: 如果在 make test 出现 You need tcl 8.5 or newer in order to run the Redis test 这个错误,
请参考 https://blog.csdn.net/luyee2010/article/details/18766911 后,执行如下操作

1
2
3
4
5
6
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz 
sudo tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
cd /usr/local/tcl8.6.1/unix/
sudo ./configure
sudo make
sudo make install

编译测试最后输出

1
2
3
4
5
6
7
8
9
10
  79 seconds - integration/replication
54 seconds - unit/geo
113 seconds - unit/type/list-3
102 seconds - integration/replication-psync
99 seconds - unit/obuf-limits

\o/ All tests passed without errors!

Cleanup: may take some time... OK
make[1]: Leaving directory '/tmp/redis-3.2.11/src'

安装:

1
sudo make install PREFIX=/usr/local/share/redis

这里 PREFIX 为指定安装到该位置。要确保对这个目录有写入权限。
输出

1
2
3
4
5
6
7
8
9
10
11
12
cd src && make install
make[1]: Entering directory '/tmp/redis-3.2.11/src'

Hint: It's a good idea to run 'make test' ;)

INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory '/tmp/redis-3.2.11/src'

增加配置文件:

1
2
mkdir /usr/local/share/redis/ect/
sudo cp /tmp/redis-3.2.11/redis.conf /usr/local/share/redis/ect/
字段名 含义
daemonize 如需要在后台运行,把该项的值改为yes
pdifile 把pid文件放在/var/run/redis.pid,可以配置到其他地址
bind 指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
port 监听端口,默认为6379
timeout 设置客户端连接时的超时时间,单位为秒
loglevel 等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
logfile 配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
database 设置数据库的个数,默认使用的数据库是0
save 设置redis进行数据库镜像的频率
rdbcompression 在进行镜像备份时,是否进行压缩
dbfilename 镜像备份文件的文件名
dir 数据库镜像备份的文件放置的路径
slaveof 设置该数据库为其他数据库的从数据库
masterauth 当主数据库连接需要密码验证时,在这里设定
requirepass 设置客户端连接后进行任何其他指定前需要使用的密码
maxclients 限制同时连接的客户端数量
maxmemory 设置redis能够使用的最大内存
appendonly 开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
appendfsync 设置appendonly.aof文件进行同步的频率
vm_enabled 是否开启虚拟内存支持
vm_swap_file 设置虚拟内存的交换文件的路径
vm_max_momery 设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
vm_page_size 设置虚拟内存页的大小
vm_pages 设置交换文件的总的page数量
vm_max_thrrads 设置vm IO同时使用的线程数量

编写 redis 启动文件

sudo vim /etc/systemd/system/redis.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit] 
Description=redis
After=network.target

[Service]
# Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/share/redis/bin/redis-server /usr/local/share/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

可参考 Systemctl 管理 Redis

其他问题

1
28769:M 24 Mar 23:49:14.920 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

这个警告,可以参照警告描述操作

1
28769:M 24 Mar 23:49:14.920 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

这个警告,分两步操作。

第一步:

sudo echo never > /sys/kernel/mm/transparent_hugepage/enabled

第二步:

1
sudo touch /etc/rc.local

关于创建该文件可以参考 自启动程序

然后编辑该文件,加入

1
2
3
4
5
#!/bin/sh

if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
fi

这一步是在开机自启的时候,检测第一步操作的文件内容是否为 never 然后写入更改。讲白了就是做到开机禁用

参考 透明大叶介绍

安装 Mariadb