目标:把一台虚拟机设置成网络服务器+啥都能干的电脑
目录
虚拟机的安装
虚拟机的基本配置
一、换源
二、安装vmtool(仅限于在上一步不听话取消更新的同学)
三、安装nginx(听话的同学)
四、安装MySQL,php,wordpress
五、python常用库安装与ide环境设置
六、c/c++常用库安装与ide环境设置
虚拟机的形而上学
一、electron-ssr
最近想用虚拟机搭个网络服务器,原以为两三天就会搞定,但我却估计错了它的复杂程度。光是重装就已经四五遍了,更别提配置很多东西,为了避 坑,也为了之后的安装之路顺遂平安,我写了这篇帖子,帮助新入坑的萌 新 避 坑!!!!!!!!!!
虚拟机的安装
安装之前的小tips:
如果电脑内存不够,千万别安装在本机上,你会非常后悔,建议自己买个固态硬盘,再来个好点的硬盘盒,所有虚拟机的设置全安在固态硬盘上
在这之后,噩梦才刚刚开始
首先你需要
VMware Workstation Pro
ubuntu-20.04.3-desktop-amd64.iso
在virtualbox和vmware之间,请你一定要选择vmware,它会比virtualbox好用的多
强烈建议安装vmware的专业版,不然复杂程度可能会超乎想象,特别是你某一步安错的时候
这两个都建议用迅雷安装,会很快
接下来就是配置安装
自己设置在哪个盘就安装在哪里
这里,请设成100G,不要吝惜你的内存,否则扩容是个大问题
然后点一下新CD适配器这里,把光盘烧进去
好的,请开始下一场表演:虚拟机的烧录
请在界面里开启你的虚拟机,就是那个绿色的箭头
有如下界面是正确的:
下一个界面会问你怎么安装
这里一定要选普通安装(nomal),我忘截图了,如果不清醒的话多去看看别人的博客,百度谷歌都没问题
像展示的这样选,弹出的这个窗口选continue
好的,接下来,请耐心等待,它让你重启,你就重启,不要犹豫
你会看到黑屏,还有一句话,大意是如果确定删除安装包你就按下Enter键,此时果断摁下
然后你会看到让你登录账号的选项,你有谷歌账户就登录谷歌,有其他就登录其他,这里不再赘述
最好是登录成功,不然会有更多东西让你头疼,没有请注册一个,有加速器的也赶快打开
假设你已经设置完成,这个时候会有一个安装包弹出来,问你要不要安
这个一定要安装,因为它包括很多底层的依赖库,vmtool等等都包含在内
这期间时间会很漫长,你可以做一些别的东西,看书看电视剧,听音乐,吃饭都可以,唯独不要点下cancel
它可能会因为网络问题失败很多次,但请你以最宽广的胸怀包容它的过失,不要放弃,多下载几遍,反复下载,相信功夫一定不负有心人
更新完毕之后,请保留快照,这样可以在配置失败的时候进行回滚,而不是重装系统
虚拟机的基本配置
一、换源
点击一下software&update那个图标,
去选择一下other
然后选择清华源,下载东西会快一些
命令行方式可以参考别的博客,小白看我这个就没问题
之后让你干啥你干啥,别取消别跳过,reload之后reboot
不reboot也可以,你看看自己是否可以用清华源下载东西,可以的话就不用重新登录了
二、安装vmtool(仅限于在上一步不听话取消更新的同学)
这样复制文件就可以直接从本机拖到虚拟机
不要用老式的光盘烧录方法,对我们亲爱的Ubuntu 20.04系统是完全不管用的,你要是头铁也可以试试,总会在最后一步让你崩溃
进入终端,输入三行命令
sudo apt upgrade sudo apt install open-vm-tools-desktop -y sudo reboot
耐心等待执行
三、安装nginx(听话的同学)
进入命令行
sudo su apt-get update apt-get upgrade apt-get install nginx
打开localhost
不听话的同学,请出门左转,或回滚快照,或重装系统,或点击updata图标,争取重新安装
不要被没用且繁杂的安装方式浪费时间和资源
四、安装MySQL,php,wordpress
apt-get install mysql-server
mysql_secure_installation
之后可以这样设置
不要跳步,一步一步来,否则你一定后悔
具体设置可以参见这篇博客,写的很详细
ubuntu搭建lnmp+wordpress_mobius0816的博客-CSDN博客
最后效果是这样的
五、python常用库安装与ide环境设置
先安装一下常用的库和依赖库
sudo apt install python3-pip sudo apt-get install python3.8-dev python3.8-tk tk-dev sudo apt-get install libfreetype6-dev g++ pip3 install matplotlib pip3 install pygal pip3 install pygal_maps_world pip3 install requests
然后可以输入python3,并在命令行内进行测试
考虑了很久,最后ide还是想着用pycharm,简单易用,设置也方便
官网链接:Thank you for downloading PyCharm!
#将安装包拷到桌面,然后执行如下命令(将解压后的包放在downloads目录) tar -zxvf /homeDesktop/pycharm-community-2021.3.1.tar.gz -C /homeDownloads #****为用户名 cd /homeDownloads/pycharm-community-2021.3.1/bin ./pycharm.sh
之后就可以照着提示设置了
如果想要改变环境变量什么的,可以看官方文档
六、c/c++常用库安装与ide环境设置
c/c++我还是选择vim,不是说vscode不好,只是觉得在Linux系统上至少要保留一点个性
sudo apt-get install vim vim-scripts vim-doc #网页版中文帮助文档网址http://vimcdoc.sourceforge.net/doc/help.html cd ~ gedit .vimrc
然后在这个文档中复制如下内容:
" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
debian.vim
" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible
" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
syntax on
colorscheme ron " elflord ron peachpuff default
" detect file type
filetype on
filetype plugin on
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark
" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif
"have Vim load indentation rules and plugins according to the detected filetype
filetype plugin indent on
endif
" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set ignorecase
"set smartcase
set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
"set smartindent " 智能对齐方式
set tabstop=4 " 设置制表符(tab键)的宽度
set softtabstop=4 " 设置软制表符的宽度
set shiftwidth=4 " (自动) 缩进使用的4个空格
set cindent " 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式
"set backspace=2 " 设置退格键可用
set showmatch " 设置匹配模式,显示匹配的括号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠标
set number " Enable line number "显示行号
"set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条
"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式
"--find setting--
set incsearch " 输入字符串就显示匹配点
set hlsearch
之后的界面中,就有语法高亮,段落空格等功能了
开始安装vim连带的一些库
#查看系统中已有的vim-scripts中包含的插件及其状态 vim-addons status #因为ctags太老已经安不上了,所以这里用exuberant-ctags代替 sudo apt-get install exuberant-ctags mkdir .vim cd .vim mkdir plugin mkdir doc vim-addons install omnicppcomplete sudo vim /home.vimrc
然后把这些内容复制进去
"-- omnicppcomplete setting -- " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码 imap" 按下F2根据头文件内关键字补全 imap set completeopt=menu,menuone " 关掉智能补全时的预览窗口 let OmniCpp_MayCompleteDot = 1 " autocomplete with . let OmniCpp_MayCompleteArrow = 1 " autocomplete with -> let OmniCpp_MayCompleteScope = 1 " autocomplete with :: let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert) let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window let OmniCpp_GlobalScopeSearch=1 " enable the global scope search let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members "let OmniCpp_DefaultNamespaces=["std"] let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column let OmniCpp_ShowAccess=1
然后是其他的几个库:taglist库
vim-addons install taglist sudo vim /home.vimrc
把这些内容复制进去:
"-- Taglist setting -- let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行 let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边 let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表 let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏 let Tlist_Exit_onlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim "是否一直处理tags.1:处理;0:不处理 let Tlist_Process_File_Always=1 "实时更新tags let Tlist_Inc_Winwidth=0
文件浏览器和缓冲区管理器WinManager:
vim-addons install winmanager sudo vim /home.vimrc
把这些内容复制进去:
"-- WinManager setting -- let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件 "let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim nmap wm :WMToggle
buffer管理器MiniBufferExplorer:
vim-addons install minibufexplorer sudo vim /home.vimrc
把这些内容复制进去:
" -- MiniBufferExplorer -- let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口 let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭头,可以切换到当前窗口的上下左右窗口 let g:miniBufExplMapCTabSwitchBufs = 1 " 启用以下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持 "let g:miniBufExplMapCTabSwitchWindows = 1 " 启用以下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持 let g:miniBufExplModSelTarget = 1 " 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer "--fold setting-- set foldmethod=syntax " 用语法高亮来定义折叠 set foldlevel=100 " 启动vim时不要自动折叠代码 set foldcolumn=5 " 设置折叠栏宽度 "-- QuickFix setting -- " 按下F6,执行make clean map:make clean " 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息 map :make :copen " 按下F8,光标移到上一个错误所在的行 map :cp " 按下F9,光标移到下一个错误所在的行 map :cn " 以上的映射是使上面的快捷键在插入模式下也能用 imap :make clean imap :make :copen imap :cp imap :cn
cscope:
在你需要浏览源码的根目录下使用下面命令:$cscope -Rbkq
sudo apt-get install cscope sudo vim /home.vimrc
把这些内容复制进去:
"-- Cscope setting --
if has("cscope")
set csprg=/usr/bin/cscope " 指定用来执行cscope的命令
set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
set cst " 同时搜索cscope数据库和标签文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果
set nocsverb
if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map :cs add ./cscope.out . :cs reset
imap :cs add ./cscope.out . :cs reset
" 将:cs find c等Cscope查找命令映射为c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap s :cs find s =expand("") :copen
nmap g :cs find g =expand("")
nmap d :cs find d =expand("") :copen
nmap c :cs find c =expand("") :copen
nmap t :cs find t =expand("") :copen
nmap e :cs find e =expand("") :copen
nmap f :cs find f =expand("")
nmap i :cs find i =expand("") :copen
使用时:
为源码建立一个cscope数据库
在根目录下
cscope -Rbq ls cscope.* #cscope.in.out cscope.out cscope.po.out :cs add cscope.out #末行模式下输入 #cscope数据库到vim
大概就是这种显示页面:
之后就可以快乐使用vim了
相关命令帮助
进入vim后用命令":Tlist"打开/关闭taglist窗口 帮助文档 :help taglist.txt :WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage 文件浏览器命令(在文件浏览器窗口中使用)或双击 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件 如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件 刷新列表 - 返回上一层目录 c 使浏览目录成为vim当前工作目录 d 创建目录 D 删除当前光标下的目录或文件 i 切换显示方式 R 文件或目录重命名 s 选择排序方式 r 反向排序列表 x 定制浏览方式, 使用你指定的程序打开该文件 winmanager帮助文档 :help winmanager netrw帮助文档 :help netrw 移到上一个buffer 移到下一个buffer 打开光标所在的buffer d 删除光标所在的buffer 折叠方式foldmethod vim提供以下6种方法来选定折叠方式: manual 手工定义折叠 indent 更多的缩进表示更高级别的折叠 expr 用表达式来定义折叠 syntax 用语法高亮来定义折叠 diff 对没有更改的文本进行折叠 marker 对文中的标志折叠 折叠级别foldlevel 'foldlevel' 是个数值选项:数字越大则打开的折叠更多。 当 'foldlevel' 为 0 时,所有的折叠关闭。 当 'foldlevel' 为正数时,一些折叠关闭。 当 'foldlevel' 很大时,所有的折叠打开。 折叠栏foldcolumn 'foldcolumn' 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。 一个打开的折叠由一栏来表示,顶端是 '-',其下方是 '|'。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。 一个关闭的折叠由 '+' 表示。 当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。 在折叠栏点击鼠标,可以打开和关闭折叠: - 点击 '+' 打开在这行的关闭折叠 - 在任何其他非空字符上点击,关闭这行上的打开折叠 za 打开/关闭在光标下的折叠 zA 循环地打开/关闭光标下的折叠 zo 打开 (open) 在光标下的折叠 zO 循环打开 (Open) 光标下的折叠 zc 关闭 (close) 在光标下的折叠 zC 循环关闭 (Close) 在光标下的所有折叠 zM 关闭所有折叠 zR 打开所有的折叠 帮助文档 :help usr_28.txt :help fold.txt :help usr_30 :help quickfix 下面的命令运行 "make" (包括你所给出的参数) 程序并捕捉其运行结果: > :make {arguments} 如果编译时出现错误,按 ,回到vim界面,看不到出错信息了!这时,可以运行以下命令 :cw[indow] 打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置 :cn[ext] 光标移到下一个错误所在的行 :cp[revious] 光标移到上一个错误所在的行 :cfirst 到第一处错误 :clast 到最后一处错误 :cc 空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令 :cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令) 帮助文档 :help if_cscop 注意:帮助文档if_cscop中,快捷键映射nmap i :cs find i ^ =expand(" ") $ 是有误的! 比如光标“header.h”上按下 i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将 i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap i :cs find i =expand(" ")
再就是vim自带的一些常用命令也需要记忆
虚拟机的形而上学
一、electron-ssr



