最傻的代码错误:一个空格酿成的血案

Bumblebee 是 Linux 平台上的一款 NVidia 显卡的辅助工具,它可以让 NVidia 显卡启用 Optimus 技术,就是在笔记本电脑平台上由独立显卡渲染,集成显卡显示。其实就是显卡硬件加速。

这是一款非常有用的工具,但是它曾经出过一次很严重的 Bug(虽然是 3 年前),因为一个空格,大群 Ubuntu 用户的 usr 文件夹被删除了。

那是一次 Git 更新,变动位于 install.sh:

@@ -37,7 +37,7 @@
  #    You should have received a copy of the GNU General Public License
  #    along with bumblebee.  If not, see <http://www.gnu.org/licenses/>.
  #
 -BUMBLEBEEVERSION=1.4.31
 +BUMBLEBEEVERSION=1.4.32
  
  
  ROOT_UID=0
 @@ -348,7 +348,7 @@ case "$DISTRO" in
    ln -s /usr/lib/mesa/ld.so.conf /etc/alternatives/gl_conf
    rm -rf /etc/alternatives/xorg_extra_modules
    rm -rf /etc/alternatives/xorg_extra_modules-bumblebee
 -  rm -rf /usr /lib/nvidia-current/xorg/xorg
 +  rm -rf /usr/lib/nvidia-current/xorg/xorg
    ln -s /usr/lib/nvidia-current/xorg /etc/alternatives/xorg_extra_modules-bumblebee
    ldconfig
   ;;

因为一个空格,删除指令从 /usr/lib/nvidia-current/xorg/xorg 变成了 /usr 和 /lib/nvidia-current/xorg/xorg 两个文件夹,而 /usr 目录就是你平时放你那一大堆程序的地方,包括 apt-get。。。

GitHub 上世界各地大批程序员疯狂吐槽这个 Bug:

「所以我得先格式化我的硬盘?」「是的,我一般用 Bumblebee 格式化。」

/usr/uploads/2014/01/3298154581

「你有没有装 Bumblebee?」「装了,但是我备份了 usr 文件夹。。。」

/usr/uploads/2014/01/2909647635

「他们会干掉我们,但他们不会干掉我们的 usr」

/usr/uploads/2014/01/723043973

「usr,为什么离开我?」

/usr/uploads/2014/01/1115107318

「Bumblebee,我找你有些话想说」

/usr/uploads/2014/01/3261213394

「usr?早在 2011 年 6 月就不见了,呵呵。」

/usr/uploads/2014/01/4006259684

SElinux 和 AppArmor 都无语了。。。

/usr/uploads/2014/01/2872907203

「我在公司服务器上装了 Bumblebee,现在我需要工作。。。」

/usr/uploads/2014/01/2792998614

「我不经常备份,但是我备份时总是太晚了。。。」

/usr/uploads/2014/01/2548332387

乔布斯:「你听说过 Bumblebee 吗?」比尔盖茨:「我建议所有 Linux 用户都装一个。」

/usr/uploads/2014/01/1807140881

低轨道黄蜂(Bumblebee)加农炮:

/usr/uploads/2014/01/3115206340

「你在 /usr 后加了个空格怎么了?那路径不存在。」「我没把路径用双引号括起来。。。」

/usr/uploads/2014/01/1434800310

「元首大人,我们在你的机器上装了 Bumblebee。」

/usr/uploads/2014/01/1519896961

选课系统坑爹
下一篇文章 »