* [PATCH v2 0/4] make vm-build-freebsd fixes
@ 2024-02-05 18:11 Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 1/4] tests/vm: Set UseDNS=no in the sshd configuration Ilya Leoshkevich
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Ilya Leoshkevich @ 2024-02-05 18:11 UTC (permalink / raw)
To: Paolo Bonzini, Alex Bennée, Ed Maste, Li-Wen Hsu,
Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal, Kyle Evans, qemu-devel, Ilya Leoshkevich
v1: https://lists.gnu.org/archive/html/qemu-devel/2024-01/msg05155.html
v1 -> v2: Link with libinotify instead of disabling the inotify
support (Daniel).
Use a bit more context lines in order to prevent the
incorrect application of the test patch.
Hi,
I needed to verify that my qemu-user changes didn't break BSD, and
Daniel Berrange suggested vm-build-freebsd on IRC. I had several
problems with it, which this series resolves.
Best regards,
Ilya
Ilya Leoshkevich (4):
tests/vm: Set UseDNS=no in the sshd configuration
tests/vm/freebsd: Reload the sshd configuration
tests/test-util-filemonitor: Adapt to FreeBSD inotify rename semantics
meson: Link with libinotify on FreeBSD
meson.build | 12 +++++++++++-
tests/unit/test-util-filemonitor.c | 8 ++++++++
tests/vm/basevm.py | 2 ++
tests/vm/freebsd | 1 +
util/meson.build | 6 +++++-
5 files changed, 27 insertions(+), 2 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/4] tests/vm: Set UseDNS=no in the sshd configuration
2024-02-05 18:11 [PATCH v2 0/4] make vm-build-freebsd fixes Ilya Leoshkevich
@ 2024-02-05 18:11 ` Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 2/4] tests/vm/freebsd: Reload " Ilya Leoshkevich
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Ilya Leoshkevich @ 2024-02-05 18:11 UTC (permalink / raw)
To: Paolo Bonzini, Alex Bennée, Ed Maste, Li-Wen Hsu,
Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal, Kyle Evans, qemu-devel, Ilya Leoshkevich
make vm-build-freebsd sometimes fails with "Connection timed out during
banner exchange". The client strace shows:
13:59:30 write(3, "SSH-2.0-OpenSSH_9.3\r\n", 21) = 21
13:59:30 getpid() = 252655
13:59:30 poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
13:59:32 read(3, "S", 1) = 1
13:59:32 poll([{fd=3, events=POLLIN}], 1, 3625) = 1 ([{fd=3, revents=POLLIN}])
13:59:32 read(3, "S", 1) = 1
13:59:32 poll([{fd=3, events=POLLIN}], 1, 3625) = 1 ([{fd=3, revents=POLLIN}])
13:59:32 read(3, "H", 1) = 1
There is a 2s delay during connection, and ConnectTimeout is set to 1.
Raising it makes the issue go away, but we can do better. The server
truss shows:
888: 27.811414714 socket(PF_INET,SOCK_DGRAM|SOCK_CLOEXEC,0) = 5 (0x5)
888: 27.811765030 connect(5,{ AF_INET 10.0.2.3:53 },16) = 0 (0x0)
888: 27.812166941 sendto(5,"\^Z/\^A\0\0\^A\0\0\0\0\0\0\^A2"...,39,0,NULL,0) = 39 (0x27)
888: 29.363970743 poll({ 5/POLLRDNORM },1,5000) = 1 (0x1)
So the delay is due to a DNS query. Disable DNS queries in the server
config.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
tests/vm/basevm.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 61725b83254..c0d62c08031 100644
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -396,60 +396,62 @@ def console_consume(self):
self.console_log(output)
vm.console_socket.setblocking(1)
def console_send(self, command):
vm = self._guest
if self.debug:
logline = re.sub("\n", "<enter>", command)
logline = re.sub("[\x00-\x1f]", ".", logline)
sys.stderr.write("con send: %s\n" % logline)
for char in list(command):
vm.console_socket.send(char.encode("utf-8"))
time.sleep(0.01)
def console_wait_send(self, wait, command):
self.console_wait(wait)
self.console_send(command)
def console_ssh_init(self, prompt, user, pw):
sshkey_cmd = "echo '%s' > .ssh/authorized_keys\n" \
% self._config['ssh_pub_key'].rstrip()
self.console_wait_send("login:", "%s\n" % user)
self.console_wait_send("Password:", "%s\n" % pw)
self.console_wait_send(prompt, "mkdir .ssh\n")
self.console_wait_send(prompt, sshkey_cmd)
self.console_wait_send(prompt, "chmod 755 .ssh\n")
self.console_wait_send(prompt, "chmod 644 .ssh/authorized_keys\n")
def console_sshd_config(self, prompt):
self.console_wait(prompt)
self.console_send("echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config\n")
+ self.console_wait(prompt)
+ self.console_send("echo 'UseDNS no' >> /etc/ssh/sshd_config\n")
for var in self.envvars:
self.console_wait(prompt)
self.console_send("echo 'AcceptEnv %s' >> /etc/ssh/sshd_config\n" % var)
def print_step(self, text):
sys.stderr.write("### %s ...\n" % text)
def wait_ssh(self, wait_root=False, seconds=300, cmd="exit 0"):
# Allow more time for VM to boot under TCG.
if not kvm_available(self.arch):
seconds *= self.tcg_timeout_multiplier
starttime = datetime.datetime.now()
endtime = starttime + datetime.timedelta(seconds=seconds)
cmd_success = False
while datetime.datetime.now() < endtime:
if wait_root and self.ssh_root(cmd) == 0:
cmd_success = True
break
elif self.ssh(cmd) == 0:
cmd_success = True
break
seconds = (endtime - datetime.datetime.now()).total_seconds()
logging.debug("%ds before timeout", seconds)
time.sleep(1)
if not cmd_success:
raise Exception("Timeout while waiting for guest ssh")
def shutdown(self):
self._guest.shutdown(timeout=self._shutdown_timeout)
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/4] tests/vm/freebsd: Reload the sshd configuration
2024-02-05 18:11 [PATCH v2 0/4] make vm-build-freebsd fixes Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 1/4] tests/vm: Set UseDNS=no in the sshd configuration Ilya Leoshkevich
@ 2024-02-05 18:11 ` Ilya Leoshkevich
2024-02-05 18:54 ` Thomas Huth
2024-02-05 18:11 ` [PATCH v2 3/4] tests/test-util-filemonitor: Adapt to FreeBSD inotify rename semantics Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 4/4] meson: Link with libinotify on FreeBSD Ilya Leoshkevich
3 siblings, 1 reply; 8+ messages in thread
From: Ilya Leoshkevich @ 2024-02-05 18:11 UTC (permalink / raw)
To: Paolo Bonzini, Alex Bennée, Ed Maste, Li-Wen Hsu,
Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal, Kyle Evans, qemu-devel, Ilya Leoshkevich
After console_sshd_config(), the SSH server needs to be nudged to pick
up the new configs. The scripts for the other BSD flavors already do
this with a reboot, but a simple reload is sufficient.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
tests/vm/freebsd | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/vm/freebsd b/tests/vm/freebsd
index b581bd17fb7..1247f40a385 100755
--- a/tests/vm/freebsd
+++ b/tests/vm/freebsd
@@ -81,50 +81,51 @@ class FreeBSDVM(basevm.BaseVM):
self.console_wait("Full name")
self.console_send("%s\n" % self._config["guest_user"])
self.console_wait_send("Uid", "\n")
self.console_wait_send("Login group", "\n")
self.console_wait_send("Login group", "\n")
self.console_wait_send("Login class", "\n")
self.console_wait_send("Shell", "\n")
self.console_wait_send("Home directory", "\n")
self.console_wait_send("Home directory perm", "\n")
self.console_wait_send("Use password", "\n")
self.console_wait_send("Use an empty password", "\n")
self.console_wait_send("Use a random password", "\n")
self.console_wait("Enter password:")
self.console_send("%s\n" % self._config["guest_pass"])
self.console_wait("Enter password again:")
self.console_send("%s\n" % self._config["guest_pass"])
self.console_wait_send("Lock out", "\n")
self.console_wait_send("OK", "yes\n")
self.console_wait_send("Add another user", "no\n")
self.console_wait_send("~ #", "exit\n")
# setup qemu user
prompt = "$"
self.console_ssh_init(prompt, self._config["guest_user"], self._config["guest_pass"])
self.console_wait_send(prompt, "exit\n")
# setup root user
prompt = "root@freebsd:~ #"
self.console_ssh_init(prompt, "root", self._config["root_pass"])
self.console_sshd_config(prompt)
+ self.console_wait_send(prompt, "service sshd reload\n")
# setup virtio-blk #1 (tarfile)
self.console_wait(prompt)
self.console_send("echo 'chmod 666 /dev/vtbd1' >> /etc/rc.local\n")
pkgs = self.get_qemu_packages_from_lcitool_json()
self.print_step("Installing packages")
self.ssh_root_check("pkg install -y %s\n" % " ".join(pkgs))
# shutdown
self.ssh_root(self.poweroff)
self.wait()
if os.path.exists(img):
os.remove(img)
os.rename(img_tmp, img)
self.print_step("All done")
if __name__ == "__main__":
sys.exit(basevm.main(FreeBSDVM, config=FREEBSD_CONFIG))
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 3/4] tests/test-util-filemonitor: Adapt to FreeBSD inotify rename semantics
2024-02-05 18:11 [PATCH v2 0/4] make vm-build-freebsd fixes Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 1/4] tests/vm: Set UseDNS=no in the sshd configuration Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 2/4] tests/vm/freebsd: Reload " Ilya Leoshkevich
@ 2024-02-05 18:11 ` Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 4/4] meson: Link with libinotify on FreeBSD Ilya Leoshkevich
3 siblings, 0 replies; 8+ messages in thread
From: Ilya Leoshkevich @ 2024-02-05 18:11 UTC (permalink / raw)
To: Paolo Bonzini, Alex Bennée, Ed Maste, Li-Wen Hsu,
Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal, Kyle Evans, qemu-devel, Ilya Leoshkevich
Unlike on Linux, on FreeBSD renaming a file when the destination
already exists results in IN_DELETE event for that existing file:
$ FILEMONITOR_DEBUG=1 build/tests/unit/test-util-filemonitor
Rename /tmp/test-util-filemonitor-K13LI2/fish/one.txt -> /tmp/test-util-filemonitor-K13LI2/two.txt
Event id=200000000 event=2 file=one.txt
Queue event id 200000000 event 2 file one.txt
Queue event id 100000000 event 2 file two.txt
Queue event id 100000002 event 2 file two.txt
Queue event id 100000000 event 0 file two.txt
Queue event id 100000002 event 0 file two.txt
Event id=100000000 event=0 file=two.txt
Expected event 0 but got 2
This difference in behavior is not expected to break the real users, so
teach the test to accept it.
Suggested-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
tests/unit/test-util-filemonitor.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tests/unit/test-util-filemonitor.c b/tests/unit/test-util-filemonitor.c
index a22de275955..02e67fc96ac 100644
--- a/tests/unit/test-util-filemonitor.c
+++ b/tests/unit/test-util-filemonitor.c
@@ -333,60 +333,68 @@ test_file_monitor_events(void)
{ .type = QFILE_MONITOR_TEST_OP_MKDIR,
.filesrc = "fish", },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "fish", .watchid = &watch0,
.eventid = QFILE_MONITOR_EVENT_CREATED },
{ .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
.filesrc = "fish/", .watchid = &watch4 },
{ .type = QFILE_MONITOR_TEST_OP_ADD_WATCH,
.filesrc = "fish/one.txt", .watchid = &watch5 },
{ .type = QFILE_MONITOR_TEST_OP_CREATE,
.filesrc = "fish/one.txt", },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "one.txt", .watchid = &watch4,
.eventid = QFILE_MONITOR_EVENT_CREATED },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "one.txt", .watchid = &watch5,
.eventid = QFILE_MONITOR_EVENT_CREATED },
{ .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
.filesrc = "fish/one.txt", .watchid = &watch5 },
{ .type = QFILE_MONITOR_TEST_OP_RENAME,
.filesrc = "fish/one.txt", .filedst = "two.txt", },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "one.txt", .watchid = &watch4,
.eventid = QFILE_MONITOR_EVENT_DELETED },
+#ifdef __FreeBSD__
+ { .type = QFILE_MONITOR_TEST_OP_EVENT,
+ .filesrc = "two.txt", .watchid = &watch0,
+ .eventid = QFILE_MONITOR_EVENT_DELETED },
+ { .type = QFILE_MONITOR_TEST_OP_EVENT,
+ .filesrc = "two.txt", .watchid = &watch2,
+ .eventid = QFILE_MONITOR_EVENT_DELETED },
+#endif
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "two.txt", .watchid = &watch0,
.eventid = QFILE_MONITOR_EVENT_CREATED },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "two.txt", .watchid = &watch2,
.eventid = QFILE_MONITOR_EVENT_CREATED },
{ .type = QFILE_MONITOR_TEST_OP_RMDIR,
.filesrc = "fish", },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "", .watchid = &watch4,
.eventid = QFILE_MONITOR_EVENT_IGNORED,
.swapnext = true },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "fish", .watchid = &watch0,
.eventid = QFILE_MONITOR_EVENT_DELETED },
{ .type = QFILE_MONITOR_TEST_OP_DEL_WATCH,
.filesrc = "fish", .watchid = &watch4 },
{ .type = QFILE_MONITOR_TEST_OP_UNLINK,
.filesrc = "two.txt", },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "two.txt", .watchid = &watch0,
.eventid = QFILE_MONITOR_EVENT_DELETED },
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
.filesrc = "two.txt", .watchid = &watch2,
.eventid = QFILE_MONITOR_EVENT_DELETED },
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 4/4] meson: Link with libinotify on FreeBSD
2024-02-05 18:11 [PATCH v2 0/4] make vm-build-freebsd fixes Ilya Leoshkevich
` (2 preceding siblings ...)
2024-02-05 18:11 ` [PATCH v2 3/4] tests/test-util-filemonitor: Adapt to FreeBSD inotify rename semantics Ilya Leoshkevich
@ 2024-02-05 18:11 ` Ilya Leoshkevich
2024-02-05 18:36 ` Philippe Mathieu-Daudé
3 siblings, 1 reply; 8+ messages in thread
From: Ilya Leoshkevich @ 2024-02-05 18:11 UTC (permalink / raw)
To: Paolo Bonzini, Alex Bennée, Ed Maste, Li-Wen Hsu,
Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal, Kyle Evans, qemu-devel, Ilya Leoshkevich
make vm-build-freebsd fails with:
ld: error: undefined symbol: inotify_init1
>>> referenced by filemonitor-inotify.c:183 (../src/util/filemonitor-inotify.c:183)
>>> util_filemonitor-inotify.c.o:(qemu_file_monitor_new) in archive libqemuutil.a
On FreeBSD inotify functions are defined in libinotify.so. Add it to
the dependencies.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
meson.build | 12 +++++++++++-
util/meson.build | 6 +++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
index b5d6dc94a83..819cdedebe2 100644
--- a/meson.build
+++ b/meson.build
@@ -1982,60 +1982,66 @@ if libbpf.found() and not cc.links('''
#include <bpf/libbpf.h>
int main(void)
{
bpf_object__destroy_skeleton(NULL);
return 0;
}''', dependencies: libbpf)
libbpf = not_found
if get_option('bpf').enabled()
error('libbpf skeleton test failed')
else
warning('libbpf skeleton test failed, disabling')
endif
endif
# libxdp
libxdp = not_found
if not get_option('af_xdp').auto() or have_system
libxdp = dependency('libxdp', required: get_option('af_xdp'),
version: '>=1.4.0', method: 'pkg-config')
endif
# libdw
libdw = not_found
if not get_option('libdw').auto() or \
(not get_option('prefer_static') and (have_system or have_user))
libdw = dependency('libdw',
method: 'pkg-config',
required: get_option('libdw'))
endif
+# libinotify-kqueue
+inotify = not_found
+if host_os == 'freebsd'
+ inotify = cc.find_library('inotify')
+endif
+
#################
# config-host.h #
#################
config_host_data = configuration_data()
audio_drivers_selected = []
if have_system
audio_drivers_available = {
'alsa': alsa.found(),
'coreaudio': coreaudio.found(),
'dsound': dsound.found(),
'jack': jack.found(),
'oss': oss.found(),
'pa': pulse.found(),
'pipewire': pipewire.found(),
'sdl': sdl.found(),
'sndio': sndio.found(),
}
foreach k, v: audio_drivers_available
config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), v)
endforeach
# Default to native drivers first, OSS second, SDL third
audio_drivers_priority = \
[ 'pa', 'coreaudio', 'dsound', 'sndio', 'oss' ] + \
(host_os == 'linux' ? [] : [ 'sdl' ])
audio_drivers_default = []
foreach k: audio_drivers_priority
if audio_drivers_available[k]
@@ -2376,61 +2382,62 @@ have_asan_fiber = false
if get_option('sanitizers') and \
not cc.has_function('__sanitizer_start_switch_fiber',
args: '-fsanitize=address',
prefix: '#include <sanitizer/asan_interface.h>')
warning('Missing ASAN due to missing fiber annotation interface')
warning('Without code annotation, the report may be inferior.')
else
have_asan_fiber = true
endif
config_host_data.set('CONFIG_ASAN_IFACE_FIBER', have_asan_fiber)
# has_header_symbol
config_host_data.set('CONFIG_BLKZONED',
cc.has_header_symbol('linux/blkzoned.h', 'BLKOPENZONE'))
config_host_data.set('CONFIG_EPOLL_CREATE1',
cc.has_header_symbol('sys/epoll.h', 'epoll_create1'))
config_host_data.set('CONFIG_FALLOCATE_PUNCH_HOLE',
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_PUNCH_HOLE') and
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_KEEP_SIZE'))
config_host_data.set('CONFIG_FALLOCATE_ZERO_RANGE',
cc.has_header_symbol('linux/falloc.h', 'FALLOC_FL_ZERO_RANGE'))
config_host_data.set('CONFIG_FIEMAP',
cc.has_header('linux/fiemap.h') and
cc.has_header_symbol('linux/fs.h', 'FS_IOC_FIEMAP'))
config_host_data.set('CONFIG_GETRANDOM',
cc.has_function('getrandom') and
cc.has_header_symbol('sys/random.h', 'GRND_NONBLOCK'))
config_host_data.set('CONFIG_INOTIFY',
cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
config_host_data.set('CONFIG_INOTIFY1',
- cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
+ cc.has_header_symbol('sys/inotify.h', 'inotify_init1') and
+ (host_os != 'freebsd' or inotify.found()))
config_host_data.set('CONFIG_PRCTL_PR_SET_TIMERSLACK',
cc.has_header_symbol('sys/prctl.h', 'PR_SET_TIMERSLACK'))
config_host_data.set('CONFIG_RTNETLINK',
cc.has_header_symbol('linux/rtnetlink.h', 'IFLA_PROTO_DOWN'))
config_host_data.set('CONFIG_SYSMACROS',
cc.has_header_symbol('sys/sysmacros.h', 'makedev'))
config_host_data.set('HAVE_OPTRESET',
cc.has_header_symbol('getopt.h', 'optreset'))
config_host_data.set('HAVE_IPPROTO_MPTCP',
cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP'))
# has_member
config_host_data.set('HAVE_SIGEV_NOTIFY_THREAD_ID',
cc.has_member('struct sigevent', 'sigev_notify_thread_id',
prefix: '#include <signal.h>'))
config_host_data.set('HAVE_STRUCT_STAT_ST_ATIM',
cc.has_member('struct stat', 'st_atim',
prefix: '#include <sys/stat.h>'))
config_host_data.set('HAVE_BLK_ZONE_REP_CAPACITY',
cc.has_member('struct blk_zone', 'capacity',
prefix: '#include <linux/blkzoned.h>'))
# has_type
config_host_data.set('CONFIG_IOVEC',
cc.has_type('struct iovec',
prefix: '#include <sys/uio.h>'))
config_host_data.set('HAVE_UTMPX',
cc.has_type('struct utmpx',
prefix: '#include <utmpx.h>'))
@@ -4380,60 +4387,63 @@ summary_info += {'U2F support': u2f}
summary_info += {'libusb': libusb}
summary_info += {'usb net redir': usbredir}
summary_info += {'OpenGL support (epoxy)': opengl}
summary_info += {'GBM': gbm}
summary_info += {'libiscsi support': libiscsi}
summary_info += {'libnfs support': libnfs}
if host_os == 'windows'
if have_ga
summary_info += {'QGA VSS support': have_qga_vss}
endif
endif
summary_info += {'seccomp support': seccomp}
summary_info += {'GlusterFS support': glusterfs}
summary_info += {'hv-balloon support': hv_balloon}
summary_info += {'TPM support': have_tpm}
summary_info += {'libssh support': libssh}
summary_info += {'lzo support': lzo}
summary_info += {'snappy support': snappy}
summary_info += {'bzip2 support': libbzip2}
summary_info += {'lzfse support': liblzfse}
summary_info += {'zstd support': zstd}
summary_info += {'NUMA host support': numa}
summary_info += {'capstone': capstone}
summary_info += {'libpmem support': libpmem}
summary_info += {'libdaxctl support': libdaxctl}
summary_info += {'libudev': libudev}
# Dummy dependency, keep .found()
summary_info += {'FUSE lseek': fuse_lseek.found()}
summary_info += {'selinux': selinux}
summary_info += {'libdw': libdw}
+if host_os == 'freebsd'
+ summary_info += {'libinotify-kqueue': inotify}
+endif
summary(summary_info, bool_yn: true, section: 'Dependencies')
if host_arch == 'unknown'
message()
warning('UNSUPPORTED HOST CPU')
message()
message('Support for CPU host architecture ' + cpu + ' is not currently')
message('maintained. The QEMU project does not guarantee that QEMU will')
message('compile or work on this host CPU. You can help by volunteering')
message('to maintain it and providing a build host for our continuous')
message('integration setup.')
if get_option('tcg').allowed() and target_dirs.length() > 0
message()
message('configure has succeeded and you can continue to build, but')
message('QEMU will use a slow interpreter to emulate the target CPU.')
endif
endif
if not supported_oses.contains(host_os)
message()
warning('UNSUPPORTED HOST OS')
message()
message('Support for host OS ' + host_os + 'is not currently maintained.')
message('configure has succeeded and you can continue to build, but')
message('the QEMU project does not guarantee that QEMU will compile or')
message('work on this operating system. You can help by volunteering')
message('to maintain it and providing a build host for our continuous')
message('integration setup. This will ensure that future versions of QEMU')
message('will keep working on ' + host_os + '.')
endif
diff --git a/util/meson.build b/util/meson.build
index af3bf5692d8..0ef9886be04 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -77,50 +77,54 @@ if have_system
util_ss.add(files('userfaultfd.c'))
endif
endif
if have_block or have_ga
util_ss.add(files('aiocb.c', 'async.c'))
util_ss.add(files('base64.c'))
util_ss.add(files('main-loop.c'))
util_ss.add(files('qemu-coroutine.c', 'qemu-coroutine-lock.c', 'qemu-coroutine-io.c'))
util_ss.add(files(f'coroutine-@coroutine_backend@.c'))
util_ss.add(files('thread-pool.c', 'qemu-timer.c'))
util_ss.add(files('qemu-sockets.c'))
endif
if have_block
util_ss.add(files('aio-wait.c'))
util_ss.add(files('buffer.c'))
util_ss.add(files('bufferiszero.c'))
util_ss.add(files('hbitmap.c'))
util_ss.add(files('hexdump.c'))
util_ss.add(files('iova-tree.c'))
util_ss.add(files('iov.c', 'uri.c'))
util_ss.add(files('nvdimm-utils.c'))
util_ss.add(files('block-helpers.c'))
util_ss.add(files('qemu-coroutine-sleep.c'))
util_ss.add(files('qemu-co-shared-resource.c'))
util_ss.add(files('qemu-co-timeout.c'))
util_ss.add(files('readline.c'))
util_ss.add(files('throttle.c'))
util_ss.add(files('timed-average.c'))
if config_host_data.get('CONFIG_INOTIFY1')
- util_ss.add(files('filemonitor-inotify.c'))
+ freebsd_dep = []
+ if host_os == 'freebsd'
+ freebsd_dep = inotify
+ endif
+ util_ss.add(files('filemonitor-inotify.c'), freebsd_dep)
else
util_ss.add(files('filemonitor-stub.c'))
endif
if host_os == 'linux'
util_ss.add(files('vhost-user-server.c'), vhost_user)
util_ss.add(files('vfio-helpers.c'))
util_ss.add(files('chardev_open.c'))
endif
endif
if cpu == 'aarch64'
util_ss.add(files('cpuinfo-aarch64.c'))
elif cpu in ['x86', 'x86_64']
util_ss.add(files('cpuinfo-i386.c'))
elif cpu == 'loongarch64'
util_ss.add(files('cpuinfo-loongarch.c'))
elif cpu in ['ppc', 'ppc64']
util_ss.add(files('cpuinfo-ppc.c'))
endif
--
2.43.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 4/4] meson: Link with libinotify on FreeBSD
2024-02-05 18:11 ` [PATCH v2 4/4] meson: Link with libinotify on FreeBSD Ilya Leoshkevich
@ 2024-02-05 18:36 ` Philippe Mathieu-Daudé
2024-02-05 18:55 ` Ilya Leoshkevich
0 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-02-05 18:36 UTC (permalink / raw)
To: Ilya Leoshkevich, Paolo Bonzini, Alex Bennée, Ed Maste,
Li-Wen Hsu, Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Wainer dos Santos Moschetta, Beraldo Leal, Kyle Evans, qemu-devel
Hi Ilya,
On 5/2/24 19:11, Ilya Leoshkevich wrote:
> make vm-build-freebsd fails with:
>
> ld: error: undefined symbol: inotify_init1
> >>> referenced by filemonitor-inotify.c:183 (../src/util/filemonitor-inotify.c:183)
> >>> util_filemonitor-inotify.c.o:(qemu_file_monitor_new) in archive libqemuutil.a
>
> On FreeBSD inotify functions are defined in libinotify.so. Add it to
> the dependencies.
>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
> meson.build | 12 +++++++++++-
> util/meson.build | 6 +++++-
> 2 files changed, 16 insertions(+), 2 deletions(-)
(for some reason your git-diff context is very verbose,
making review somehow annoying).
> +# libinotify-kqueue
> +inotify = not_found
> +if host_os == 'freebsd'
> + inotify = cc.find_library('inotify')
> +endif
> +
> #################
> # config-host.h #
> #################
>
> @@ -2376,61 +2382,62 @@ have_asan_fiber = false
> if get_option('sanitizers') and \
> not cc.has_function('__sanitizer_start_switch_fiber',
> args: '-fsanitize=address',
> prefix: '#include <sanitizer/asan_interface.h>')
> warning('Missing ASAN due to missing fiber annotation interface')
> warning('Without code annotation, the report may be inferior.')
> else
> have_asan_fiber = true
> endif
> config_host_data.set('CONFIG_ASAN_IFACE_FIBER', have_asan_fiber)
>
> # has_header_symbol
> config_host_data.set('CONFIG_INOTIFY',
> cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
> config_host_data.set('CONFIG_INOTIFY1',
> - cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
> + cc.has_header_symbol('sys/inotify.h', 'inotify_init1') and
> + (host_os != 'freebsd' or inotify.found()))
Maybe we could use the same pattern as 'have_asan_fiber':
have_inotify_init1 = cc.has_header_symbol('sys/inotify.h',
'inotify_init1')
if have_inotify_init1 and host_os == 'freebsd'
have_inotify_init1 = cc.find_library('inotify')
endif
config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1)
I wonder why we don't need the similar library check for the
inotify_init symbol.
Regards,
Phil.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/4] tests/vm/freebsd: Reload the sshd configuration
2024-02-05 18:11 ` [PATCH v2 2/4] tests/vm/freebsd: Reload " Ilya Leoshkevich
@ 2024-02-05 18:54 ` Thomas Huth
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Huth @ 2024-02-05 18:54 UTC (permalink / raw)
To: Ilya Leoshkevich, Paolo Bonzini, Alex Bennée, Ed Maste,
Li-Wen Hsu, Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal, Kyle Evans, qemu-devel
On 05/02/2024 19.11, Ilya Leoshkevich wrote:
> After console_sshd_config(), the SSH server needs to be nudged to pick
> up the new configs. The scripts for the other BSD flavors already do
> this with a reboot, but a simple reload is sufficient.
>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
> tests/vm/freebsd | 1 +
> 1 file changed, 1 insertion(+)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Re: [PATCH v2 4/4] meson: Link with libinotify on FreeBSD
2024-02-05 18:36 ` Philippe Mathieu-Daudé
@ 2024-02-05 18:55 ` Ilya Leoshkevich
0 siblings, 0 replies; 8+ messages in thread
From: Ilya Leoshkevich @ 2024-02-05 18:55 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, Paolo Bonzini, Alex Bennée,
Ed Maste, Li-Wen Hsu, Warner Losh
Cc: Marc-André Lureau, Daniel P. Berrangé, Thomas Huth,
Wainer dos Santos Moschetta, Beraldo Leal, Kyle Evans, qemu-devel
On Mon, Feb 05, 2024 at 07:36:32PM +0100, Philippe Mathieu-Daudé wrote:
> Hi Ilya,
>
> On 5/2/24 19:11, Ilya Leoshkevich wrote:
> > make vm-build-freebsd fails with:
> >
> > ld: error: undefined symbol: inotify_init1
> > >>> referenced by filemonitor-inotify.c:183 (../src/util/filemonitor-inotify.c:183)
> > >>> util_filemonitor-inotify.c.o:(qemu_file_monitor_new) in archive libqemuutil.a
> >
> > On FreeBSD inotify functions are defined in libinotify.so. Add it to
> > the dependencies.
> >
> > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> > ---
> > meson.build | 12 +++++++++++-
> > util/meson.build | 6 +++++-
> > 2 files changed, 16 insertions(+), 2 deletions(-)
>
> (for some reason your git-diff context is very verbose,
> making review somehow annoying).
This is because of patch 3. It's essentially the snippet that Daniel
posted, except that patch -p1 applied it at a wrong location! So I
figured I'll send this series with a larger context, but I couldn't
find how to apply this setting to just 1 patch in git send-email.
> > +# libinotify-kqueue
> > +inotify = not_found
> > +if host_os == 'freebsd'
> > + inotify = cc.find_library('inotify')
> > +endif
> > +
> > #################
> > # config-host.h #
> > #################
>
>
> > @@ -2376,61 +2382,62 @@ have_asan_fiber = false
> > if get_option('sanitizers') and \
> > not cc.has_function('__sanitizer_start_switch_fiber',
> > args: '-fsanitize=address',
> > prefix: '#include <sanitizer/asan_interface.h>')
> > warning('Missing ASAN due to missing fiber annotation interface')
> > warning('Without code annotation, the report may be inferior.')
> > else
> > have_asan_fiber = true
> > endif
> > config_host_data.set('CONFIG_ASAN_IFACE_FIBER', have_asan_fiber)
> > # has_header_symbol
>
>
> > config_host_data.set('CONFIG_INOTIFY',
> > cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
> > config_host_data.set('CONFIG_INOTIFY1',
> > - cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
> > + cc.has_header_symbol('sys/inotify.h', 'inotify_init1') and
> > + (host_os != 'freebsd' or inotify.found()))
>
> Maybe we could use the same pattern as 'have_asan_fiber':
>
> have_inotify_init1 = cc.has_header_symbol('sys/inotify.h', 'inotify_init1')
> if have_inotify_init1 and host_os == 'freebsd'
> have_inotify_init1 = cc.find_library('inotify')
> endif
> config_host_data.set('CONFIG_INOTIFY1', have_inotify_init1)
I agree, this looks nicer. I will send a v3.
> I wonder why we don't need the similar library check for the
> inotify_init symbol.
Sounds reasonable, it's just that currently the respective config value
is used only in linux-user, but for completeness it won't hurt.
>
> Regards,
>
> Phil.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-02-05 18:59 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-05 18:11 [PATCH v2 0/4] make vm-build-freebsd fixes Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 1/4] tests/vm: Set UseDNS=no in the sshd configuration Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 2/4] tests/vm/freebsd: Reload " Ilya Leoshkevich
2024-02-05 18:54 ` Thomas Huth
2024-02-05 18:11 ` [PATCH v2 3/4] tests/test-util-filemonitor: Adapt to FreeBSD inotify rename semantics Ilya Leoshkevich
2024-02-05 18:11 ` [PATCH v2 4/4] meson: Link with libinotify on FreeBSD Ilya Leoshkevich
2024-02-05 18:36 ` Philippe Mathieu-Daudé
2024-02-05 18:55 ` Ilya Leoshkevich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).