写个.net开发者的Linux迁移指南.md

前言

为什么要迁移到Linux

  1. 首先我个人还是有点软件洁癖,以前是穷酸学生的时候也是用盗版的用户,后来在知乎被洗脑终于有了点版权意识.然后便有了能用开源软件的就用开源,实在不能就选社区版或者免费版。于是开始接触了Linux逐步摆脱盗版的Windows,以及所有的破解类软件相信国内很多用户也是用着盗版的而且并没意识到有什么不妥...讲真这不是装逼而是一个很严肃的问题

  2. 自从微软开放dotnet core,终于可以用上docker等一些好玩的东西,但是docke这一套包括shell脚本等在Windows下并非原生适配,还不如在Linux使用舒服。

  3. 还是因为工作中用了dotnet core,结果把项目部署到Linux下发现有些代码上的东西是有坑的,举个例子获取系统网卡IP的方式或者获取系统的时间有时区问题,或者时间默认值等等各方面的不同。正是这个原因是我不得不下定决心切换到Linux平台下开发以消除这些隐患

使用模式

使用WSL

似乎也是最近两年才推出的东西,目前只可以在Windows 10上才可使用。 优点是不需要安装太多东西,资源占用低,发行版有Ubuntu,Debian,Kali等可以选。直接在应用商店搜索即可。 缺点就是非完全本地化的Linux,部分功能不支持比如原生docker等等,图形界面等,部分命令不可用等等奇怪问题。但可以肯定的是这玩意存在的意义是有的。只要它得到足够完善,配合宇宙IDE visual studio简直无敌

具体开启步骤 1.管理员权限打开powershell

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

然后按照提示重启电脑

再打开应用商店搜索Ubuntu安装,或者点击这里直达 任意的命令行下输入bash即可启动WSL 截图欣赏

虚拟机

vmware或者virtual box均可 好处就是完整的Linux环境支持,同时启动多个独立系统,且环境相互独立,玩坏了也不影响物理机。 完全虚拟化没有硬件驱动兼容这方面的烦恼 缺点 资源占用比较高,低配机器玩不起 推荐大多数新手或者想同时跑两个系统的用户使用此种方式

物理机安装

适合的人群,爱好折腾,喜欢原生体验 优点:性能最高,速度杠杠的。折腾一翻收获丰富 缺点:容易翻车,遇到很多问题需要自行查找解决方案,对于debian,使用Google+英语关键字基本能解决问题

关于发行版的选择

linux的发行版有很多redhat系的centos fedora,等等 debian系的debian,ubuntu,mint,deepin。 由于从大二就开始折腾linux桌面系统了 使用过的有Ubuntu,Debian,Ubuntu kylin,Mint,Lubantu,Xubantu,Fedora,Deepin 基本都是debian系的, 主要是桌面环境不同,无非就是unity,gnome3,xfce4,cinamon。

最终体验下来得出以下结论

低配置选择xfce4,比如Xubunu就是默认这个环境 喜欢传统型桌面的选择Cinamon,比如Mint 喜欢稳定+酷炫的使用Gnome3

比起Ubuntu,debian大法好,和ubuntu相比简直稳如狗 不过新手还是老老实实使用ubuntu的unity,然而都2018了,Ubunut终于抛弃超级难用的unity桌面了,现在Ubuntu也是用gnome3, 以我多年是使用经历,最终决定首选是Debian(目前已经在我个人笔记本上跑了4年,稳定到怀疑人生)。新手可以考虑Ubuntu上手后再转,因为个人认为Ubuntu上手容易,但是稳定性完全比不上Debian

安装指南

具体安装就是略了,基本上就是切一个单独的分区,格式化为ext4,再 加一个swap分区,我用的是256g的固态,150g 已经被windows用了,剩下的100留给linux,记住,开发使用的电脑,大,是绝对没错的。

安装完成后可能需要的几件事

换源

apt的源使用中国镜像源是很有必要的,经测试广州和深圳地区使用网易源速度十分理想 假设你已经会使用vi进行操作

su root
vi /etc/apt/sources.list

以下是我的配置可以粘贴使用

#163 deb http://mirrors.163.com/debian/ stretch non-free contrib main deb http://mirrors.163.com/debian/ stretch-updates non-free contrib main deb http://mirrors.163.com/debian/ stretch-backports contrib non-free main # deb-src http://mirrors.163.com/debian/ stretch main non-free contrib # deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib #------------------------------------------------------------------------------# #                   OFFICIAL DEBIAN REPOS #------------------------------------------------------------------------------# ###### Debian Main Repos # deb http://ftp.cn.debian.org/debian/ stretch contrib main # deb-src http://ftp.cn.debian.org/debian/ stretch contrib main ###### Debian Update Repos #deb http://security.debian.org/ stretch/updates contrib main #deb http://ftp.cn.debian.org/debian/ stretch-proposed-updates contrib main #deb-src http://security.debian.org/ stretch/updates contrib main # deb http://ftp.de.debian.org/debian-ports/ sid main deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib deb http://mirrors.aliyun.com/debian/ stretch-proposed-updates main non-free contrib deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib deb-src http://mirrors.aliyun.com/debian/ stretch-proposed-updates main non-free contrib

特别提示,如果是在基于debian的系统,并且显卡是NVIDIA的,可能出现以下情况

  • 运行良好,但是突然屏幕卡住不动了,只剩下鼠标可以动,键盘也无相应,ctrl+ alt + F*都不能切换,只有强制重启和REISUB可用

  • 通过ssh远程登录无图形界面情况可以正常使用

显然这是图形界面的锅 而且这个问题网上搜索不到解决方案,我是无意中发现的解决方案 其实是需要显卡驱动支持

首选我们检测下

nvidia-detect
Detected NVIDIA GPUs: 02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF108 [GeForce GT 430] [10de:0de1] (rev a1) Your card is supported by the default drivers. It is recommended to install the    nvidia-driver package.

这里提供Debian9的安装 Debian 9 "Stretch"

支持 Geforce 4xx 以及更高的GPUs

首先添加源:

echo 'deb http://httpredir.debian.org/debian stretch-backports main contrib non-free' >> /etc/apt/sources.list

为内核安装合适的Linux headers 假设你的Debian Stretch使用的是4.9 Linux 内核:

apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')

如果你的分支是 stretch-backports则应该这样安装

apt-get install -t stretch-backports linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')

现在就可以安装包nvidia-driver了

apt-get update
apt-get install -t stretch-backports nvidia-driver

DKMS会帮你的系统编译相应的nvidia模块然后重启你的电脑就可以开始狂欢了,图形驱动完美解决

对于其他的版本安装可以参考debian官方驱动安装指南

docker 权限问题

docker安装过程省略*

如果非管理员权限执行docker的命令会提示:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

  • 方案一
 sudo usermod -a -G docker $USER
  • 方案二
sudo addgroup --system docker
sudo adduser $USER docker
newgrp docker

安装oh my zsh以及配置超级好用的插件

为啥要特别提及这个?不就是一个普通辅助么

因为zsh实在太好用了,有了它,bash简直弱爆了,正所谓磨刀不误砍柴功

不多说直接开撸

安装

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

开启下插件

vim ~/.zshrc

找到plugin,我的是这样的

plugins=(
  git
  adb
  debian
  django
  emoji
  pyenv
  sudo
  tmux
  virtualenv
  vim-interactio
  vi-mode
  zsh-syntax-highlighting
)

效果图 zsh 终端上有git的提示

zsh2 输命令会有颜色提示对错,需要安装zsh-syntax-highlighting插件

当然还有各种各样的主题,比如我的远程主机使用的是这样的 remote

编辑刚才的配置文件,修改主题为ZSH_THEME="agnoster"然后重启终端即可 觉的强大好用的话就设置为默认的shell

chsh -s /bin/zsh

基础环境说了这么多就不继续了

下面说说和.net相关的。

首先如果安装dotnet core的sdk就看官方介绍即可

官网介绍

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/9/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list

sudo apt-get update
sudo apt-get install dotnet-sdk-2.1

输入dotnet --info验证完美

dotnet

私有的nuget源怎么配置

我们公司会架设自己的nuget服务器,目前linux下不支持加密存储的配置,所以我都是配置明文密码到配置中

具体可以参考我的另一篇文章在linux下设置私有的nuget

简而言之就是编辑~/.nuget/NuGet/NuGet.Config

如下

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="https://www.nuget.org/api/v2/" value="https://www.nuget.org/api/v2/" />
    <add key="xxxyyy" value="https://nuget.xxxxxxx.com/nuget" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageSourceCredentials>
     <xxxyyy>
      <add key="Username" value="xxx" />
      <add key="ClearTextPassword" value="xxx" />
    </xxxyyy>
  </packageSourceCredentials>
</configuration>

现在再执行dotnet restort就完美还原了

dotnet core 开发工具推荐

a. 主力Jetbrains的Rider

除了内存占用非常大点之外,基本可以胜任VS的工作,智能感知非常棒棒,调试非常方便

如下图 rider


b. 小刀Visual Studio Code

现在你看到的这篇文章就是在vscode中打出来的,借助强大的插件。简直是利器

所以我现在写写小的dotnet core项目,Python,或者PHP等等我都会优选选择vscode,强推!

vscode


数据库管理工具我使用的是开源免费跨平台的Dbeaver 支持MySQL, PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access 十分强大

这样子的

地址


Redis管理工具

可以的话自己编译Redis Desktop Manager

我使用的是开源跨平台的Medis,可以说地十分优雅了 直达github

medis

提示下作者没有打linux包,所以自己编译

编译步骤

git clone https://github.com/luin/medis
npm install
npm run build
npm run electron

然后写个启动脚本

cd your-path
npm run electron

最后写个desktop配置添加到桌面,具体有兴趣的留言再补充吧


Git 图形管理工具 gitkraken

图

IM工具

目前我们公司的工作流是基于谷歌的,基本可以使用Google全家桶,所以没有腾讯qq这种牵绊

但是实在需要的,可以使用web版本

我自己装了个github上一个基于electron的微信

基本功能都有


如果需要办公的可能要钉钉也是github上找的

dinbgding也有有人打包好了 dingtalk


我们公司内部还比较潮的使用了slack来协作

也有slack的客户端

如下

slack

邮件什么的跟不用说

绝地妥妥的

  • 输入法

我推荐谷歌输入法,喜欢国产的可以使用sogou出的搜狗输入法linux

都用过,值的入手,还没广告 官网deb包

  • 顺带提下WPS这个办公套件

linux下也可以使用,还是没广告,不过我看自带的libreoffice也是够我用的了

毕竟开发的,编辑的东西也不多,实在不行我直接丢到Google在线编辑去或者使用石墨文档和腾讯文档

已经很成熟了 WPS linux版本

  • 音乐有网易云音乐linux版本

网易云音乐

其他的chrome和Firefox之类的都有就不说了

最后全家福

全集

其他

基本上要有的也差不多了

  • 其他方面的话补充下就是如果安装xrdp远程到这电脑之类的
  • 开启内网穿透远程连接
  • 使用好看的主题之类的

暂时不想写,有必要再继续写

以上 欢迎各位反馈问题,提出来研究研究

文章首发于here2say

author:Hoyho

转载请保留此备注即可