nginx的重装

起因

之前在网上看文章提到说,通过apt-get的方式安装nginx,可能安装不是最新版本的情况,考虑到在Ubuntu下第一次安装nginx,以后肯定会有卸载重新安装新版本的需求,刚好刚开始学习nginx,索性练习下卸载重装的过程。

安装

使用Ubuntu下的包管理工具apt来安装nginx

$ sudo apt-get install nginx

卸载

同样使用apt来卸载nginx

$ sudo apt-get remove nginx

sudo apt-get autoremove命令帮我们卸载不再需要的依赖包

在这里我们卸载nginx相关的依赖包

$ sudo apt-get autoremove

删除nginx配置文件夹

$ sudo rm -rf /etc/nginx

重新安装nginx

# 更新源$ sudo apt update$ sudo apt-get install nginx

然而控制台报错:

Jobfornginx.service failed because the controlprocessexitedwitherrorcode. See"systemctl status nginx.service"and"journalctl -xe"fordetails.invoke-rc.d: initscript nginx, action"start"failed.dpkg:errorprocessingpackagenginx-core (--configure):subprocess installed post-installation script returnederrorexitstatus1dpkg: dependency problems preventconfigurationofnginx: nginx dependsonnginx-core (>=1.10.3-0ubuntu0.16.04.2) | nginx-full (>=1.10.3-0ubuntu0.16.04.2) | nginx-light (>=1.10.3-0ubuntu0.16.04.2) | nginx-extras (>=1.10.3-0ubuntu0.16.04.2); however:Packagenginx-coreisnotconfigured yet.Packagenginx-fullisnotinstalled.Packagenginx-lightisnotinstalled.Packagenginx-extrasisnotinstalled. nginx dependsonnginx-core (<<1.10.3-0ubuntu0.16.04.2.1~) | nginx-full (<<1.10.3-0ubuntu0.16.04.2.1~) | nginx-light (<<1.10.3-0ubuntu0.16.04.2.1~) | nginx-extras (<<1.10.3-0ubuntu0.16.04.2.1~); however:Packagenginx-coreisnotconfigured yet. No apportreportwritten because theerrormessage indicates its a followuperrorfrom a previousfailure.Packagenginx-fullisnotinstalled.Packagenginx-lightisnotinstalled.Packagenginx-extrasisnotinstalled.dpkg:errorprocessingpackagenginx (--configure):dependency problems - leaving unconfiguredProcessing triggersforlibc-bin (2.23-0ubuntu9) ...Errors were encounteredwhileprocessing: nginx-core nginxE: Sub-process/usr/bin/dpkg returned anerrorcode (1)

查看nginx.service状态

$ systemctl status nginx.service

● nginx.service - A high performance web serverandareverse proxy server  Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)  Active: failed (Result: exit-code) since Sat2018-03-1723:16:40CST;1min18s ago  Process:26795ExecStartPre=/usr/sbin/nginx -t -q -g daemonon;master_processon; (code=exited,status=1/FAILURE) Main PID:18259(code=exited, status=0/SUCCESS)Mar1723:16:40VM-0-5-ubuntu systemd[1]: Starting A high performance web serverandareverse proxy server...Mar1723:16:40VM-0-5-ubuntu nginx[26795]: nginx: [emerg]open()"/etc/nginx/nginx.conf"failed (2: No suchfileordireMar1723:16:40VM-0-5-ubuntu nginx[26795]: nginx: configurationfile/etc/nginx/nginx.conf test failedMar1723:16:40VM-0-5-ubuntu systemd[1]: nginx.service: Controlprocessexited, code=exited status=1Mar1723:16:40VM-0-5-ubuntu systemd[1]: FailedtostartA high performance web serverandareverse proxy server.Mar1723:16:40VM-0-5-ubuntu systemd[1]: nginx.service: Unit entered failed state.Mar1723:16:40VM-0-5-ubuntu systemd[1]: nginx.service: Failedwithresult'exit-code'.

仔细看报错信息,获取到两个信息点:

Package nginx-core is not configured yet.

Package nginx-full/nginx-light/nginx-extras is not installed.

于是上网搜,网上找说可能是apache占用了80端口导致报错

查看端口占用情况

$ sudo netstat -nlp

Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program nametcp000.0.0.0:220.0.0.0:*              LISTEN1287/sshdudp000.0.0.0:680.0.0.0:*891/dhclientudp00172.21.0.5:1230.0.0.0:*1231/ntpdudp00127.0.0.1:1230.0.0.0:*1231/ntpdudp000.0.0.0:1230.0.0.0:*1231/ntpdudp600:::123:::*1231/ntpd

发现80端口没被占用,而且systemctl status nginx.service的提示信息也没提及80端口被占用,如果提示信息中说80端口被占用,可以执行以下两步试试:

终止apache运行

$ sudo service apache2 stop

重新安装nginx

$ sudo apt-get install nginx

了解详细信息请看askubuntu上的提问

上述情况与我的并不相符,于是换个思路,报错信息中提及nginx的配置文件不存在,思考为什么卸载重装nginx,却没有生成配置文件?

和第一次安装的时候不一样,然后百度上搜nginx卸载重装后配置文件没有重新生成,找到了类似的问题,给出了如下的操纵步骤:

卸载nginx不保留配置文件

$ sudo apt-get--purge remove nginxReading package lists... DoneBuilding dependency treeReading state information... DoneThe following packages were automatically installed and are no longer required:  fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4  libxslt1.1 nginx-common nginx-coreUse'sudo apt autoremove'toremove them.Thefollowingpackages will be REMOVED:  nginx*0upgraded,0newly installed,1toremoveand205notupgraded.2notfully installedorremoved.Afterthis operation,37.9kB diskspacewill be freed.Doyou wanttocontinue? [Y/n] y(Readingdatabase...66386filesanddirectories currently installed.)Removing nginx (1.10.3-0ubuntu0.16.04.2) ...Setting up nginx-core (1.10.3-0ubuntu0.16.04.2) ...Jobfornginx.servicefailedbecause the control process exitedwitherrorcode. See"systemctl status nginx.service"and"journalctl -xe"fordetails.invoke-rc.d: initscript nginx,action"start"failed.dpkg:errorprocessingpackagenginx-core (--configure):subprocess installed post-installation script returnederrorexitstatus1Errorswere encounteredwhileprocessing: nginx-coreE: Sub-process /usr/bin/dpkg returned anerrorcode (1)

卸载自动安装且不再需要的依赖包

$ sudo apt-get autoremoveReading package lists... DoneBuilding dependency treeReading state information... DoneThe following packages will be REMOVED:  fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4  libxslt1.1nginx-commonnginx-core0upgraded,0newly installed,13to removeand205notupgraded.1notfully installedorremoved.After this operation,9,745kB disk space will be freed.Doyou want to continue? [Y/n] y(Reading database ...66383filesanddirectories currently installed.)Removing nginx-core (1.10.3-0ubuntu0.16.04.2) ...Removing libgd3:amd64 (2.1.1-4ubuntu0.16.04.8) ...Removing libfontconfig1:amd64 (2.11.94-0ubuntu1.1) ...Removing fontconfig-config (2.11.94-0ubuntu1.1) ...Removing fonts-dejavu-core (2.35-1) ...Removing libtiff5:amd64 (4.0.6-1ubuntu0.2) ...Removing libjbig0:amd64 (2.1-3.1) ...Removing libjpeg8:amd64 (8c-2ubuntu8) ...Removing libjpeg-turbo8:amd64 (1.4.2-0ubuntu3) ...Removing libvpx3:amd64 (1.5.0-2ubuntu1) ...Removing libxpm4:amd64 (1:3.5.11-1ubuntu0.16.04.1) ...Removing libxslt1.1:amd64 (1.1.28-2.1ubuntu0.1) ...Removing nginx-common(1.10.3-0ubuntu0.16.04.2) ...Processing triggers for libc-bin (2.23-0ubuntu9) ...Processing triggers for man-db(2.7.5-1) ...

筛选已安装软件包中与nginx有关的

$ dpkg --get-selections |grepnginxnginx-common                                    deinstall

卸载nginx-common不保留配置文件

$ sudo apt-get--purge remove nginx-commonReading package lists... DoneBuilding dependency treeReading state information... DoneThe following packages will be REMOVED:  nginx-common*0upgraded,0newly installed,1toremoveand205notupgraded.After this operation,0Bofadditional diskspacewill be used.Do you wanttocontinue? [Y/n] y(Reading database ...66243filesanddirectoriescurrently installed.)Removing nginx-common (1.10.3-0ubuntu0.16.04.2) ...Purging configurationfilesfornginx-common (1.10.3-0ubuntu0.16.04.2) ...dpkg: warning:whileremoving nginx-common,directory'/var/www/html'notemptysonotremoved

重新安装nginx

$ sudo apt-getinstall nginx...

查看版本号,执行nginx配置文件语法检测

$ nginx -vnginxversion: nginx/1.10.3(Ubuntu)$ sudo nginx -tnginx: the configurationfile/etc/nginx/nginx.confsyntaxisoknginx: configurationfile/etc/nginx/nginx.conftestissuccessful

虽然nginx已经重装好了,但是一路下来还有几个困惑:

apt-get autoremove到底是按什么规则卸载软件?

为什么nginx-common没有在一开始的时候卸载?

1. apt-get autoremove到底是按什么规则卸载软件?

apt-get autoremove:删除,自动安装的,且不再需要的

(不被其他软件当作依赖的)软件包

举个栗子: 通过apt-get方式安装nginx时,会通过引导自动安装所需的依赖包(nginx-core),而当我们卸载nginx后,

那些自动安装的依赖包就成为不再需要的软件包(nginx-core),通过apt-get autoremove会自动清理它们

既然会自动删除不再需要的软件包,那么为什么nginx-common没被删除?

2. 为什么nginx-common没有在apt-get autoremove的时候卸载?

不知道细心的童鞋发现没,我们在卸载nginx的时候,

手动删除了nginx的配置文件夹(sudo rm -rf /etc/nginx)。

那这些配置文件夹和nginx-common软件包有什么关系呢?

通过查找ubuntu packages,找到了Ubuntu16.0.4下nginx-common软件包的文件清单

按照清单上的目录手动排查,发现本机上除了手动删除的/etc/nginx目录不存在,文件清单内的其他文件都没有被删除,

猜测可能是nginx-common软件包完整性被破坏,导致autoremove的时候没有被删除,当然这只我的猜测。

问题回答后续补充:

整理完全卸载nginx命令时,发现执行如下命令,ngnix的配置文件并没有被删除

$ sudo apt-get remove --purge nginx

查阅ubuntu packages发现,nginx依赖nginx-core,nginx-core依赖nginx-common,且其中nginx的配置文件属于nginx-common软件包配置文件的一部分。

执行如下命令进一步验证

# 卸载nginx-common ,nginx配置文件不会被删除$ sudo apt-getremove nginx-common...# 卸载nginx-common,nginx配置文件已经被删除(包括但不限于)$ sudo apt-getremove--purge nginx-common$ find /etc/nginx/find: ‘/etc/nginx/’: No suchfileordirectory

推翻之前的猜测:

apt-get autoremove执行时,nginx-common软件包已经被选择用于卸载( deinstall ),但是实际还没有卸载。

$ dpkg --get-selections| grep nginxnginx-commondeinstall

了解更多关于deinstall,点击这里,如果有知道为什么的同学请不吝赐教。

命令汇总

# 完全卸载nginx$ sudo apt-getremove --purge nginx$ sudo apt-getautoremove --purge# 更新nginx,保留配置文件# 亲测nginx.conf不会被删除和覆盖,但保险起见还是建议先备份$ sudo apt-getremove nginx$ sudo apt-getautoremove$ sudo apt update$ sudo apt-getinstall nginx# 安装软件包# sudo apt-get install 软件包名称`# eg: $ sudo apt-getinstall nginx# 卸载软件包# sudo apt-get remove 软件包名称# eg: $ sudo apt-getremove nginx# 卸载软件包且不保留配置文件# sudo apt-get remove --purge 软件包名称# eg:$ sudo apt-getremove --purge nginx# 卸载自动安装的软件包且不保留配置文件# sudo apt-get autoremove --purge# 列出本地软件包列表# dpkg --get-selections [| grep 筛选关键字]# eg:(列出本地所有软件包)$ dpkg --get-selections# eg:(列出本地与ngnix有关的软件包)$ dpkg --get-selections | grep nginx# 查看进程信息# ps -ef [| grep 筛选关键字]# eg:(列出所有进程信息)$ ps -ef# eg:(列出与nginx有关的进程信息)$ ps -ef | grep nginx# 查看端口占用信息$ sudo netstat -nlp

参考链接汇总

Package nginx-core not configured yet.Sub-process :/user/bin/dpkg returned an error code(1)

nginx fail to install on Ubuntu 15.10 server

Ubuntu 14.04上卸载nginx之后重新安装没有重新生成配置文件的解决方法

在 xenial 发行版中 all 硬件架构下的 nginx-common 软件包文件清单

What is difference between the options “autoclean”, “autoremove” and “clean”?

dpkg --get-selections shows packages marked “deinstall”

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容