博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang 退出chroot环境的方法
阅读量:5789 次
发布时间:2019-06-18

本文共 885 字,大约阅读时间需要 2 分钟。

chroot()是用linux的系统函数,能改变程序运行时参考的根目录。安装系统或者通过引导盘进入恢复系统时,可以通过chroot()修复GRUB,或者安装软件。

Golang的syscall包提供方法。

但进入chroot环境后,如何退出呢?目前我就碰到这个需求。翻遍syscall包,也没看到直接的退出方式。Google后发现,不止我一个人想这么做。有篇 给出了python的hack方案。照猫画虎,我用go试着做了一遍:

// hold our real root's file descriptor for switching back later    oldRootF, err := os.Open("/")    defer oldRootF.Close()    if err != nil {        glog.Warningf("fail to open root: %v\n", err)    }        // change working dir to old root    err = syscall.Chroot("/mnt/install")    if err != nil {        glog.Warningf("fail to chroot %v\n", err)    }        // do some stuff in new root         // switch back    err = oldRootF.Chdir()    if err != nil {        glog.Warningf("chdir() err: %v", err)    }    err = syscall.Chroot(".")    if err != nil {        glog.Warningf("chroot back err: %v", err)    }

其中的把戏在于,切根之前先保存旧根的文件FD。等到要切回来时,先把当前工作目录切回旧的根目录,再chroot到当前目录。

转载地址:http://trqyx.baihongyu.com/

你可能感兴趣的文章
201521123009 《Java程序设计》第1周学习总结
查看>>
年终述职--常见问题分析解答
查看>>
C#_细说Cookie_Json Helper_Cookies封装
查看>>
对事件循环的一点理解
查看>>
在mui中创建aJax来请求数据..并展示在页面上
查看>>
spring 之AOP
查看>>
总结 15/4/23
查看>>
守护进程
查看>>
Windows 7环境下网站性能测试小工具 Apache Bench 和 Webbench使用和下载
查看>>
C#常见错误解决方法
查看>>
安装cnpm (npm淘宝镜像)
查看>>
js 利用事件委托解决mousedown中的click
查看>>
游戏设计艺术 第2版 (Jesse Schell 著)
查看>>
Java 面向对象(基础) 知识点总结I
查看>>
miniUI mini-monthpicker ie8兼容性问题
查看>>
读书笔记《自控力》
查看>>
基于神念TGAM的脑波小车(1)
查看>>
ceph集群搭建Jewel版本
查看>>
HttpClient 解释
查看>>
111111
查看>>