Upgrade dpu-utilities to version v1.4

Change between v1.3 and v1.4:
1. Add qtcfg to set/unset uds whitelist path
2. Use VSOCK as the default communication channel

Signed-off-by: Weifeng Su <suweifeng1@huawei.com>
This commit is contained in:
Weifeng Su 2023-06-02 03:15:19 +00:00
parent 7c3976f22f
commit 405a7550e4
7 changed files with 52 additions and 249 deletions

View File

@ -1,25 +0,0 @@
From 959f29ce47ff71cc40ffbd0857471b79074cb9a5 Mon Sep 17 00:00:00 2001
From: liqiang <liqiang64@huawei.com>
Date: Wed, 30 Nov 2022 20:30:29 +0800
Subject: [PATCH 1/3] add path put in xattr set
Signed-off-by: liqiang <liqiang64@huawei.com>
---
qtfs/qtfs_server/fsops.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/qtfs/qtfs_server/fsops.c b/qtfs/qtfs_server/fsops.c
index 6633f3c..48ec7ab 100644
--- a/qtfs/qtfs_server/fsops.c
+++ b/qtfs/qtfs_server/fsops.c
@@ -843,6 +843,7 @@ int handle_xattrset(struct qtserver_arg *arg)
qtfs_info("handle xattrset path:%s name:%s value:%s ret:%d size:%lu flags:%d", req->buf,
&req->buf[req->d.pathlen], &req->buf[req->d.pathlen + req->d.namelen], rsp->errno,
req->d.size, req->d.flags);
+ path_put(&path);
return sizeof(struct qtrsp_xattrset);
err_handle:
--
2.23.0

View File

@ -1,45 +0,0 @@
From 0038843dcd4ce52ce3ef2e9dd5ec145211e0f09c Mon Sep 17 00:00:00 2001
From: yangxin <245051644@qq.com>
Date: Mon, 5 Dec 2022 10:42:04 +0800
Subject: [PATCH 2/3] Add drop link and dentry invalid in unlink and rmdir.
Signed-off-by: yangxin <245051644@qq.com>
---
qtfs/qtfs/sb.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c
index 4ad4aed..5fd2c8f 100644
--- a/qtfs/qtfs/sb.c
+++ b/qtfs/qtfs/sb.c
@@ -989,6 +989,7 @@ int qtfs_rmdir(struct inode *dir, struct dentry *dentry)
struct qtreq_rmdir *req;
struct qtrsp_rmdir *rsp;
int ret;
+ struct inode *inode = d_inode(dentry);
if (!pvar) {
qtfs_err("Failed to get qtfs sock var\n");
@@ -1012,6 +1013,9 @@ int qtfs_rmdir(struct inode *dir, struct dentry *dentry)
}
qtfs_info("qtfs rmdir success:<%s>.\n", req->path);
qtfs_conn_put_param(pvar);
+ if (inode->i_nlink > 0)
+ drop_nlink(inode);
+ d_invalidate(dentry);
return 0;
}
@@ -1046,6 +1050,9 @@ int qtfs_unlink(struct inode *dir, struct dentry *dentry)
}
ret = rsp->errno;
qtfs_conn_put_param(pvar);
+ if (inode->i_nlink > 0)
+ drop_nlink(inode);
+ d_invalidate(dentry);
return ret;
}
--
2.23.0

View File

@ -1,119 +0,0 @@
From 7dfd4ec8ee7ab9034b35061567235c62d8c5522e Mon Sep 17 00:00:00 2001
From: YangXin <245051644@qq.com>
Date: Mon, 5 Dec 2022 21:43:26 +0800
Subject: [PATCH 3/3] enable rexec read net addr from config file.
Signed-off-by: YangXin <245051644@qq.com>
---
qtfs/rexec/client.go | 3 ++-
qtfs/rexec/common.go | 33 +++++++++++++++++++++++++++++++--
qtfs/rexec/server.go | 6 +++++-
3 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/qtfs/rexec/client.go b/qtfs/rexec/client.go
index 922040d..13b63f5 100644
--- a/qtfs/rexec/client.go
+++ b/qtfs/rexec/client.go
@@ -18,6 +18,7 @@ import (
const (
rexecPidDir = "/var/run/rexec/pids"
+ role = "client"
)
var pidPath string
@@ -111,7 +112,7 @@ func main() {
if err := SetParentDeathSignal(uintptr(syscall.SIGHUP)); err != nil {
log.Printf("Failed to set Parent Death Signal:%s", err.Error())
}
- na, err := parseNetAddr()
+ na, err := parseNetAddr(role)
if err != nil {
log.Fatal(err)
}
diff --git a/qtfs/rexec/common.go b/qtfs/rexec/common.go
index a332fae..9ce21c4 100644
--- a/qtfs/rexec/common.go
+++ b/qtfs/rexec/common.go
@@ -8,10 +8,16 @@ import (
"os"
"strconv"
"strings"
+ "io/ioutil"
+ "encoding/json"
"github.com/docker/libchan"
)
+const (
+ configDir = "/etc/rexec"
+)
+
// RemoteCommand is the run parameters to be executed remotely
type RemoteCommand struct {
Cmd string
@@ -82,12 +88,35 @@ func parseUnixAddr(inAddr string) (NetAddr, error) {
}, nil
}
-func parseNetAddr() (NetAddr, error) {
+func readAddrFromFile(role string) (string) {
+ fileName := fmt.Sprintf("%s/%s.json", configDir, role)
+ file, err := ioutil.ReadFile(fileName)
+ if err != nil {
+ fmt.Printf("read %s failed: %s", fileName, err)
+ return ""
+ }
+ var netAddr struct {
+ Protocol string `json:"Protocol"`
+ Ipaddr string `json:"Ipaddr"`
+ Port string `json:"Port"`
+ }
+ err = json.Unmarshal([]byte(file), &netAddr)
+ if err != nil {
+ fmt.Printf("can not unmarshal %s:%s", fileName, err)
+ return ""
+ }
+ return fmt.Sprintf("%s://%s:%s", netAddr.Protocol, netAddr.Ipaddr, netAddr.Port)
+}
+
+func parseNetAddr(role string) (NetAddr, error) {
cna := os.Getenv("CMD_NET_ADDR")
// default netAddr: tcp://127.0.0.1:9323
if strings.TrimSpace(cna) == "" {
- return NetAddr{}, fmt.Errorf("need CMD_NET_ADDR")
+ cna = readAddrFromFile(role)
+ if cna == "" {
+ return NetAddr{}, fmt.Errorf("please set enviroment variable CMD_NET_ADDR or set Config file %s/%s.json", configDir, role)
+ }
}
parts := strings.SplitN(cna, "://", 2)
diff --git a/qtfs/rexec/server.go b/qtfs/rexec/server.go
index 4e910ea..4559b79 100644
--- a/qtfs/rexec/server.go
+++ b/qtfs/rexec/server.go
@@ -15,6 +15,10 @@ import (
"github.com/docker/libchan/spdy"
)
+const (
+ role = "server"
+)
+
func getHost(addr string) string {
return strings.Split(addr, ":")[0]
}
@@ -24,7 +28,7 @@ func main() {
key := os.Getenv("TLS_KEY")
var listener net.Listener
- na, err := parseNetAddr()
+ na, err := parseNetAddr(role)
if err != nil {
log.Fatal(err)
}
--
2.23.0

View File

@ -1,42 +0,0 @@
From 86c4ef6bc5d845b0c1919ddb80702f2896a75d4f Mon Sep 17 00:00:00 2001
From: yangxin <245051644@qq.com>
Date: Thu, 15 Dec 2022 10:14:53 +0800
Subject: [PATCH 4/4] Fix inode sync error between client and server.
Signed-off-by: yangxin <245051644@qq.com>
---
qtfs/qtfs/sb.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c
index 5fd2c8f..aad153b 100644
--- a/qtfs/qtfs/sb.c
+++ b/qtfs/qtfs/sb.c
@@ -1146,6 +1146,7 @@ int qtfs_getattr(const struct path *path, struct kstat *stat, u32 req_mask, unsi
struct qtfs_sock_var_s *pvar = qtfs_conn_get_param();
struct qtreq_getattr *req;
struct qtrsp_getattr *rsp;
+ struct inode *inode = path->dentry->d_inode;
int ret;
if (!pvar) {
@@ -1172,8 +1173,14 @@ int qtfs_getattr(const struct path *path, struct kstat *stat, u32 req_mask, unsi
return ret;
}
*stat = rsp->stat;
- qtfs_debug("qtfs getattr success:<%s> blksiz:%u size:%lld mode:%o ino:%llu pathino:%lu.\n", req->path, rsp->stat.blksize,
- rsp->stat.size, rsp->stat.mode, rsp->stat.ino, path->dentry->d_inode->i_ino);
+ qtfs_debug("qtfs getattr success:<%s> blksiz:%u size:%lld mode:%o ino:%llu pathino:%lu. %s\n", req->path, rsp->stat.blksize,
+ rsp->stat.size, rsp->stat.mode, rsp->stat.ino, inode->i_ino, rsp->stat.ino != inode->i_ino ? "delete current inode" : "");
+ if (inode->i_ino != rsp->stat.ino || rsp->stat.mode != inode->i_mode) {
+ if (inode->i_nlink > 0){
+ drop_nlink(inode);
+ }
+ d_invalidate(path->dentry);
+ }
qtfs_conn_put_param(pvar);
return 0;
}
--
2.33.0

View File

@ -1,7 +1,7 @@
Name: dpu-utilities
Summary: openEuler dpu utilities
Version: 1.1
Release: 3
Version: 1.4
Release: 1
License: GPL-2.0
Source: https://gitee.com/openeuler/dpu-utilities/repository/archive/v%{version}.tar.gz
ExclusiveOS: linux
@ -10,12 +10,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-root
Conflicts: %{name} < %{version}-%{release}
Provides: %{name} = %{version}-%{release}
%define kernel_version %(ver=`rpm -qa|grep kernel-devel`;echo ${ver#*kernel-devel-})
BuildRequires: kernel-devel >= 5.10, gcc, make
BuildRequires: golang
Patch0: 0001-add-path-put-in-xattr-set.patch
Patch1: 0002-Add-drop-link-and-dentry-invalid-in-unlink-and-rmdir.patch
Patch2: 0003-enable-rexec-read-net-addr-from-config-file.patch
Patch3: 0004-Fix-inode-sync-error-between-client-and-server.patch
BuildRequires: kernel-devel >= 5.10, gcc, make, json-c-devel, glib2-devel
%description
This package contains the software utilities on dpu.
@ -28,12 +24,14 @@ imageTailor configration files for dpuos
%package -n qtfs-client
Summary: Client of qtfs
Requires: json-c, glib2
%description -n qtfs-client
qtfs is a shared file system, this is the client of qtfs.
%package -n qtfs-server
Summary: Server of qtfs
Requires: json-c, glib2
%description -n qtfs-server
qtfs is a shared file system, this is the server of qtfs.
@ -50,15 +48,34 @@ cd %_builddir/%{name}-v%{version}/qtfs/qtfs_server
make
cd %_builddir/%{name}-v%{version}/qtfs/rexec
make
cd %_builddir/%{name}-v%{version}/qtfs/ipc
make
cd %_builddir/%{name}-v%{version}/qtfs/qtinfo
export role=client
make qtcfg
mv qtcfg qtcfg_client
make clean
export role=server
make qtcfg
%install
mkdir -p $RPM_BUILD_ROOT/lib/modules/%{kernel_version}//extra
mkdir -p $RPM_BUILD_ROOT/usr/bin/
mkdir -p $RPM_BUILD_ROOT/usr/lib/
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
mkdir -p $RPM_BUILD_ROOT/etc/qtfs
mkdir -p $RPM_BUILD_ROOT/etc/rexec
install %_builddir/%{name}-v%{version}/qtfs/qtfs/qtfs.ko $RPM_BUILD_ROOT/lib/modules/%{kernel_version}/extra
install %_builddir/%{name}-v%{version}/qtfs/qtfs_server/qtfs_server.ko $RPM_BUILD_ROOT/lib/modules/%{kernel_version}/extra
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/qtfs_server/engine $RPM_BUILD_ROOT/usr/bin/
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/rexec/rexec ${RPM_BUILD_ROOT}/usr/bin/
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/rexec/rexec_server ${RPM_BUILD_ROOT}/usr/bin/
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/ipc/udsproxyd ${RPM_BUILD_ROOT}/usr/bin/
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/ipc/libudsproxy.so ${RPM_BUILD_ROOT}/usr/lib/
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/qtinfo/qtcfg ${RPM_BUILD_ROOT}/usr/bin/
install -m 0700 %_builddir/%{name}-v%{version}/qtfs/qtinfo/qtcfg_client ${RPM_BUILD_ROOT}/usr/local/bin/qtcfg
install -m 0400 %_builddir/%{name}-v%{version}/qtfs/config/rexec/whitelist ${RPM_BUILD_ROOT}/etc/rexec
install -m 0400 %_builddir/%{name}-v%{version}/qtfs/config/qtfs/whitelist ${RPM_BUILD_ROOT}/etc/qtfs
mkdir -p $RPM_BUILD_ROOT/opt/imageTailor
cp -rf %_builddir/%{name}-v%{version}/dpuos/image_tailor_cfg/custom $RPM_BUILD_ROOT/opt/imageTailor
cp -rf %_builddir/%{name}-v%{version}/dpuos/image_tailor_cfg/kiwi $RPM_BUILD_ROOT/opt/imageTailor
@ -88,15 +105,21 @@ fi
%files -n qtfs-client
/lib/modules/%{kernel_version}/extra/qtfs.ko
%attr(0700, root, root) /usr/bin/rexec_server
%attr(0700, root, root) /usr/bin/rexec
%attr(0644, root, root) /lib/modules/%{kernel_version}/extra/qtfs.ko
%attr(0500, root, root) /usr/bin/rexec_server
%attr(0500, root, root) /usr/bin/rexec
%attr(0500, root, root) /usr/lib/libudsproxy.so
%attr(0500, root, root) /usr/bin/udsproxyd
%attr(0500, root, root) /usr/local/bin/qtcfg
%files -n qtfs-server
/lib/modules/%{kernel_version}/extra/qtfs_server.ko
%attr(0700, root, root) /usr/bin/engine
%attr(0700, root, root)/usr/bin/rexec_server
%attr(0700, root, root)/usr/bin/rexec
%attr(0644, root, root) /lib/modules/%{kernel_version}/extra/qtfs_server.ko
%attr(0500, root, root) /usr/bin/engine
%attr(0500, root, root) /usr/bin/rexec_server
%attr(0500, root, root) /usr/bin/rexec
%attr(0500, root, root) /usr/bin/qtcfg
%attr(0400, root, root) /etc/qtfs/whitelist
%attr(0400, root, root) /etc/rexec/whitelist
%files -n dpuos-imageTailor-config
/opt/imageTailor/custom/*
@ -108,12 +131,23 @@ sed -i '/# product cut_conf/a\dpuos kiwi/minios/cfg_dpuos yes' /opt/imageT
sed -i '/<repository_rule>/a\dpuos 1 rpm-dir euler_base' /opt/imageTailor/repos/RepositoryRule.conf
%changelog
* Thu Dec 15 2022 YangXin <245051644@qq.com> 1.1-3
* Fri Jun 2 2023 Weifeng Su <suweifeng1@huawei.com> 1.4-1
- Upgrade dpu-utilities version to 1.4
* Tue Mar 21 2023 Weifeng Su <suweifeng1@huawei.com> 1.3-1
- Upgrade dpu-utilities version to 1.3
* Thu Dec 15 2022 YangXin <245051644@qq.com> 1.1-4
- Fix inode sync error between client and server.
* Thu Dec 08 2022 YangXin <245051644@qq.com> 1.1-2
- Fix error of qtfs and modify rexec to enable reading net addr from file.
* Thu Dec 8 2022 Weifeng Su <suweifeng1@huawei.com> 1.1-3
- Sync patches from master
* Thu Dec 1 2022 Weifeng Su <suweifeng1@huawei.com> 1.1-2
- add path put in xattr set
* Mon Nov 28 2022 Weifeng Su <suweifeng1@huawei.com> 1.1-1
- Upgrade dpu-utilities version to 1.1
* Wed Aug 17 2022 yangxin <245051644@qq.com> 1.0-2
- Split dpu-utilities into three packages.
* Fri Aug 12 2022 yangxin <245051644@qq.com> 1.0-1

Binary file not shown.

BIN
v1.4.tar.gz Normal file

Binary file not shown.