把自己的代码环境, 迁移新的 Deepin 发行版, 记录了一些常用库和工具的安装参考.
以前的老系统, 由于系统太老, 有时候安装软件真的非常不适合. 我个人开发一直使用linux(Ubuntu64), 主要用terminal(emacs -nw). 所以要换一个稳定, 新一点儿的系统; 考虑了ubuntu麒麟, 16, 17, 不得不说, 一点儿也不好用, 支持的非常差. 原版的ubuntu也是, 系统有时动不动就内部错误(Ubuntu可能会突然告诉你已经不提供软件更新了, 请升级到17.04; 然后你升级的时候又引来内部错误).
正好 武汉深之度
开发的 deepin
近来大家伙好评不断, 所以, 我就来试试.
引子
为什么换deepin? 原系统 和 deepin对比如下, 不多解释了.
(好吧还是说一下,它的这个terminal
太棒了;后期发现和emacs有些键可能冲突, 改以下就好了)
真正一个好的环境, 仅仅从一个技术人员触发, 至少具备3点:
- 开发舒服(效率高和个人水平有关)
- 看源码舒服(特别是源码庞大, 调用复杂时)
- debug舒服
安装deepin
这里我装的是虚拟机.
电脑的原配操作系统win10专业版, 所以一般不改变, 主要工作环境全部放在虚拟机里面, 一来编程对机器要求不是太高, 而来虚拟机文件也方便在电脑间移植.
虚拟机里安装deepin很简单: 原来怎么安装ubuntu_amd64, 这里就怎么装deepin, 并且操作习惯也不用改, 和debain系列一致.
安装完, 先升级一下系统 sudo apt-get dist-upgrade
或者可能也需要 sudo apt-get update
和 sudo apt-get upgrade
.
下面开始安装主要工作软件以及环境配置.
emacs
最先安装的就是emacs, 不然后面很捉急.
1 | $ sudo apt-get install emacs25 |
不过我使用的时候, 一般都是不带界面的emacs, 习惯了; 所以去加一个alias.
现在.bashrc
结尾面添加一个语句($ nano .bashrc
)
1 | if [ -f ~/.merlin_bash ]; then |
保存之后建立一个.merlin_bash
文件:1
2
3
4
5
6
7
8
9
10
11# here we confiure some alias and environment info
# 1. alias
# 2. environmen path
# my alias
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias em='emacs -nw'
(重新打开以下终端或者source .bashrc)
现在可以使用emacs了, 还不错哦.
关于emacs的配置, 请看我的另外一篇 文章.
如果你不配置emacs
, 基本呵呵, 不配置除非你是神(要求你水平非常高), 不然很难用的顺手.
以后的所有配置,都在.merlin_bash文件中.
rm绑定
rm命令已经引起无数次灾害了(深受其害!!), 这东西不处理不行. 如果在UI界面放入Trash, 那么会在~/.local/share/Trash/
的两个子目录进行如下操作:
- 把具体的文件放入files目录
- info目录里以文件相同的filename保存删除的信息
1
2
3[Trash Info]
Path=/home/merlin/Desktop/test/ideaIC-2017.2.3.tar.gz
DeletionDate=2017-08-31T17:15:09
所以我们的rm命令可以简单的用来把东西移动到Trash目录, 但不写入Info信息(而是添加尾缀时间戳), 以此区分是用rm命令删除的, 代码很简单(要考虑一下连续重复删除同一个文件, 删除的目录和文件同名等情况):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20## rm related
trash()
{
TRASH_DIR="/home/merlin/.local/share/Trash/files"
RF="-rf"
R="-r"
F="-f"
if [ "$1" == ${RF} -o "$1" == ${R} -o "$1" == ${F} ] ; then
shift
fi
for i in $*; do
FILENAME=`basename $i`
STAMP=`date +%s`
mv -f "$i" ${TRASH_DIR}/${FILENAME}.${STAMP}
done
}
alias rm=trash
bashrc文件
德国人有一个造车时, 有一个思想, 这个思想用中国谚语说就是 工欲善其事必先利其器
.
有一些常用命令, 来弄个别名吧, 编辑.merlin_bash
:
1 | here we confiure some alias and environment info |
差不多就这样了.
wget
想下载东西, wget和curl必不可少(wget常用于下载, curl常用于调试RESTful)1
2$ add wget
$ add curl
git
没有git几乎无法生存, 想要去拉个库, 晕,没有安装git.
1 | $ add git |
看一下版本, 还挺新的.1
2$ git --version
git version 2.11.0
配置一下自己的信息:1
2$ git config --global user.name "xxx"
$ git config --global user.email "yyy"
ssh
本机其实已经安装了ssh工具, 并且我也可以远程到我的remote服务器:1
2# 一般默认22端口
$ ssh username@address
但是本机是否允许别的机器远程呢? 还是配置一下, 允许远程登录1
2$ ls /etc/ssh
moduli ssh_config
自己建议一个文件sshd_config
, 配置ssh-server,配置文件位于/etc/ssh/sshd_config, 默认端口为22, 为了安全, 一般自定义为其他端口.
修改配置文件sshd_config, 一般修改远程登录过来的端口, 允许的账户, 超时是否断开.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
221. 配置端口:
Port 22 配置端口时你可以修改称自己想要的比方说23333,防止被端口扫描.
2. 配置是否允许远程root账户登录
(但是你登录后可以su到root账户)
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
一般可以禁止远程root账户登录.
3. 避免超时自动断开
# keep alive within an hour if no operation happened of client
ClientAliveInterval 60
ClientAliveCountMax 60
注意:
每次一次配置都要重启sshd守护进程: service ssh restart
(我这边儿重启sshd,提示unrecognized service)
关于sshd的启动:
首先确保ssh服务已经安装, 检查服务是否已经启动1
ps -e | grep sshd
启动、停止、重启服务1
2
3$ service sshd start #开启ssh服务
$ service sshd stop #停止ssh服务
$ service sshd restart #重启ssh服务
或者使用带有路径的脚本:1
2
3/etc/init.d/sshd start
/etc/init.d/sshd stop
/etc/init.d/restart
产生ssh_key
步骤很简单, 但是我劝你还是采用HTTPS实时的输入账号密码验证上传和下载; 不要使用ssh key(任何一个登录到你电脑的人可以随便弄你的库, 多可怕).1
2
3# 如果~/.ssh下已经有了秘钥文件则不必生成
$ ssh-keygen -t rsa -C "your_email@example.com"
(直接回车什么都不做)
在~/.ssh/得到了两个文件:id_rsa和id_rsa.pub, 打开id_rsa.pub文件,里面的信息即为SSH key; 在github上把公钥贴到SSH Key认证的位置, 那么凡是走ssh协议的传入, 你都可以不用密码了.
当然如果你把自己的公钥id_rsa.pub
拷贝到别人的authorized_keys
文件内, 然后你ssh登录别人的电脑就不用认证密码了(但是你scp拷贝的这一回, 还是要输入登录到别人电脑的密码). 例如把我的公钥拷贝到xxx_ip地址的主机上, 登录那台电脑的用户名是yyy.1
2
3scp -r ~/.ssh/id_rsa.pub xxx_ip:/home/yyy/.ssh/authorized_keys
# 然后输入用户yyy的密码, 拷贝成功的话, 下次你登录xxx_ip这台电脑, 就不要密码了, 直接即可
$ ssh xxx_ip
locate
真的要是要什么没有什么.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22$ add locate
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
libfile-copy-recursive-perl update-inetd
使用'sudo apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
locate
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 212 kB 的归档。
解压缩后会消耗 322 kB 的额外空间。
获取:1 http://packages.deepin.com/deepin panda/main amd64 locate amd64 4.6.0+git+20161106-2 [212 kB]
已下载 212 kB,耗时 0秒 (278 kB/s)
正在选中未选择的软件包 locate。
(正在读取数据库 ... 系统当前共安装有 153643 个文件和目录。)
正准备解包 .../locate_4.6.0+git+20161106-2_amd64.deb ...
正在解包 locate (4.6.0+git+20161106-2) ...
正在设置 locate (4.6.0+git+20161106-2) ...
正在处理用于 man-db (2.7.6.1-2) 的触发器 ...
$ sudo updatedb
tree
1 | $ add tree |
gcc
gcc的版本很给力, 但是有时候为了某些方便, 我还需要装一个低版本的.1
2
3
4
5
6
7
8$ gcc --version
gcc (Debian 6.3.0-11) 6.3.0 20170321
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ locate gcc | grep -E "/usr/bin/gcc-[0-9]"
/usr/bin/gcc-6
安装4.8, 4.9, 5.0版本的gcc1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20$ add gcc-4.8 gcc-4.9 gcc-5
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
libfile-copy-recursive-perl update-inetd
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
cpp-4.8 cpp-4.9 cpp-5 libasan0 libasan1 libasan2 libcloog-isl4 libgcc-4.8-dev libgcc-4.9-dev libgcc-5-dev libmpx0
建议安装:
gcc-4.8-locales gcc-4.9-locales gcc-5-locales gcc-4.8-multilib gcc-4.8-doc libgcc1-dbg libgomp1-dbg libitm1-dbg
libatomic1-dbg libasan0-dbg libtsan0-dbg libquadmath0-dbg gcc-4.9-multilib gcc-4.9-doc libasan1-dbg liblsan0-dbg
libubsan0-dbg libcilkrts5-dbg gcc-5-multilib gcc-5-doc libasan2-dbg libmpx0-dbg
下列【新】软件包将被安装:
cpp-4.8 cpp-4.9 cpp-5 gcc-4.8 gcc-4.9 gcc-5 libasan0 libasan1 libasan2 libcloog-isl4 libgcc-4.8-dev libgcc-4.9-dev
libgcc-5-dev libmpx0
升级了 0 个软件包,新安装了 14 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 42.6 MB 的归档。
解压缩后会消耗 141 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
安装完成之后, sudo updatedb
, 然后查看一下相应的版本1
2
3
4
5
6
7
8
9
10
11$ locate gcc | grep -E "/usr/bin/gcc-[0-9]"
/usr/bin/gcc-4.8
/usr/bin/gcc-4.9
/usr/bin/gcc-5
/usr/bin/gcc-6
$ gcc --version
gcc (Debian 6.3.0-11) 6.3.0 20170321
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
然后利用 update-alternatives
建立文件关联(当然你也可以自己建立软链接):1
2
3
4
5
6
7
8
9
10# 首先要让系统知道我们安装了多个版本的gcc
# 命令最后的 20和50是优先级,如果使用auto选择模式,系统将默认使用优先级高的
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
update-alternatives: 使用 /usr/bin/gcc-4.8 来在自动模式中提供 /usr/bin/gcc (gcc)
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 30
update-alternatives: 使用 /usr/bin/gcc-4.9 来在自动模式中提供 /usr/bin/gcc (gcc)
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 40
update-alternatives: 使用 /usr/bin/gcc-5 来在自动模式中提供 /usr/bin/gcc (gcc)
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 50
update-alternatives: 使用 /usr/bin/gcc-6 来在自动模式中提供 /usr/bin/gcc (gcc)
再查看一下当前系统中安装的gcc有哪些:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$ sudo update-alternatives --query gcc
Name: gcc
Link: /usr/bin/gcc
Status: auto
Best: /usr/bin/gcc-6
Value: /usr/bin/gcc-6
Alternative: /usr/bin/gcc-4.8
Priority: 20
Alternative: /usr/bin/gcc-4.9
Priority: 30
Alternative: /usr/bin/gcc-5
Priority: 40
Alternative: /usr/bin/gcc-6
Priority: 50
想切换默认的gcc可以使用修改优先值的方式:1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60
或者交互的方式:
update-alternatives 还可以用于配置多版本的Java或者Python等.
当然你配置gcc的时候, 也可以顺带配置一下, gcc需要调用的binuitls, 比如 ar, nm, ranlib等(当然也可以配置对应版本的g++), 使用--slave
选项.1
2
3
4
5$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 \
--slave /usr/bin/g++ g++ /usr/bin/g++-5 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-5 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-5 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-5
g++
有些软件的安装, 需要其他的软件或者库; 如果那个工具&库你经常用, 最好不要让它顺便给你装, 比如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$ add build-essential
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
libfile-copy-recursive-perl update-inetd
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
g++ g++-6
建议安装:
g++-multilib g++-6-multilib gcc-6-doc libstdc++6-6-dbg
下列【新】软件包将被安装:
build-essential g++ g++-6
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 7,096 kB 的归档。
解压缩后会消耗 24.5 MB 的额外空间。
您希望继续执行吗? [Y/n] n
中止。
我自己装g++
, 因为我可能要在多个版本的c++编译器间切换.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21$ search "g\+\+-[0-9]" | less
$ add g++-4.9 g++-5 g++-6
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
libfile-copy-recursive-perl update-inetd
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
libstdc++-4.9-dev libstdc++-5-dev
建议安装:
g++-4.9-multilib gcc-4.9-doc libstdc++6-4.9-dbg g++-5-multilib gcc-5-doc libstdc++6-5-dbg g++-6-multilib gcc-6-doc
libstdc++6-6-dbg libstdc++-4.9-doc libstdc++-5-doc
下列【新】软件包将被安装:
g++-4.9 g++-5 g++-6 libstdc++-4.9-dev libstdc++-5-dev
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 35.8 MB 的归档。
解压缩后会消耗 106 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ sudo updatedb
然后用update-alternatives
来配置一下:1
2
3$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 30
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 40
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 50
然后query检查一下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21$ sudo update-alternatives --query g++
Name: g++
Link: /usr/bin/g++
Status: auto
Best: /usr/bin/g++-6
Value: /usr/bin/g++-6
Alternative: /usr/bin/g++-4.9
Priority: 30
Alternative: /usr/bin/g++-5
Priority: 40
Alternative: /usr/bin/g++-6
Priority: 50
$ g++ --version
g++ (Debian 6.3.0-11) 6.3.0 20170321
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
build-essential
先查看一下依赖:1
2
3
4
5
6
7
8
9
10$ depends build-essential
build-essential
|依赖: libc6-dev
依赖: <libc-dev>
libc6-dev
依赖: gcc
依赖: g++
依赖: make
make-guile
依赖: dpkg-dev
先看一下哪些没有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# 先更新一下本机数据
$ update
$ upgrade
$ policy libc6-dev
libc6-dev:
已安装:2.24-9
候选: 2.24-9
版本列表:
*** 2.24-9 500
500 http://packages.deepin.com/deepin panda/main amd64 Packages
100 /var/lib/dpkg/status
$ policy make
make:
已安装:4.1-9.1
候选: 4.1-9.1
版本列表:
*** 4.1-9.1 500
500 http://packages.deepin.com/deepin panda/main amd64 Packages
100 /var/lib/dpkg/status
$ policy make-guile
make-guile:
已安装:(无)
候选: 4.1-9.1
版本列表:
4.1-9.1 500
500 http://packages.deepin.com/deepin panda/main amd64 Packages
$ policy dpkg-dev
dpkg-dev:
已安装:1.18.23
候选: 1.18.23
版本列表:
*** 1.18.23 500
500 http://packages.deepin.com/deepin panda/main amd64 Packages
500 http://packages.deepin.com/deepin panda/main i386 Packages
100 /var/lib/dpkg/status
那就安装一下make-guile
: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$ search "make-guile*"
make-guile - utility for directing compilation with guile support
$ add "make-guile"
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
guile-2.0-libs
建议安装:
make-doc
下列软件包将被【卸载】:
make
下列【新】软件包将被安装:
guile-2.0-libs make-guile
升级了 0 个软件包,新安装了 2 个软件包,要卸载 1 个软件包,有 0 个软件包未被升级。
需要下载 2,536 kB 的归档。
解压缩后会消耗 11.8 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ sudo updatedb
$ make-guile --version
bash: make-guile: 未找到命令
$ locate make-guile
/usr/share/doc/make-guile
/usr/share/doc/make-guile/ABOUT-NLS.gz
/usr/share/doc/make-guile/AUTHORS
/usr/share/doc/make-guile/Explanations.gz
/usr/share/doc/make-guile/NEWS.Debian.gz
/usr/share/doc/make-guile/NEWS.gz
/usr/share/doc/make-guile/README.Debian-Source
/usr/share/doc/make-guile/README.customs.gz
/usr/share/doc/make-guile/README.gz
/usr/share/doc/make-guile/changelog.Debian.gz
/usr/share/doc/make-guile/copyright
/var/cache/apt/archives/make-guile_4.1-9.1_amd64.deb
/var/lib/dpkg/info/make-guile.list
/var/lib/dpkg/info/make-guile.md5sums
再装build-essential
: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$ add build-essential
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
g++
建议安装:
g++-multilib
下列【新】软件包将被安装:
build-essential g++
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 8,890 B 的归档。
解压缩后会消耗 35.8 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
获取:1 http://packages.deepin.com/deepin panda/main amd64 g++ amd64 4:6.3.0-2 [1,544 B]
获取:2 http://packages.deepin.com/deepin panda/main amd64 build-essential amd64 12.3 [7,346 B]
已下载 8,890 B,耗时 6秒 (1,466 B/s)
正在选中未选择的软件包 g++。
(正在读取数据库 ... 系统当前共安装有 156361 个文件和目录。)
正准备解包 .../g++_4%3a6.3.0-2_amd64.deb ...
正在解包 g++ (4:6.3.0-2) ...
正在选中未选择的软件包 build-essential。
正准备解包 .../build-essential_12.3_amd64.deb ...
正在解包 build-essential (12.3) ...
正在设置 g++ (4:6.3.0-2) ...
update-alternatives: 使用 /usr/bin/g++ 来在自动模式中提供 /usr/bin/c++ (c++)
正在设置 build-essential (12.3) ...
这么看来policy
可能后面的dpkg
工具可能和update-alternatives
有点儿误会, 手动调整一下: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$ sudo update-alternatives --config g++
有 3 个候选项可用于替换 g++ (提供 /usr/bin/g++)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/bin/g++-6 50 自动模式
1 /usr/bin/g++-4.9 30 手动模式
2 /usr/bin/g++-5 40 手动模式
3 /usr/bin/g++-6 50 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:
update-alternatives: 警告: 链接组 g++ 已损坏,故强制重新安装候选项 /usr/bin/g++-6
$ ls /usr/bin/g++*
/usr/bin/g++ /usr/bin/g++-4.9 /usr/bin/g++-5 /usr/bin/g++-6
merlin@merlin-deepin:~$ ll /usr/bin/g++
$ sudo update-alternatives --config g++
有 3 个候选项可用于替换 g++ (提供 /usr/bin/g++)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/bin/g++-6 50 自动模式
1 /usr/bin/g++-4.9 30 手动模式
2 /usr/bin/g++-5 40 手动模式
3 /usr/bin/g++-6 50 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:
$ policy g++
g++:
已安装:4:6.3.0-2
候选: 4:6.3.0-2
版本列表:
*** 4:6.3.0-2 500
500 http://packages.deepin.com/deepin panda/main amd64 Packages
100 /var/lib/dpkg/status
好了.
binutils
这里, 可能会装一些, 不太常用的工具,(常用的可能都已经装了) 为下面可能装的库打基础(下面会详细说明, 哪些库要用到这些工具).
java
老实说, java, groovy, scala这类jvm语言已经写的很少了.(现在多用shell, python和c++).
但是有些工具比如thrif还是需要这货的, 为java语言做支持.
还是装两个版本, jdk7和jdk8, 然后用update-alternatives进行调整.
1 | $ wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz -P ~/Desktop/apps |
jdk path
export JAVA_HOME=/usr/local/lib/jvm/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH1
2
然后看一下是否安装成功:
$ source .bashrc
$ which java
/usr/local/lib/jvm/jdk1.8.0_144/bin/java
$ java -version
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
java version “1.8.0_144”
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)1
上面的`Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp`好奇怪, 检查一下`_JAVA_OPTIONS`这个环境变量:
$ sudo grep -nr “JAVA_OPTIONS” /etc
/etc/profile.d/java-awt-font-gasp.sh:2:if ! echo ${_JAVA_OPTIONS} |grep -q – ${opt} ;then
/etc/profile.d/java-awt-font-gasp.sh:3: export _JAVA_OPTIONS=”${_JAVA_OPTIONS} ${opt}”1
查看了一下:
$ cat /etc/profile.d/java-awt-font-gasp.sh1
2
3
4opt="-Dawt.useSystemAAFontSettings=gasp"
if ! echo ${_JAVA_OPTIONS} |grep -q -- ${opt} ;then
export _JAVA_OPTIONS="${_JAVA_OPTIONS} ${opt}"
fi
这个宏本来是指定运行参数(java %JAVA_OPTIONS% -Xmx1024m -XX:MaxPermSize=128m
), 这里检查到”JAVA_OPTIONS”里没有设置awt
界面组建的宏, 所以在这里指定了运行系统的字体和图形库. 但是一旦这里export, 后面运行java
命令就会打印那条语句, 没办法, 在我的配置文件里面做一下处理吧.(JAVA_OPTIONS是运行时会自动指定的), 这里的文件就不要动了.
(意思是, 你的运行参数不要export了, 我运行的时候自己手动加载好了)1
2
3
4## java related (关于是否配置环境变量, 看下面说明)
JAVA_OPT=${_JAVA_OPTIONS}
unset _JAVA_OPTIONS
alias java="java ${JAVA_OPT}"
然后注销重新登录, 运行java -version
:1
2
3
4
5
6
7$ alias java
alias java='java -Dawt.useSystemAAFontSettings=gasp'
$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
这里注意了,如果后面你要用update-alternatives管理javac,java等工具, 就不要配置环境变量!
装完oralble的jdk, 还要装一个open jdk, 以免有时候编译需要(可能是某些版本的android框架或者应用需要).
1 | $ search openjdk-8-jdk |
查看一下是不是update-alternatives已经托管:1
2
3sudo update-alternatives --config java
链接组 java (提供 /usr/bin/java)中只有一个候选项:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
无需配置。
看来还是要手动配置一下, 我自己安装的/usr/local/lib/jvm下的那个, 以及这一个(因为他的路径不对, 主要到是jre)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20$ sudo update-alternatives --remove java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
$ sudo update-alternatives --install /usr/bin/java java /usr/local/lib/jvm/jdk1.8.0_144/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac /usr/local/lib/jvm/jdk1.8.0_144/bin/javac 300
$ sudo update-alternatives --install /usr/bin/jar jar /usr/local/lib/jvm/jdk1.8.0_144/bin/jar 300
$ sudo update-alternatives --install /usr/bin/javah javah /usr/local/lib/jvm/jdk1.8.0_144/bin/javah 300
$ sudo update-alternatives --install /usr/bin/javap javap /usr/local/lib/jvm/jdk1.8.0_144/bin/javap 300
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 200
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 200
$ sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java-8-openjdk-amd64/bin/jar 200
$ sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java-8-openjdk-amd64/bin/javah 200
$ sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java-8-openjdk-amd64/bin/javap 200
$ sudo update-alternatives --display java
java - 手动模式
最佳链接版本为 /usr/local/lib/jvm/jdk1.8.0_144/bin/java
链接目前指向 /usr/local/lib/jvm/jdk1.8.0_144/bin/java
链接 java 指向 /usr/bin/java
/usr/lib/jvm/java-8-openjdk-amd64/bin/java - 优先级 200
/usr/local/lib/jvm/jdk1.8.0_144/bin/java - 优先级 300
(这里如果你配置了JAVA_HOME等环境变量, 那么upate-alternatives
就失效了, 不能起到切换的作用)
破Java环境, 终于闹腾好了.
ant
ant: Java based build tool like make; 可能大家现在用maven啊, gradle啊比较多. 但是这个软件可能用于编译某些工具的库或者包, 所以还是要装一个.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$ add ant
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
ant-optional
建议安装:
ant-doc ant-gcj ant-optional-gcj antlr javacc junit junit4 jython libbcel-java libbsf-java libcommons-logging-java libcommons-net-java libmail-java libjaxp1.3-java
libjdepend-java libjsch-java liblog4j1.2-java liboro-java libregexp-java libxalan2-java libxml-commons-resolver1.1-java
下列【新】软件包将被安装:
ant ant-optional
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 2,270 kB 的归档。
解压缩后会消耗 3,170 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ which ant
/usr/bin/ant
安装完毕.
maven
有些库编译需要, 没有什么好说的.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$ add maven
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
junit junit4 libaopalliance-java libapache-pom-java libasm-java libatinject-jsr330-api-java libbsh-java libcdi-api-java
libcglib-java libclassworlds-java libcommons-cli-java libcommons-codec-java libcommons-httpclient-java libcommons-io-java
libcommons-lang-java libcommons-lang3-java libcommons-logging-java libcommons-net-java libcommons-parent-java libdom4j-java
libdoxia-core-java libeasymock-java libeclipse-aether-java libgeronimo-interceptor-3.0-spec-java libguava-java libguice-java
libhamcrest-java libhttpclient-java libhttpcore-java libisorelax-java libjaxen-java libjaxp1.3-java libjdom1-java libjetty9-java
libjsch-java libjsoup-java libjsr305-java libjzlib-java liblog4j1.2-java libmaven-parent-java libmaven2-core-java
libmaven3-core-java libmsv-java libobjenesis-java libplexus-ant-factory-java libplexus-archiver-java libplexus-bsh-factory-java
libplexus-cipher-java libplexus-classworlds-java libplexus-classworlds2-java libplexus-cli-java
libplexus-component-annotations-java libplexus-component-metadata-java libplexus-container-default-java
libplexus-container-default1.5-java libplexus-containers-java libplexus-containers1.5-java libplexus-interactivity-api-java
libplexus-interpolation-java libplexus-io-java libplexus-sec-dispatcher-java libplexus-utils-java libplexus-utils2-java
libqdox2-java librelaxng-datatype-java libservlet3.1-java libsisu-inject-java libsisu-plexus-java libslf4j-java libwagon-java
libwagon2-java libxalan2-java libxbean-java libxerces2-java libxml-commons-external-java libxml-commons-resolver1.1-java
libxom-java libxpp2-java libxpp3-java
建议安装:
junit-doc libaopalliance-java-doc libatinject-jsr330-api-java-doc libclassworlds-java-doc libcommons-httpclient-java-doc
libcommons-io-java-doc libcommons-lang-java-doc libcommons-lang3-java-doc libavalon-framework-java libcommons-logging-java-doc
libexcalibur-logkit-java libcommons-net-java-doc libdom4j-java-doc libeasymock-java-doc libjaxp1.3-java-gcj libjdom1-java-doc
jetty9 libjsoup-java-doc libjsr305-java-doc libmail-java liblog4j1.2-java-doc libobjenesis-java-doc libplexus-cipher-java-doc
libplexus-classworlds-java-doc libplexus-classworlds2-java-doc libplexus-cli-java-doc libplexus-container-default-java-doc
libplexus-interactivity-api-java-doc libplexus-interpolation-java-doc libplexus-sec-dispatcher-java-doc libplexus-utils-java-doc
libplexus-utils2-java-doc libqdox2-java-doc testng libwagon-java-doc libxalan2-java-doc libbsf-java libxsltc-java groovy
libequinox-osgi-java libosgi-compendium-java libosgi-core-java libqdox-java libspring-beans-java libspring-context-java
libspring-core-java libspring-web-java libxerces2-java-doc libxerces2-java-gcj libxml-commons-resolver1.1-java-doc
libxom-java-doc
下列【新】软件包将被安装:
junit junit4 libaopalliance-java libapache-pom-java libasm-java libatinject-jsr330-api-java libbsh-java libcdi-api-java
libcglib-java libclassworlds-java libcommons-cli-java libcommons-codec-java libcommons-httpclient-java libcommons-io-java
libcommons-lang-java libcommons-lang3-java libcommons-logging-java libcommons-net-java libcommons-parent-java libdom4j-java
libdoxia-core-java libeasymock-java libeclipse-aether-java libgeronimo-interceptor-3.0-spec-java libguava-java libguice-java
libhamcrest-java libhttpclient-java libhttpcore-java libisorelax-java libjaxen-java libjaxp1.3-java libjdom1-java libjetty9-java
libjsch-java libjsoup-java libjsr305-java libjzlib-java liblog4j1.2-java libmaven-parent-java libmaven2-core-java
libmaven3-core-java libmsv-java libobjenesis-java libplexus-ant-factory-java libplexus-archiver-java libplexus-bsh-factory-java
libplexus-cipher-java libplexus-classworlds-java libplexus-classworlds2-java libplexus-cli-java
libplexus-component-annotations-java libplexus-component-metadata-java libplexus-container-default-java
libplexus-container-default1.5-java libplexus-containers-java libplexus-containers1.5-java libplexus-interactivity-api-java
libplexus-interpolation-java libplexus-io-java libplexus-sec-dispatcher-java libplexus-utils-java libplexus-utils2-java
libqdox2-java librelaxng-datatype-java libservlet3.1-java libsisu-inject-java libsisu-plexus-java libslf4j-java libwagon-java
libwagon2-java libxalan2-java libxbean-java libxerces2-java libxml-commons-external-java libxml-commons-resolver1.1-java
libxom-java libxpp2-java libxpp3-java maven
升级了 0 个软件包,新安装了 80 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。
需要下载 27.6 MB 的归档。
解压缩后会消耗 38.0 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ which maven
IntelliJ
直接去 页面 下载安装包.1
2
3
4
5$ wget https://download.jetbrains.8686c.com/idea/ideaIC-2017.2.3.tar.gz -P Desktop/apps
$ mkdir Software
$ tar -xzvf ~/Desktop/apps/ideaIC-2017.2.3.tar.gz -C Software/
$ cd Software/idea-IC-172.3968.16/bin
$ ./idea.sh
之后安装时, 它会有一个步骤, 问你是否建立执行脚本, 点击确定即可, 然后可以看到:1
2
3
4
5
6
7
8
9
10
11$ which idea
/usr/local/bin/idea
$ whereis idea
idea: /usr/local/bin/idea
$ ll /usr/local/bin/idea
-rwxr-xr-x 1 root root 3111 8月 31 21:58 /usr/local/bin/idea
$ file /usr/local/bin/idea
/usr/local/bin/idea: Python script, ASCII text executable
这样就算安装完毕了.
python
一般linux是自带2.7版本的python的, 出于某些目的有时候也要安装python3(比如cppman就是需要python3安装), 幸好deepin也自带了.1
2
3
4
5
6
7
8$ which python
/usr/bin/python
$ whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python3.5 /usr/bin/python3.5m /usr/lib/python2.7 /usr/lib/python3.5 /etc/python /etc/python2.7 /etc/python3.5 /usr/local/lib/python2.7 /usr/local/lib/python3.5 /usr/include/python2.7 /usr/include/python3.5m /usr/share/python /usr/share/man/man1/python.1.gz
$ python --version
Python 2.7.13
那么先把python2.7交给update-altertives管理再说.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20$ sudo update-alternatives --list python
update-alternatives: 错误: 无 python 的候选项
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 200
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100
$ sudo update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.5
$ sudo update-alternatives --display python
python - 自动模式
最佳链接版本为 /usr/bin/python3.5
链接目前指向 /usr/bin/python3.5
链接 python 指向 /usr/bin/python
/usr/bin/python2.7 - 优先级 100
/usr/bin/python3.5 - 优先级 200
$ python --version
Python 3.5.3
还没有完, 你会发现/usr/include/python2.7下面没有多少头文件! 所以还要安装相关的, 必要的库.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16$ sudo updatedb
$ locate Python.h #没有结果
#下面也没有结果
$ dpkg --get-selections |grep python-dev
$ ldconfig -p | grep python-dev
libpython3.5m.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0
libpython3.5m.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython3.5m.so
libpython2.7.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
libpyglib-2.0-python2.7.so.0 (libc6,x86-64) => /usr/lib/libpyglib-2.0-python2.7.so.0
libboost_python3.so.1.63.0 (libc6,x86-64) => /usr/local/lib/libboost_python3.so.1.63.0
libboost_python3.so (libc6,x86-64) => /usr/local/lib/libboost_python3.so
libboost_python.so.1.63.0 (libc6,x86-64) => /usr/local/lib/libboost_python.so.1.63.0
libboost_python.so (libc6,x86-64) => /usr/local/lib/libboost_python.so
(可以查看库文件, 但不见得有头文件)
所以下面安装一下(Python.h is provided by -dev)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$ add python-dev libboost-python-dev libboost-mpi-python-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
libboost-mpi-python1.62-dev libboost-mpi-python1.62.0 libboost-mpi1.62-dev libboost-mpi1.62.0 libboost-python1.62-dev
libboost-python1.62.0 libboost-serialization1.62-dev libboost-serialization1.62.0 libboost1.62-dev libfabric1 libhwloc-dev
libhwloc-plugins libhwloc5 libibverbs-dev libnuma-dev libopenmpi-dev libopenmpi2 libpsm-infinipath1 libpython-dev
libpython2.7-dev mpi-default-bin mpi-default-dev ocl-icd-libopencl1 openmpi-bin openmpi-common python2.7-dev
建议安装:
libboost-graph1.62-dev libboost1.62-doc gccxml libboost-atomic1.62-dev libboost-chrono1.62-dev libboost-context1.62-dev
libboost-coroutine1.62-dev libboost-date-time1.62-dev libboost-exception1.62-dev libboost-fiber1.62-dev
libboost-filesystem1.62-dev libboost-graph-parallel1.62-dev libboost-iostreams1.62-dev libboost-locale1.62-dev
libboost-log1.62-dev libboost-math1.62-dev libboost-program-options1.62-dev libboost-random1.62-dev libboost-regex1.62-dev
libboost-signals1.62-dev libboost-system1.62-dev libboost-test1.62-dev libboost-thread1.62-dev libboost-timer1.62-dev
libboost-type-erasure1.62-dev libboost-wave1.62-dev libboost1.62-tools-dev libmpfrc++-dev libntl-dev libhwloc-contrib-plugins
openmpi-doc opencl-icd gfortran
下列【新】软件包将被安装:
libboost-mpi-python-dev libboost-mpi-python1.62-dev libboost-mpi-python1.62.0 libboost-mpi1.62-dev libboost-mpi1.62.0
libboost-python-dev libboost-python1.62-dev libboost-python1.62.0 libboost-serialization1.62-dev libboost-serialization1.62.0
libboost1.62-dev libfabric1 libhwloc-dev libhwloc-plugins libhwloc5 libibverbs-dev libnuma-dev libopenmpi-dev libopenmpi2
libpsm-infinipath1 libpython-dev libpython2.7-dev mpi-default-bin mpi-default-dev ocl-icd-libopencl1 openmpi-bin openmpi-common
python-dev python2.7-dev
升级了 0 个软件包,新安装了 29 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。
需要下载 40.9 MB 的归档。
解压缩后会消耗 185 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ sudo updatedb
$ locate Python.h
/usr/include/python2.7/Python.h
/usr/include/python3.5m/Python.h
差不多了.
安装pip3工具:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23$ add python3-pip
[sudo] merlin 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-cffi-backend python3-crypto
python3-cryptography python3-dev python3-idna python3-keyring python3-keyrings.alt python3-pyasn1
python3-secretstorage python3-setuptools python3-wheel python3.5-dev
建议安装:
python3-crypto-dbg python-crypto-doc python-cryptography-doc python3-cryptography-vectors libkf5wallet-bin
gir1.2-gnomekeyring-1.0 python3-pykde4 doc-base python-secretstorage-doc python-setuptools-doc
下列【新】软件包将被安装:
libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-cffi-backend python3-crypto
python3-cryptography python3-dev python3-idna python3-keyring python3-keyrings.alt python3-pip python3-pyasn1
python3-secretstorage python3-setuptools python3-wheel python3.5-dev
升级了 0 个软件包,新安装了 17 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 40.8 MB 的归档。
解压缩后会消耗 63.2 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ $ which pip3
/usr/bin/pip3
这样就算差不多了, 以后根据自己的需求, 选择安装相应的库即可.
安装pycharm
下载 pycharm1
$ wget https://download.jetbrains.8686c.com/python/pycharm-community-2017.2.2.tar.gz -P Desktop/apps
安装1
2
3$ tar -xzvf Desktop/apps/pycharm-community-2017.2.2.tar.gz -C Software/
$ cd Software/pycharm-community-2017.2.2/bin
$ ./pycharm.sh
安装时, 请勾选建立/usr/local/bin/pycharm
脚本这一项, 然后可以看到:1
2
3
4$ which pycharm
/usr/local/bin/pycharm
$ file /usr/local/bin/pycharm
/usr/local/bin/pycharm: Python script, ASCII text executable
golang
一般而言, 选择apt工具就够了 sudo apt-get install golang
, 但是为了能够实时更新一下, 可以采用源:1
2
3sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable
我直接安装的:1
2
3
4
5
6
7
8
9
10
11
12
13
14$ add golang
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
golang-1.7 golang-1.7-doc golang-1.7-go golang-1.7-src golang-doc golang-go golang-src
建议安装:
bzr mercurial subversion
下列【新】软件包将被安装:
golang golang-1.7 golang-1.7-doc golang-1.7-go golang-1.7-src golang-doc golang-go golang-src
升级了 0 个软件包,新安装了 8 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。
需要下载 29.5 MB 的归档。
解压缩后会消耗 147 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
之后需要配置一下环境变量:(网上很多配的是错的)1
2
3
4
5
6
7
8
9
10
export GOROOT=/usr/lib/go-1.7
export GOBIN=$GOROOT/bin
export PATH=$GOBIN:$PATH
export GOPATH=/home/merlin/Desktop/GOPATH
export GOOS=linux
export GOARCH=amd64
查看一下配置:1
2
3
4
5
6
7$ go version
go version go1.7.4 linux/amd64
$ source ~/.bashrc
$ echo $GOPATH
/home/merlin/Desktop/GOPATH
在GOPATH下新建3个目录:(为你的项目)
- src 存放源码
- pkg 存放编译生成的文件
- bin 存放生成的可执行文件
cppman
我主业C++, 所以马上来配置一下c++的开发环境.
cppman
可以实时从cplusplus.com以及cppreference.com上面下载文档的一个小工具.
repo的地址是: https://github.com/aitjcize/cppman
可以直接用apt工具安装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 search "cppman"
cppman - C++ 98/11 manual pages for Linux, with source from cplusplus.com
add cppman
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
python3-bs4 python3-html5lib python3-webencodings
建议安装:
python3-genshi
下列【新】软件包将被安装:
cppman python3-bs4 python3-html5lib python3-webencodings
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 321 kB 的归档。
解压缩后会消耗 1,861 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
安装完成之后, 要先从网站上缓存页面才可以.
# 切换源
cppman -s cppreference.com
Source set to `cppreference.com'.
# 缓存
cppman -c
By default, cppman fetches pages on-the-fly if corresponding page is not found in the cache. The "cache-all" option is only useful if you want to view man pages offline. Caching all contents will take several minutes, do you want to continue [y/N]?
y
注意它需要装python3, 才行; 但是python是常用的, 所以版本管理还是交给update-alternatives吧.
(安装完python3之后再来安装cppman)
(再缓存cppman -c
的时候, 你最好使用一下代理, 否则很容易缓存失败)
cmake
像boost, thrift虽然都不适用cmake编译, 但是现在很多流行的库, 比如gtest等, 都是用cmake, 而且相对于make的好, 不需要我多说.
下面就安装一下cmake.
sudo apt-get install
安装的版本往往比较老, 所以一般需要自己去下载, 然后编译安装.
下载: https://cmake.org/download/ 或者 (https://github.com/Kitware/CMake)
直接去官网拿压缩包源码1
2
3$ wget https://cmake.org/files/v3.9/cmake-3.9.1.tar.gz -P Desktop/apps/
$ cd Desktop/apps
$ tar -xzvf cmake-3.9.1.tar.gz
编译安装1
2
3
4$ ./configure
CMake has bootstrapped. Now run make.
$ make -j4
$ sudo make install
可以从安装日志中看到, 主要是这三个工具1
2
3-- Installing: /usr/local/bin/cmake
-- Installing: /usr/local/bin/ctest
-- Installing: /usr/local/bin/cpack
最后删除, 安装包.
(你不要去下载它的gui客户端呀, 好神经的说)
qt
主要包括qtcreator和qt库, 这是它的官网, 越来越恶心的官网, 我决定直接用apt工具下载qtcreator, 之后qt核心库再去官网下载.
1 | add qtcreator |
之后设置qt库的版本(环境变量), 比如add libqt4-dev
, 可以在你的.bashrc
里面, 或者使用/usr/bin/qtchooser
来设置. 如要需要换最新版本的qt, 可以sudo apt-get remove qtcreator
进行卸载, 或者purge.
boost
玩cpp的, 不装boost?
你可以用apt工具去装, 比如:1
2
3
4
5
6
7
8
9# 一般安装libboost-dev就行
sudo apt-get install libboost-all-dev
sudo apt-get install libboost-dev
# 或者sudo apt-cache search boost搜自己想要的库
sudo apt-get install mpi-default-dev #安装mpi库
sudo apt-get install libicu-dev #支持正则表达式的UNICODE字符集
sudo apt-get install python-dev #需要python的话
sudo apt-get install libbz2-dev #失败的话 sudo apt-get update试试
然后日常开发中, 常常用到这个库, 要确定的版本, 最好自己去官网下载安装(linux和vs版都要装).
关于安装, 你可以参考一下, 我这篇文章boost, 下面快速说:
下载1
2
3## 我直接从我的远端服务器拷贝了 boost_1_63_0.7z
$ scp -r merlin@xxxx:/home/merlin/packages/boost_1_63_0.7z ./apps/
$ 7z x boost_1_63_0.7z -o.
编译安装: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$ ./bootstrap.sh
$ ./b2 --show-libraries
The following libraries require building:
- atomic
- chrono
- container
- context
- coroutine
- coroutine2
- date_time
- exception
- fiber
- filesystem
- graph
- graph_parallel
- iostreams
- locale
- log
- math
- metaparse
- mpi
- program_options
- python
- random
- regex
- serialization
- signals
- system
- test
- thread
- timer
- type_erasure
- wave
# 也就是说, 下面编译全是为了上面那些库(下面还是全编译吧)
# 如果./b2 --with-atomic --buildtype=complete install表示只编译atomic库
# 注意一下拷贝权限问题
$ sudo ./b2 --buildtype=complete install
之后查看一下编译日志: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
32Component configuration:
- atomic : building
- chrono : building
- container : building
- context : building
- coroutine : building
- coroutine2 : building
- date_time : building
- exception : building
- fiber : building
- filesystem : building
- graph : building
- graph_parallel : building
- iostreams : building
- locale : building
- log : building
- math : building
- metaparse : building
- mpi : building
- program_options : building
- python : building
- random : building
- regex : building
- serialization : building
- signals : building
- system : building
- test : building
- thread : building
- timer : building
- type_erasure : building
- wave : building
之后跟着一大堆common.copy把lib和头文件分别拷贝到了, /usr/local/include
和/usr/local/lib
下面.
只要不出现failure
基本可以认定编译, 安装成功了.
log4cpp
rapidxml
这个是常用的库, 不过有个坑需要你调整一下. 详细内容不再叙述, 请参考我的文章 rapidxml1
2
3
4
5
6
7
8
9
10
11$ wget https://nchc.dl.sourceforge.net/project/rapidxml/rapidxml/rapidxml%201.13/rapidxml-1.13.zip
$ unzip rapidxml-1.13.zip
Archive: rapidxml-1.13.zip
creating: rapidxml-1.13/
inflating: rapidxml-1.13/license.txt
inflating: rapidxml-1.13/manual.html
inflating: rapidxml-1.13/rapidxml.hpp
inflating: rapidxml-1.13/rapidxml_iterators.hpp
inflating: rapidxml-1.13/rapidxml_print.hpp
inflating: rapidxml-1.13/rapidxml_utils.hpp
$ sudo mv rapidxml-1.13 /usr/local/include/rapidxml
rapidjson
全部是头文件的库, 安装起来也比较简单:1
2
3
4$ git clone https://github.com/miloyip/rapidjson.git
$ cd rapidjson
$ cmake .
$ sudo make install
protobuffer
下载1
$ git clone https://github.com/google/protobuf.git
编译安装:1
2
3
4
5
6$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.
(整个过程还是比较顺利的)
thrift
直接参考的文章 thrift.
npm
npm is distributed with Node.js- which means that when you download Node.js, you automatically get npm installed on your computer.
可能你不写JavaScript的东西, 不过这个npm被很多其他软件用到, 所以最好你还是装一下(三兄弟一起).1
2
3checking for nodejs... no
checking for node... no
checking for npm... no
下载并安装(不要使用apt工具, 因为版本都不新)1
2$ wget https://nodejs.org/dist/v6.11.2/node-v6.11.2-linux-x64.tar.xz -P ~/Desktop/apps
$ tar -xJvf Desktop/apps/node-v6.11.2-linux-x64.tar.xz -C Software/
之后配置一下环境变量就可以了:1
2
3
4## node npm related
export NODE_HOME=/home/merlin/Software/node-v6.11.2-linux-x64
export NODE_PATH=$NODE_HOME/lib/node_modules
export PATH=$PATH:$NODE_HOME/bin
测试一下安装工作:1
2
3
4
5$ npm -v
3.10.10
$ node -v
v6.11.2
开发文档
一般使用的就是 glibc-doc 和 manpages-posix-dev.
1 | $ add glibc-doc |
其他软件
gitk
一般我熟悉的项目, 我直接用git-emacs:
提交等写入操作, 使用git-emacs.1
2
3;;git-emacs
(add-to-list 'load-path "/path/to/git-emacs/")
(require 'git-emacs)
如果是别人的项目, 要我接手或者帮忙找错, 那么我直接使用gitk: M-x gitk
(阅读建议使用 gitk
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17add gitk
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
libtk8.6 tcl tcl8.6 tk tk8.6
建议安装:
git-doc tcl-tclreadline
下列【新】软件包将被安装:
gitk libtk8.6 tcl tcl8.6 tk tk8.6
升级了 0 个软件包,新安装了 6 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。
需要下载 1,757 kB 的归档。
解压缩后会消耗 4,101 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
$ which gitk
/usr/bin/gitk
运行的时候, 切换到相应的库目录里面, 然后gitk
, 例如我查看别人的库:
htop
资源监控器
understand
Scientific Toolworks Understand
源码查看器(和gtags, source in sight类似)
remarkable
专门用于写markdown, 导出到pdf的编辑器.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 安装的时候, 先把python切换到2.7版本
$ add remarkable
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
gir1.2-javascriptcoregtk-3.0 gir1.2-soup-2.4 gir1.2-webkit-3.0 libjavascriptcoregtk-3.0-0 libqt5xmlpatterns5
libwebkitgtk-3.0-0 libyaml-0-2 python3-markdown python3-pygments python3-yaml wkhtmltopdf
下列【新】软件包将被安装:
gir1.2-javascriptcoregtk-3.0 gir1.2-soup-2.4 gir1.2-webkit-3.0 libjavascriptcoregtk-3.0-0 libqt5xmlpatterns5
libwebkitgtk-3.0-0 libyaml-0-2 python3-markdown python3-pygments python3-yaml remarkable wkhtmltopdf
升级了 0 个软件包,新安装了 12 个软件包,要卸载 0 个软件包,有 5 个软件包未被升级。
需要下载 12.3 MB 的归档。
解压缩后会消耗 53.3 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
# 安装成功
$ which remarkable
/usr/bin/remarkable
配置一下1
2## remarkable (u could add & to run)
alias md='nohup remarkable'
然后运行一下, 功能正常1
$ md read.md &
vistual studio code
我原来是用remarkable打开markdown文件, 后来发现这个vistual studio code越来越强大, 就直接用它了.
直接去官网下载deb安装包, 安装即可.`
$ sudo dpkg -i code_1.15.1-1502903936_amd64.deb
$ which code
/usr/bin/code
尾巴
当初把 Mac pro 15 卖掉的原因就是, 我已经非常熟悉Ubuntu了, 没必要在改变习惯, 使用homebrew等其他软件, 并且机器的配置文件位置我也习惯了. 所以即便是换系统, 也会和Ubuntu搭边儿, 正好deepin, 感觉不错哦.