Ubuntu通过netplan来配置网卡,为了研究netplan的使用方法和实现原理,我们首先通过编译安装的方法,重新定制netplan。 本文记录编译netplan的方法。
安装依赖 netplan有众多的依赖,成功安装依赖是重中之重。在编译netplan之前,请读者按如下方法安装所有依赖。
首先 ,安装基本软件包以及开发库
1 2 3 $ sudo apt install -y meson make gcc $ sudo apt install -y python3-pip $ sudo apt install -y libglib2.0-dev libyaml-dev libsystemd-dev libcmocka-dev
然后 ,安装必要的Python模块 pytest
使用如下命令安装pytest:
1 2 3 $ pip3 install pytest $ echo 'export PATH="/home/mancode/.local/bin:$PATH"' >> ~/.bashrc $ ln -s /home/mancode/.local/bin/pytest /home/mancode/.local/bin/pytest3
命令执行过程如下图所示:
然后 ,安装必要的Python模块 coverage
使用如下命令安装coverage:
1 2 $ pip3 install coverage $ ln -s /home/mancode/.local/bin/coverage /home/mancode/.local/bin/coverage-3
命令执行过程如下图所示:
编译安装 为了研究netplan最终安装了哪些可用文件,我们将文件安装到指定目录 /home/mancode/apps/netplan ,这样利于我们研究生成的文件。
首先 ,修改Makefile,修改内容如下图所示:
然后 ,开始编译,使用如下命令:
然后 ,编译成功之后,使用如下命令安装文件到 /home/mancode/apps/netplan 目录:
1 $ make DESTDIR=/home/mancode/apps/netplan install
最后 ,安装成功之后,我们看下最终文件目录结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 mancode@manos:~/apps/netplan$ tree . . ├── include │ └── netplan │ ├── netdef.h │ ├── netplan.h │ ├── parse.h │ ├── parse-nm.h │ ├── state.h │ ├── types.h │ └── util.h ├── lib │ ├── python3 │ │ └── dist-packages │ │ └── netplan │ │ ├── __init__.py │ │ ├── netdef.py │ │ ├── _netplan_cffi.cpython-310-x86_64-linux-gnu.so │ │ ├── parser.py │ │ ├── state.py │ │ └── _utils.py │ ├── systemd │ │ └── system-generators │ │ └── netplan -> ../../../libexec/netplan/generate │ └── x86_64-linux-gnu │ ├── libnetplan.so -> libnetplan.so.1 │ ├── libnetplan.so.1 │ └── pkgconfig │ └── netplan.pc ├── libexec │ └── netplan │ ├── generate │ └── netplan-dbus ├── sbin │ └── netplan -> ../share/netplan/netplan.script ├── share │ ├── dbus-1 │ │ ├── system.d │ │ │ └── io.netplan.Netplan.conf │ │ └── system-services │ │ └── io.netplan.Netplan.service │ ├── doc │ │ └── netplan │ │ └── examples │ │ ├── bonding_router.yaml │ │ ├── bonding.yaml │ │ ├── bridge_vlan.yaml │ │ ├── bridge.yaml │ │ ├── dhcp_wired8021x.yaml │ │ ├── dhcp.yaml │ │ ├── direct_connect_gateway_ipv6.yaml │ │ ├── direct_connect_gateway.yaml │ │ ├── dummy-devices.yaml │ │ ├── infiniband.yaml │ │ ├── ipv6_tunnel.yaml │ │ ├── loopback_interface.yaml │ │ ├── modem.yaml │ │ ├── network_manager.yaml │ │ ├── offload.yaml │ │ ├── openvswitch.yaml │ │ ├── route_metric.yaml │ │ ├── source_routing.yaml │ │ ├── sriov_vlan.yaml │ │ ├── sriov.yaml │ │ ├── static_multiaddress.yaml │ │ ├── static_singlenic_multiip_multigateway.yaml │ │ ├── static.yaml │ │ ├── virtual-ethernet.yaml │ │ ├── vlan.yaml │ │ ├── vrf.yaml │ │ ├── vxlan.yaml │ │ ├── windows_dhcp_server.yaml │ │ ├── wireguard.yaml │ │ ├── wireless_adhoc.yaml │ │ ├── wireless_wpa3.yaml │ │ ├── wireless.yaml │ │ ├── wpa3_enterprise.yaml │ │ └── wpa_enterprise.yaml │ └── netplan │ ├── netplan_cli │ │ ├── cli │ │ │ ├── commands │ │ │ │ ├── apply.py │ │ │ │ ├── generate.py │ │ │ │ ├── get.py │ │ │ │ ├── info.py │ │ │ │ ├── __init__.py │ │ │ │ ├── ip.py │ │ │ │ ├── migrate.py │ │ │ │ ├── set.py │ │ │ │ ├── sriov_rebind.py │ │ │ │ ├── status.py │ │ │ │ └── try_command.py │ │ │ ├── core.py │ │ │ ├── __init__.py │ │ │ ├── ovs.py │ │ │ ├── sriov.py │ │ │ ├── state_diff.py │ │ │ ├── state.py │ │ │ └── utils.py │ │ ├── configmanager.py │ │ ├── _features.py │ │ ├── __init__.py │ │ └── terminal.py │ └── netplan.script └── usr └── share └── bash-completion └── completions └── netplan 28 directories, 80 files mancode@manos:~/apps/netplan$
错误 1 2 3 4 5 6 7 8 9 mancode@manos:~/objs/netplan-1.0$ make meson compile -C _build --verbose ERROR: Current directory is not a meson build directory: `/home/mancode/objs/netplan-1.0/_build`. Please specify a valid build dir or change the working directory to it. It is also possible that the build directory was generated with an old meson version. Please regenerate it in this case . make: *** [Makefile:7: default] Error 1 mancode@manos:~/objs/netplan-1.0$
解决方法:先执行make clean,然后再make即可解决。