Ubuntu 安装的一些记录

虽然用 Déjà Dup 计划了定期备份,但只备份了 home 目录。这篇文章本质上是篇流水帐,记录无聊的安装过程和使用 Ubuntu 开发时遇到的鬼畜的问题,以此避免自己未来重装时太痛苦。毕竟 shell 又不会写,只有记流水帐才能维持得了生活的样子。

基本配置

首先装好 Chrome。

删掉 Firefox:sudo apt autoremove --purge firefox firefox-locale-zh-hans

所有应用-软件和更新,更改为国内软件源。

关闭“软件和更新”窗口后会询问执行 sudo apt update,完成后执行命令行 sudo apt upgrade 更新所有包。

然后安装一些常用的东西:

1
sudo apt install screenfetch htop git tig vim curl zsh materia-gtk-theme arc-theme vlc shutter synaptic deja-dup bleachbit telegram-desktop calibre copyq mycli ipython3

安装 Typora

1
2
3
4
wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -
sudo add-apt-repository 'deb https://typora.io/linux ./'
sudo apt-get update
sudo apt-get install typora

Ubunt 自带一套 libreoffice,我不喜欢这么大的玩意所以装了 wps,我已经将缺失的字体上传到 Google Drive。下载解压后安装字体:

1
2
3
4
sudo mv ./* /usr/share/fonts
sudo mkfontscale
sudo mkfontdir
sudo fc-cache

“软件和更新”中安装附加驱动,使用 NVIDIA 专有驱动。

Jetbrains 官网下载 Toolbox App,双击即可安装,随后选择自己需要的 IDE 进行安装。

安装 ibus rime 输入法sudo apt install ibus-rime

Visual Studio Code 可以直接在官网下载 deb 包。

安装 zsh 和 oh my zsh:

1
2
sudo apt install zsh curl
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

zsh 主题:vim ~/.zshrcZSH_THEME 修改为 ys。

Gnome Terminal 主题

1
wget -O gogh https://git.io/vQgMr && chmod +x gogh && ./gogh && rm gogh

修改为 Dracual。

科学上网

路由器直接代理是最方便的,遗憾我路由器性能造成了网速瓶颈,墙外访问最高只能跑 1.5 MB/s,所以选择使用桌面工具。目前比较方便的工具一个是提供 GUI 的 electron-ssr,另一个是 Python 版的 SSR。

electron-ssr

如果是最小安装,先安装 pythn2:sudo apt install python

直接在项目的 Release 页面下载 deb 文件并安装 electron-ssr,操作方法和 C# 版 Windows 客户端差不多,导入订阅链接、选择节点就好。

ShadowsocksR Python

1
2
3
git clone https://github.com/SSRbackup/shadowsocksr.git
cd shadowsocksr
vim user-config.json

config 模板大概是这样:

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
{
"server": "",
"server_ipv6": "::",
"server_port": ,
"local_address": "127.0.0.1",
"local_port": 1086,

"password": "",
"method": "",
"protocol": "",
"protocol_param": "",
"obfs": "",
"obfs_param": "",
"speed_limit_per_con": 0,
"speed_limit_per_user": 0,

"additional_ports" : {},
"additional_ports_only" : false,
"timeout": 120,
"udp_timeout": 60,
"dns_ipv6": false,
"connect_verbose_info": 0,
"redirect": "",
"fast_open": false
}

把节点配置信息填入就好,然后启动 ShadowsocksR 服务:

1
2
cd ./shadowsocks # 注意是 shadowsocksr 目录里的 shadowsocks 目录
sudo python ./local.py -d start

如果要停止,同级目录输入 sudo python ./local.py -d stop 即可。

SwitchyOmega

如果在系统设置里设置 socks/http 代理,Chrome 和终端的所有连接都会走代理,可能会造成一些不便。Chrome 的话可以使用 SwitchyOmega。可以上 GitHub 的 Release 页下载也可以在官网下载。可以参考其 Wiki 进行快速配置。

终端代理

编辑 .zshrc 文件:vim ~/.zshrc,在文件末添加:

1
2
3
# proxy
alias proxy='export all_proxy=socks5://127.0.0.1:1086'
alias unproxy='unset all_proxy'

然后终端中输入 source ~/.zshrc

验证:首先在终端输入 proxy,然后输入 curl cip.cc,如果返回是代理服务器的 IP 和位置信息,说明终端已走代理端口。比如:

同样,可以使用 proxychains 来指定终端程序走代理,相关配置可以查看官方文档

开发环境

Android Studio

代理

和 Jetbrains 家的产品类似,直接在设置搜 proxy 就能找到代理选项,根据配置填入代理地址和端口。Android Studio 会提示是否让 Gradle 使用代理,如果配置的是 socks 代理的话选否,否则 Gradle 无法完成同步,如果是 http 代理可以安心地选是。其实 Gradle 不用代理也挺快。

AVD

下载好虚拟机后可能无法启动,提示如下:

1
2
3
KVM is required to run this AVD.
/dev/kvm device: permission denied.
Grant current user access to /dev/kvm

一般是权限或者 qemu 的问题。解决如下:

1
egrep -c '(vmx|svm)' /proc/cpuinfo

返回值如果是 0 表示 CPU 不支持虚拟化,老实拿实机开发吧,其他值表示支持虚拟化。然后查看是否支持 KVM 加速:

1
2
sudo apt-get install cpu-checker
sudo kvm-ok

如果出现 BIOS VT 之类字样请进入 BIOS 打开 CPU 的虚拟化选项,我的显示如下:

1
2
3
4
# bolitao @ bolitao-desktop in ~ [20:50:26] 
$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

表示可以使用 KVM 加速。

安装 qemu-kvm:

1
sudo apt install qemu-kvm

把当前用户添加入 KVM 组:

1
sudo adduser username kvm

比如我的就是 sudo adduser bolitao kvm:

1
2
3
4
5
6
# bolitao @ bolitao-desktop in ~ [20:47:57] 
$ sudo adduser bolitao kvm
[sudo] bolitao 的密码:
正在添加用户"bolitao""kvm"组...
正在将用户“bolitao”加入到“kvm”组中
完成。

最后注销/重启使设置生效。对了,记得设置堆内存大小和启动器快捷方式。

Node.js

Node.js Binary Distributions

Java

JDK: 直接从官网下载就好,也可以去下载各种各样的 openjdk。

Tomcat

软件源中有 Tomcat,我更喜欢直接到官网下,下载下来后记得 chmod 给予可执行权限。

Flutter

正常情况 home 下装 Flutter 和 Android SDK 再配置环境变量是没问题的。我把 SDK 和 Flutter 放在了一个挂载的 SSD 里,然后 VS Code 和 AS 的 Flutter 插件就死不认连接的设备,表现为:

  1. 终端 flutter doctor 能够识别设备:

    1
     

bolitao @ pc in /mnt/XXXXXXXXXXX/ on git:master x [19:06:30]

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.2.1, on Linux, locale zh_CN.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Android Studio (version 3.3)
[✓] IntelliJ IDEA Ultimate Edition (version 2019.1)
[✓] Connected device (1 available)

• No issues found!

1
2
3
4
5
6
7
8
9
10
11
12
13
2. 在 Flutter 项目下 `flutter run` 能够在设备运行
3. VS Code 和 AS 插件始终提示 `No device`

解决办法是使用 `flutter config --android-sdk` 命令设置 SDK 位置。比如我的:

``` bash
# bolitao @ pc in ~ [19:16:47] C:130
$ echo $ANDROID_HOME
/mnt/XXXXXXXXXXX/appsu/SDK

# bolitao @ pc in ~ [19:17:19]
$ flutter config --android-sdk /mnt/XXXXXXXXXXX/appsu/SDK
Setting "android-sdk" value to "/mnt/XXXXXXXXXXX/appsu/SDK".

这样设置后 Flutter 插件就能够识别连接的设备了。

再附上 ~/.zshrc 的部分环境变量配置:

1
2
3
4
5
6
7
8
# Flutter
export PATH="$PATH:/mnt/XXXXXXXXXXX/appsu/flutter/bin"
# ANDROID_HOME
export ANDROID_HOME="/mnt/XXXXXXXXXXX/appsu/SDK"
# export PATH="${PATH}:${ANDROID_HOME}tools/:${ANDROID_HOME}platform-tools/"
export PATH="$PATH:/mnt/XXXXXXXXXXX/appsu/SDK/platform-tools"
export PATH="$PATH:/mnt/XXXXXXXXXXX/appsu/SDK/tools"
export PATH="$PATH:/mnt/XXXXXXXXXXX/appsu/SDK/tools/bin"

MySQL

1
2
3
sudo apt update
sudo apt install mysql-workbench mysql-server
sudo mysql_secure_installation

这样子装好后是不能用 mysql -uroot -p 连接数据库的,当然 mycli 也连接不能。

对了,初次运行 mycli 时不要使用 sudo 命令,不然其配置文件所属组会成为 root,日后以普通用户身份使用 mycli 会报错,解决办法是删除其配置文件并重装。

回到正题,mysql -uroot 方式不能访问数据库的原因是 5.7 版本后 root 账户的验证方式变成了 auth_socket,可以先使用 sudo mysql看看 MySQL 各账户的验证方式:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *825307A82A365CD2FDE2CAF87DACB128C48A7845 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

可以看到 root 账户使用的验证方式是 auth_socket,将其换成 mysql_native_password

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user WHERE user = "root";
+------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------+-------------------------------------------+-----------------------+-----------+
| root | *4E497411576546ADAECC7719C5DD2ECEF7B3E97A | mysql_native_password | localhost |
+------+-------------------------------------------+-----------------------+-----------+
1 row in set (0.00 sec)

记得将 password 改成自己的密码,这样就可以使用 mycli 和 -uroot -p 方法访问数据库了。

然后再创一个非 root 账户:

1
2
3
4
5
mysql> CREATE USER 'bolitao'@'localhost' IDENTIFIED BY 'bolitao';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'bolitao'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

测试一下 mycli:

1
2
3
4
5
6
7
8
9
# bolitao @ bolitao-desktop in ~ [22:05:42] 
$ mycli -u bolitao
Password:
Version: 1.8.1
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - Steve Robbins
mysql bolitao@localhost:(none)>

还可以禁止 MySQL 的自启动:

1
sudo systemctl disable mysql

需要用到时可以使用 service mysql start 手动启动 MySQL。


OneDrive

项目链接:OneDrive Free Client

我的安装完全步骤按照 README:

安装依赖:

1
2
3
4
sudo apt install git
sudo apt install libcurl4-openssl-dev
sudo apt install libsqlite3-dev
sudo snap install --classic dmd && sudo snap install --classic dub

编译:

1
2
3
4
git clone https://github.com/skilion/onedrive.git
cd onedrive
make
sudo make install

运行之前最好先配置一下需要同步的文件夹/文件:

1
vim ~/.config/onedrive/sync_list

直接输入要同步的文件夹名。

然后终端输入 onedrive 即可运行。首次运行会提供一个认证链接,打开这个链接并登入自己的账户会出现一个空白页,把这个空白页链接复制到终端中就开始同步了。

这个应用还提供了开机启动、多账户等功能,这里不多说了,在项目页面可以查看更多。


Numix Circle Icons

1
2
3
sudo add-apt-repository ppa:numix/ppa
sudo apt update
sudo apt install numix-icon-theme-circle

Gnome Shell Extensions

在 Chrome 中安装 gnome 拓展可能需要先安装这玩意:

1
sudo apt-get install chrome-gnome-shell
  • User Themes
  • Dash to Dock
  • Dynamic Top Bar
  • Hide Top Bar

参考:

  1. Mac OSX终端走shadowsocks代理
  2. GFWList · FelisCatus/SwitchyOmega Wiki
  3. How To Install MySQL on Ubuntu 18.04 | DigitalOcean
  4. 64bit - Android Studio: /dev/kvm device permission denied - Stack Overflow
  5. Unable to run a Flutter app because <no devices> even Device File Explorer can detect it · Issue #2084 · flutter/flutter-intellij
Author: Boli Tao
Link: https://www.bolitao.xyz/archives/d5265d83.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.