YanZhirun's Blog

Ubuntu发行版安装wrapfs

研究生期间研究加密文件系统相关内容,采用堆栈式文件系统 Wrapfs 作为学习入口, 在使用过程中遇到一些问题,后期对其安装、配置流程进行整理,由于能力所限,难免存在疏漏,如有建议欢迎给我留言,或者通过 sa615371@mail.ustc.edu.cn 与本人交流讨论。

环境配置

  • Virtualbox:5.0.4
  • Ubuntu16.04.1 server32位发行版
  • 内核:4.4.0-36-generic
  • 768M内存

详细步骤

  1. 下载源码树

    sudo apt-cache search linux-source

    sudo apt-get install linux-source-4.4.0

  2. 解压源码

    sudo tar -xjf linux-source-4.4.0.tar.bz2

  3. 下载wrapfs 的patch

    补丁地址:http://download.filesystems.org/wrapfs/patches/

    选取最接近本机内核版本的补丁下载

    wget http://download.filesystems.org/wrapfs/patches/wrapfs-v4.4.6-94-gbd18b62.diff.gz

  4. 打补丁 解压
    打补丁到源码树对应位置(注意当前路径)

    sudo patch -p1 < /usr/src/linux-source-4.4.0/wrapfs-v4.4.6-94-gbd18b62.diff

    [打补丁到源码树对应位置]
  5. 安装必备编译包

    sudo apt-get install build-essential kernel-package libncurses5-dev

  6. 修改vermagic版本号
    打开源码根目录的Makefile ,修改 EXTRAVERSION 项。
    注意:要保持和当前系统可加载模块相同的vermagic ,如下图

    [修改vermagic版本号]
  7. 拷贝 Module.symvers Module.symvers 到源码处

    sudo cp /usr/src/linux-headers-4.4.0-36-generic/Module.symvers ./
    sudo cp /lib/modules/4.4.0-36-generic/modules.symbols ./

    可解决insmod: ERROR: could not insert module wrapfs.ko: Invalid module format 问题

  8. 编译模块

    • 拷贝当前系统的Module.symvers到wrapfs源码处
    [拷贝当前系统的Module.symvers]
    • 先在该源码树根目录执行make 生成必要的头文件(生成/include/generate/ 等包含版本信息的头文件),然后Ctrl+c强制停止。编译wrapfs模块

      make -C /usr/src/linux-source-4.4.0/linux-source-4.4.0/ M=$PWD modules

      可能需要添加CONFIG_WRAP_FS=m选项

      sudo make CONFIG_WRAP_FS=m –C /usr/src/linux-4.2.5/ M=$PWD modules

    • 查看模块信息和当前内核版本匹配

      modinfo ./wrapfs.ko

    [查看模块信息与当前内核版本匹配]
    • 挂载成功

      sudo insmod wrapfs.ko

    [挂载成功]

问题

问题: 无法卸载模块
场景复现: 成功insmod wrapfs 模块 重新编译新wrapfs模块,未卸载之前wrapfs模块,再次insmod wrapfs
解决: 重启,未找到简单不重启解决方案。

6和7 可以解决生成 .ko 文件却无法挂载的问题。

参考

Wrapfs: A Stackable Passthru File System

patch下载地址

更新源码树

module_layout version incompatibility