Linux环境搭建太慢?3步绕过90%配置坑
|
“这环境能不能先跑起来?”老张把键盘推远,屏幕还卡在apt-get install nginx那行,光标闪得跟垂死的萤火虫似的。我原以为只是源没换对,结果发现他连sudo都敲错了两次——不是输错密码,是压根没加sudo,就硬敲apt。会议室空调在滴水,嗒、嗒、嗒,声音比他敲命令还准。 去年4月份,需求评审那一刻,产品经理小杨把PRD翻到第7页说:“后端API要全走HTTPS,证书必须自签带SAN”。我就知道完了。不是嫌麻烦,是上回上线前夜,运维李工蹲在机房改Nginx配置,改了六遍——三次因为ssl_protocols写成ssl_protocol,一次漏了server_name _;,还有一次……算了,记不清是哪个版本了,反正重启完nginx -t直接报段错误,最后是用strace扒出来的,libc版本不兼容。白板笔没水了,我在墙上画了个箭头指向“TLS 1.2+”,墨迹干巴巴地断在半道上。 第一步:别装系统,拉镜像。不是Docker那种玩具镜像,是咱们自己build过、push过、tag过v2023.04.17的那个基础镜像。里面有预编译好的OpenSSL、带debug符号的glibc、/etc/skel里已经配好的bashrc别名——alias ll=‘ls -alhF’,alias gs=‘git status -s’,还有那行注释掉但留着的# export PS1=‘\\u@\\h:\\w\\$ ’。有人问为啥不用Alpine?我懒得解释,反正去年4月灰度那轮,三台Alpine机器全在openssl s_client连内网服务时卡住,查出来是musl和glibc对SOCK_CLOEXEC处理不一样。我原以为是网络问题,结果李工凌晨三点发我一张strace截图,里面writev调用直接被kernel截了,根本没进用户态。你信不信? 第二步:别写配置文件,写模板渲染。不是Jinja,不是Go template,就是sed。一行sed -i "s/{{HOSTNAME}}/$HOSTNAME/g" /etc/hosts,再一行sed -i "s/{{TIMEZONE}}/Asia\\/Shanghai/g" /etc/timezone。李工说太糙,我说比你上次手改28个.conf文件还糙?他手机一直在震,静音模式还嗡嗡震桌子,震得那摞打印的需求单边都卷起来了,没人收。第三步:别校验,直接跳过。certbot --non-interactive --standalone --agree-tos --email ops@xxx.com -d api.xxx.com,中间那个--dry-run你删掉。不是我不怕,是去年4月有个服务,非要用—dry-run跑通才敢上生产,结果发现—dry-run根本不走真实ACME challenge流程,它mock了一堆东西。等真正上,DNS记录延迟、CDN缓存、let’s encrypt rate limit全撞一块儿。漏了两个域名,漏了CA根证书更新——其实不是漏,是脚本里硬写了DST Root CA X3,而Let’s Encrypt早在3月就切到ISRG Root X1了。没人告诉我,还是李工自己grep出来的。 外卖汤洒了一点在桌上,我拿纸巾按了两下,汤渍洇开像块地图。小杨刚才举手说“要不要埋个转化漏斗看环境部署耗时?”,我差点笑出声。哪来的漏斗?你当这是用户点按钮?环境跑不起来,日志都不打,埋点脚本都没地方挂载。她笔记本合上了,屏幕反光里映出投影仪——对焦不准,字全是毛边,“/etc/nginx/conf.d/default.conf”那行字像被泡过水。优胜劣汰?不是服务器优胜劣汰,是人。谁还记得清所有路径优先级?谁还能每次背住systemctl daemon-reload和systemctl restart的区别?李工能,但他上个月提了转岗,现在新来的实习生小陈,在重装Ubuntu时又误点了“erase disk and install”,把测试库盘给格了。我说别慌,恢复快照就行,他说……算了,他说他没开快照。 我自己那份没人看的文档。就在Confluence里,标题叫《Linux初始化checklist v3》,最后更新时间去年4月16号。里面第5条写着:“确认/usr/local/bin下是否存在autoconf-2.69而非autoconf-2.68——后者在GCC 12.3+下生成configure脚本会丢失-L/opt/lib路径”。这话我写了,也验证过,但没人点开过。连我自己上周想查,都输错URL进了旧版wiki,首页还是2021年的欢迎语。你信不信?
文章配图,仅供参考 所以现在我的做法是:每次新需求评审前,先往钉钉群扔一个预编译包链接,名字就叫“别装了·拿去run”。里头有三个tar.xz:一个是带所有依赖的Python 3.9.16环境(含pyenv shim,含pip3.9指向正确的pip),一个是预patch过的Nginx 1.22.1(解决那个HTTP/2 stream window bug),还有一个是……算了,这个真不能说。我自己试过四次,每次都是同一台云主机,从重装系统到服务curl -I返回200,最短7分23秒,最长14分钟。中间有一次失败,是因为腾讯云上海区那个镜像仓库缓存坏了,拉下来的glibc是坏的——checksum对得上,md5sum也对得上,就是ldconfig崩。后来李工说,他们运维内部管这叫“假阴性”。椅子少一把。本来十个人的会,来了十一人。小陈坐折叠椅,腿伸不开,膝盖顶着桌子底下横梁,晃得整张桌子都在共振。我刚才说第三步的时候,他手机亮了一下,微信弹出一条:“师兄,我刚跑通你的deploy.sh,但是mysql.sock找不到……”我没回。反正今晚我不会登线上服务器。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


运维新手必避的5大服务器配置坑,第3个超90%人踩雷
嵌入式Linux开发者Unix环境搭建避坑指南
Linux数据库环境搭建:Ruby工程师的七步稳建指南
Linux运维老手也常踩的5个Unix环境搭建坑
Linux安全环境搭建:13年工程师实战指南


浙公网安备 33038102330471号