Git Product home page Git Product logo

overlaybd's Introduction

Overlaybd

logo

Overlaybd (overlay block device) is a novel layering block-level image format, which is design for container, secure container and applicable to virtual machine. And it is an open-source implementation of paper DADI: Block-Level Image Service for Agile and Elastic Application Deployment. USENIX ATC'20".

Scaling up Without Slowing Down: Accelerating Pod Start Time. KubeCon+CloudNativeCon Europe 2024

Overlaybd is based on PhotonLibOS, which is a high-efficiency LibOS framework.

Overlaybd has 2 core component:

  • Overlaybd is a block-device based image format, provideing a merged view of a sequence of block-based layers as a virtual block device.

  • Zfile is a compression file format which support seekalbe online decompression.

This repository is an implementation of overlaybd based on TCMU.

Overlaybd can be used as the storage backend of Accelerated Container Image, which is a solution of remote container image by fetching image data on-demand without downloading and unpacking the whole image before the container starts.

Benefits from the universality of block-device, overlaybd is also a widely applicable image format for most runtime, including qemu/kvm and any other runtime supporting block or scsi api.

Overlaybd is a non-core sub-project of containerd.

Setup

System Requirements

Overlaybd provides virtual block devices through TCMU, so the TCMU kernel module is required. TCMU is implemented in the Linux kernel and supported by most Linux distributions.

Check and load the target_core_user module.

modprobe target_core_user

Install From RPM/DEB

You may download our RPM/DEB packages form Release and install.

The binaries are install to /opt/overlaybd/bin/.

Run /opt/overlaybd/bin/overlaybd-tcmu and the log is stored in /var/log/overlaybd.log.

It is better to run overlaybd-tcmu as a service so that it can be restarted after unexpected crashes.

Build From Source

Requirements

To build overlaybd from source code, the following dependencies are required:

  • CMake >= 3.14

  • gcc/g++ >= 7

  • Libaio, libcurl, libnl3, glib2 and openssl runtime and development libraries.

    • CentOS 7/Fedora: sudo yum install libaio-devel libcurl-devel openssl-devel libnl3-devel libzstd-static e2fsprogs-devel
    • CentOS 8: sudo yum install libaio-devel libcurl-devel openssl-devel libnl3-devel libzstd-devel e2fsprogs-devel
    • Debian/Ubuntu: sudo apt install libcurl4-openssl-dev libssl-dev libaio-dev libnl-3-dev libnl-genl-3-dev libgflags-dev libzstd-dev libext2fs-dev
    • Mariner: sudo yum install libaio-devel libcurl-devel openssl-devel libnl3-devel e2fsprogs-devel glibc-devel libzstd-devel binutils ca-certificates-microsoft build-essential

Build

You need git to checkout the source code:

git clone https://github.com/containerd/overlaybd.git
cd overlaybd
git submodule update --init

The whole project is managed by CMake. Binaries and resource files will be installed to /opt/overlaybd/.

mkdir build
cd build
cmake ..
make -j
sudo make install

Considering some libcurl and libopenssl has API changes, if want to build a make-sured compatible version libcurl and openssl, and link to executable as static library.

Noticed that building libcurl and openssl depends on autoconf automake and libtool.

cmake -D BUILD_CURL_FROM_SOURCE=1 ..

If you want to use the original libext2fs instead of our customized libext2fs.

cmake -D ORIGIN_EXT2FS=1 ..

For more information about ORIGIN_EXT2FS go to USERSPACE_CONVERTOR.

If you want to use DSA hardware to accelerate CRC calculation.

cmake -D ENABLE_DSA=1 ..

If you want to use avx512 to accelerate CRC calculation.

cmake -D ENABLE_ISAL=1 ..

If you want to use QAT to accelerate compression/decompression.

cmake -D ENABLE_QAT=1 ..

For more information go to overlaybd/src/overlaybd/zfile/README.md.

Finally, setup a systemd service for overlaybd-tcmu backstore.

sudo systemctl enable /opt/overlaybd/overlaybd-tcmu.service
sudo systemctl start overlaybd-tcmu

Configuration

overlaybd config

Default configure file overlaybd.json is installed to /etc/overlaybd/.

{
    "logConfig": {
        "logLevel": 1,
        "logPath": "/var/log/overlaybd.log"
    },
    "cacheConfig": {
        "cacheType": "file",
        "cacheDir": "/opt/overlaybd/registry_cache",
        "cacheSizeGB": 4
    },
    "gzipCacheConfig": {
        "enable": true,
        "cacheDir": "/opt/overlaybd/gzip_cache",
        "cacheSizeGB": 4
    },
    "credentialConfig": {
        "mode": "file",
        "path": "/opt/overlaybd/cred.json"
    },
    "ioEngine": 0,
    "download": {
        "enable": true,
        "delay": 600,
        "delayExtra": 30,
        "maxMBps": 100
    },
    "p2pConfig": {
        "enable": false,
        "address": "localhost:19145/dadip2p"
    },
    "exporterConfig": {
        "enable": false,
        "uriPrefix": "/metrics",
        "port": 9863,
        "updateInterval": 60000000
    },
    "enableAudit": true,
    "auditPath": "/var/log/overlaybd-audit.log"
}
Field Description
logConfig.logLevel The log level for log file, 0 - DEBUG, 1 - INFO, 2 - WARN, 3 - ERROR
logConfig.logPath The path for log file, /var/log/overlaybd.log is the default value.
logConfig.logSizeMB The size limit for log file, in MB, 10 is default (10 MB).
logConfig.logRotateNum The rotate number for log file, 3 is default.
ioEngine IO engine used to open local files: psync 0, libaio 1, posix aio 2.
cacheConfig.cacheType Cache type used, file, ocf and download are supported.
cacheConfig.cacheDir The cache directory for remote image data.
cacheConfig.cacheSizeGB The max size of cache, in GB.
cacheConfig.refillSize The refill size from source, in byte. 262144 is default (256 KB).
gzipCacheConfig.enable Whether decompressed gzip file cache is enabled or not.
gzipCacheConfig.cacheDir The cache directory for decompressed gzip data.
gzipCacheConfig.cacheSizeGB The max size of cache, in GB.
gzipCacheConfig.refillSize The refill size from source, in byte. 262144 is default (256 KB).
credentialFilePath(legacy) The credential used for fetching images on registry. /opt/overlaybd/cred.json is the default value.
credentialConfig.mode Authentication mode for lazy-loading.
- file means reading credential from credentialConfig.path.
- http means sending an http request to credentialConfig.path
credentialConfig.path credential file path or url which is determined by mode
download.enable Whether background downloading is enabled or not.
download.delay The seconds waiting to start downloading task after the overlaybd device launched.
download.delayExtra A random extra delay is attached to delay, avoiding too many tasks started at the same time.
download.maxMBps The speed limit in MB/s for a downloading task.
download.blockSize The download block size from source, in byte. 262144 is default (256 KB).
p2pConfig.enable Whether p2p proxy is enabled or not.
p2pConfig.address The proxy for p2p download, the format is localhost:<P2PConfig.Port>/<P2PConfig.APIKey>, depending on dadip2p.yaml
exporterConfig.enable whether or not create a server to show Prometheus metrics.
exporterConfig.uriPrefix URI prefix for export metrics.
exporterConfig.port port for http server to show metrics.
exporterConfig.updateInterval Time interval to update metrics in microseconds.
enableAudit Enable audit or not.
enableThread Enable overlaybd device run in seprate thread or not. Note cacheType should be ocf. false is default.
auditPath The path for audit file, /var/log/overlaybd-audit.log is the default value.
registryFsVersion registry client version, 'v1' libcurl based, 'v2' is photon http based. 'v2' is the default value.
prefetchConfig.concurrency Prefetch concurrency for reloading trace, 16 is default
certConfig.certFile The path for SSL/TLS client certificate file
certConfig.keyFile The path for SSL/TLS client key file

NOTE: download is the config for background downloading. After an overlaybd device is lauched, a background task will be running to fetch the whole blobs into local directories. After downloading, I/O requests are directed to local files. Unlike other options, download config is reloaded when a device launching.

credential config

Important: The corresponding credential has to be set before launching devices, if the registry is not public.

Credentials are reloaded when authentication is required. Credentials have to be updated before expiration if temporary credential is used, otherwise overlaybd keeps reloading until a valid credential is set.

Overlaybd supports serveral credential mode. Here are some example credentialConfig field.

  • mode file

    the credentialConfig.path should be similar to '.docker/config.json' like this:

#### /etc/overlaybd/config.json ####
{
  "logLevel": 1,
  "logPath": "/var/log/overlaybd.log",
  ...
  "credentialConfig": {
      "mode": "file",
      "path": "/opt/overlaybd/cred.json"
    },
  ...
}
#### /opt/overlaybd/cred.json ####
{
  "auths": {
    "hub.docker.com": {
      "username": "username",
      "password": "password"
    },
    "hub.docker.com/hello/world": {
      "auth": "dXNlcm5hbWU6cGFzc3dvcmQK"
    }
  }
}
  • mode http

    the credentialConfig.path should be a server listening address implemented by developers and can reply to credential information.

#### /etc/overlaybd/config.json ####
{
  "logLevel": 1,
  "logPath": "/var/log/overlaybd.log",
  ...
  "credentialConfig": {
      "mode": "http",
      "path": "localhost:19876/auth"
    },
  ...
}

overlaybd will send http request to the server with remote_url like this:

GET "localhost:19876/auth?remote_url=https://hub.docker.com/v2/overlaybd/ubuntu/blobs/sha256:47e63559a8487efb55b2f1ccea9cfc04110a185c49785fdf1329d1ea462ce5f0" the server response should be formatted as follows:

{
  "traceId": "${trace_id}"
  "success": true or false
  "data": {
    "auths": {
      "hub.docker.com": {
        "username": "username",
        "password": "password"
      }
    }
  }
}

we write a sample http server in test/simple_auth_server.cpp

Usage

Use with containerd

Please install overlaybd and refer to Accelerated Container Image. Overlaybd is well integrated with containerd and easy to use.

Standalone Usage

For other scenarios, users can use overlaybd manually. Overlaybd works as a backing store of TCMU, so users can run overlaybd image by interacting with configfs.

Config file

A config file is required to describe an overlaybd image, only local image and registry image are supported. Here is a sample json config file:

{
      "repoBlobUrl": "https://obd.cr.aliyuncs.com/v2/overlaybd/sample/blobs",
      "lowers" : [
          {
              "file" : "/opt/overlaybd/layer0"
          },
          {
              "dir": "/var/lib/containerd/root/io.containerd.snapshotter.v1.overlayfs/snapshots/1000",
              "digest": "sha256:e3b0d67cfa3a37dfed187badc7766e3db64d492c4db2dc4260997b41af1b28f3",
              "size": 43446424
          }
      ],
      "resultFile": "/home/overlaybd/1/result"
}
Field Description
repoBlobUrl the url of the repository blobs of the remote image. It is required for a registry image.
lowers a list describing the lower layers of the image in bottom-upper order.
file it means the corresponding layer is a local file. if a local file is used, other options are not needed.
dir it means the corresponding layer will be stored in this directory after downloading.
digest and size the digest and size of a remote layer. It is required for a remote layer.
resultFile the file for saving the failure reasons. If a device is successfully lauched, success is writen into the file, otherwise, the failure s reported by this file.

Start up

Here is an example to start up an overlaybd image. First, create the overlaybd tcmu device.

mkdir -p /sys/kernel/config/target/core/user_1/vol1
echo -n dev_config=overlaybd//root/config.v1.json > /sys/kernel/config/target/core/user_1/vol1/control
echo -n 1 > /sys/kernel/config/target/core/user_1/vol1/enable

Then, create a tcm loop device.

mkdir -p /sys/kernel/config/target/loopback/naa.123456789abcdef/tpgt_1/lun/lun_0
echo -n "naa.123456789abcdef" > /sys/kernel/config/target/loopback/naa.123456789abcdef/tpgt_1/nexus
ln -s /sys/kernel/config/target/core/user_1/vol1 /sys/kernel/config/target/loopback/naa.123456789abcdef/tpgt_1/lun/lun_0/vol1

Then a block device /dev/sdX is generated, overlaybd image can be used locally. Furthermore, overlaybd device can be used on remote hosts by iscsi.

Clean up

Just remove the files and directories in configfs in reverse order.

Writable layer

Overlaybd provides a log-structured writable layer and a sprase-file writable layer. Log-structured layer is append only and converts all writes into sequential writes so that the image build/convert process is usually faster. Sparse-file writable layer is more suitable for container rutime.

Use overlaybd-create to create a writable layer.

  /opt/overlaybd/bin/overlaybd-create ${data_file} ${index_file} ${virtual size}

use -s to for creating sparse-file writable layer. The upper option in overlaybd config file must be set to use a writable layer. Only one writable layer is avialable and it always workes as the top layer.Example:

{
    "repoBlobUrl": ...,
    "lowers" : [
        ...
    ],
    "upper": {
        "index": "${index_file}",
        "data": "${data_file}"
    },
    "resultFile": "/home/overlaybd/1/result"
}

If upper is set, the overlaybd device is launched as a writable device. The differences produced by data writing are stored in the index and data files ofupper.

After writing data and destroying the device, overlaybd-commit command is required to excute to commit the layer into a read-only layer and can be used asa lower layer later.

/opt/overlaybd/bin/overlaybd-commit ${data_file} ${index_file} ${commit_file}

At last, compression may be needed.

/opt/overlaybd/bin/overlaybd-zfile ${commit_file} ${zfile}

The zfile can be used as lower layer with online decompression.

Kernel module

DADI_kmod is a kernel module of overlaybd. It can make local overlaybd-format files as a loop device or device-mapper.

Contributing

Welcome to contribute! CONTRIBUTING

Licenses

Overlaybd is released under the Apache License, Version 2.0.

overlaybd's People

Contributors

alibaba-oss avatar alpc62 avatar austinvazquez avatar beef9999 avatar benwaffle avatar bigvan avatar changweige avatar cnswee avatar coldwings avatar fuweid avatar hhb584520 avatar hileqaq avatar liulanzheng avatar michael9999mk avatar northtyphoon avatar shizhmsft avatar waberzhuang avatar yuchen0cc avatar zchee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

overlaybd's Issues

.deb package regression

Hello, the .deb no longer has deps set,

# dpkg -I overlaybd-0.6.1-1.x86_64.deb 
 new Debian package, version 2.0.
 size 6769800 bytes: control archive=580 bytes.
     186 bytes,     9 lines      control
     669 bytes,    10 lines      md5sums
 Architecture: amd64
 Description: overlaybd built using CMake
 Maintainer: The overlaybd authors
 Package: overlaybd
 Priority: optional
 Section: devel
 Version: 0.6.1
 Installed-Size: 25671

Download chunks concurrently when in background download mode

What is the version of your Overlaybd

No response

What would you like to be added?

I would like overlaybd to download chunks concurrently when in background download mode, instead of waiting for one chunk to download before starting on the next.

Why is this needed for Overlaybd?

OverlayBD lazy pulling works amazingly if the latency between the backing OCI registry and overlaybd-tcmu is less than 2ms. Unfortunately, this isn't the case if the latency is high, for example 200-300ms when talking to quay.io. Downloading each 256Kb chunk is near instant, but it takes 200ms for a roundtrip to the registry, and containers boot slowly.

Increasing the refillSize to 10 Mb helps. Lazy pulling from quay.io works better, but still the link is nowhere near saturated, and boot times are high. Probably raising the chunk size to 100 Mb would help, but at such a high chunk size all benefits of lazy pulling are negated.

When background download is enabled the layer download speed of overlaybd should be indistinguishable from just pulling the layers ahead of time using a tool like skopeo or crane. Currently, that's not the case as downloading chunks is synchronous. Overlaybd waits for one chunk to finish downloading before starting on the next. I want to solve this by having a thread pool downloading chunks concurrently, similar to prefetch.

Are you willing to submit PRs to contribute to this feature?

  • Yes, I am willing to implement it.

Support zstd in ZFile

In some cases, zstd has higher compression efficiency than lz4(even gzip).
We should support multiple compression algorithms in ZFile and let users choose which algorithm to use in their case.

ubuntu cmake failed

uname -a
Linux DESKTOP-KJS0EBL 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

mkdir build
cd build/
cmake ..
-- The C compiler identification is GNU 10.2.0
-- The CXX compiler identification is GNU 10.2.0
-- Check for working C compiler: /bin/cc
-- Check for working C compiler: /bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /bin/c++
-- Check for working CXX compiler: /bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The ASM compiler identification is GNU
-- Found assembler: /bin/cc
-- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.68.0")
-- Found aio: /usr/lib/x86_64-linux-gnu/libaio.so
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1f")
-- Found PkgConfig: /bin/pkg-config (found version "0.29.1")
-- Checking for module 'gio-unix-2.0'
--   Found gio-unix-2.0, version 2.64.6
CMake Error at CMake/CPack.cmake:1 (set):
  Maximum recursion depth of 1000 exceeded
Call Stack (most recent call first):
  CMake/CPack.cmake:14 (include)
  CMake/CPack.cmake:14 (include)
  CMake/CPack.cmake:14 (include)
...(many many more)
  CMake/CPack.cmake:14 (include)
  CMake/cpack.cmake:14 (include)
  CMakeLists.txt:33 (include)


-- Configuring incomplete, errors occurred!
See also "/root/wujiaxu/workspace/cpp/overlaybd/build/CMakeFiles/CMakeOutput.log".

The last line in cpack.cmake include(CPack) seem recusive choose the same file but not real cpack

how to support windows containers

I think there are severval aspects to consider for Windows containers:

  1. porting overlaybd
  • Windows container in Linux host: overlaybd should work out-of-box, by passing through the virtual block device (generated by TCMU in host) to guest; and it's also possible to integrate overlaybd into hypervisor, avoiding the virtual block device in host kernel.

  • Windows container in Windows host: the userspace code of overlaybd can be easily ported to Windows with the help of WSL, cygwin or mingw; but I'm not sure whether WSL have the support for TCMU virtual block device;

  1. snapshotter / graphdriver
  • I believe that windows containers use a different snapshotter / graphdriver than overlay2 in linux, so we have to port overlaybd's driver to windows; as project teleport is also a remote image, which should be a good fit for reference.
  1. building image
  • should work as exepected, as long as using overlaybd's native writable layer;

  • does buildkit have support for windows images?

  1. running container
  • should work as exepected, as long as snapshotter / graphdriver is properly implemented


Any comments?

Accept access_token as long as token in auth

Not all registries return token from the responses of their authentication servers.

  • Microsoft ACR returns access_token instead of token.
  • DockerHub returns both token and access_token although they are duplicated.

Overlaybd log retention and time zone

Hi Overlaybd community we noticed the log retention for overlaybd.log and overlaybd-audit.log seems to be hard coded now, is it possible to make them configurable so we can keep more logs for investigations?

Also the logs timestamp seems to be UTC +8, is it possible to configure it to UTC?

Thanks!

Add p2p support

Since dadi-p2p has been open-sourced several months. It's time to let overlaybd support lazy loading in dadi-p2p.

Coredump when metrics enabled

What happened in your environment?

the overlaybd process meets a crash when enable the metrics exporter

What did you expect to happen?

No response

How can we reproduce it?

enable metrics in overlaybd.json then restart service

What is the version of your Overlaybd?

latest

What is your OS environment?

ubuntu 20.04

Are you willing to submit PRs to fix it?

  • Yes, I am willing to fix it.

.clang-format is not enforced

Though a clang-format configuration file is provided in the project, some source files and header files don't enforce the rule defined there.
Any plan to format the source files?

RPM package release?

Are there plans to release an RPM package? I noticed that the accelerated-container-image v0.6.0 release has an .rpm binary.

RegistryFS V2 fails to connect to registry while RegistryFS V1 works fine

What happened in your environment?

I have an overlaybd lazy pulling config which works on RegistryFS v1 but fails on Registry FS v2

What did you expect to happen?

No response

How can we reproduce it?

With the following overlaybd config

{
   "hocusBaseRemoteRef":"host.docker.internal:9999/hocus/hocus-block-registry-tests@sha256:cd03e262d2462f12649eb4ad7c8e037edccfd3fa1b49fa116635a5658687c514",
   "repoBlobUrl":"host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs",
   "download":{
      "enable":true,
      "delay":0
   },
   "lowers":[
      {
         "hocusLayerType":"lazy",
         "dir":"/srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/layers/sha256:a8b5fca80efae55088290f3da8110d7742de55c2a378d5ab53226a483f390e21",
         "digest":"sha256:a8b5fca80efae55088290f3da8110d7742de55c2a378d5ab53226a483f390e21",
         "size":4739584
      },
      {
         "hocusLayerType":"lazy",
         "dir":"/srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/layers/sha256:0f4cc9cb34d36dbb2e59b3f466c200cf33a09e6064ee2bc0fc052969c3c2e190",
         "digest":"sha256:0f4cc9cb34d36dbb2e59b3f466c200cf33a09e6064ee2bc0fc052969c3c2e190",
         "size":57344
      },
      {
         "hocusLayerType":"lazy",
         "dir":"/srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/layers/sha256:aa2a28232710ebbcc24947127eac53e0a47db8b9ec84c2e83829469bf01da059",
         "digest":"sha256:aa2a28232710ebbcc24947127eac53e0a47db8b9ec84c2e83829469bf01da059",
         "size":57856
      }
   ],
   "resultFile":"/srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/run/obd-result-im_im1",
   "hocusImageId":"im_im1"
}

Everything works fine on V1 but on V2 I get this in the log file:

2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/image_service.cpp:223|read_global_config_and_set:log config: [log_level=1][log_path=/srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/logs/overlaybd.log][log_size=10485760][log_num=3]
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/image_service.cpp:325|init:cache config: [cache_type=download][cache_dir=/srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/obd_registry_cache][cache_size_GB=4][refill_size=262144]
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/image_service.cpp:340|init:create registryfs with cafile:/etc/ssl/certs/ca-certificates.crt, version:v2
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/build/_deps/photon-src/io/epoll.cpp:289|new_epoll_engine:Init event engine: epoll
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/build/_deps/photon-src/io/epoll.cpp:289|new_epoll_engine:Init event engine: epoll
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/overlaybd/cache/download_cache/download_cache.cpp:115|DownloadCacheFs:new DownloadCacheFs
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/image_service.cpp:416|init:use gzip file cache
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/main.cpp:417|main:blocking netlink
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/main.cpp:420|main:blocking netlink done
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/main.cpp:428|main:resetting netlink
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/main.cpp:430|main:reset netlink done
2023/06/16 00:22:01|INFO |th=00007F649EF5F740|/overlaybd/src/main.cpp:292|dev_open:dev open /srv/jailer/tests/4fdbf6e3-be13-411d-9957-7fdec4f26ec2/block-registry/block_config/im_im1
2023/06/16 00:22:01|INFO |th=00007F645DF55E80|/overlaybd/src/image_file.cpp:141|__open_ro_remote:open file from remotefs: host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:a8b5fca80efae55088290f3da8110d7742de55c2a378d5ab53226a483f390e21, size: 4739584
2023/06/16 00:22:01|INFO |th=00007F645D752740|/overlaybd/src/image_file.cpp:141|__open_ro_remote:open file from remotefs: host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:0f4cc9cb34d36dbb2e59b3f466c200cf33a09e6064ee2bc0fc052969c3c2e190, size: 57344
2023/06/16 00:22:01|INFO |th=00007F645CF4AEC0|/overlaybd/src/image_file.cpp:141|__open_ro_remote:open file from remotefs: host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:aa2a28232710ebbcc24947127eac53e0a47db8b9ec84c2e83829469bf01da059, size: 57856
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/kernel_socket.cpp:260|do_connect:Failed to connect socket errno=111(Connection refused)
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:155|do_roundtrip:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:400|get_length:failed to get meta from server
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:426|open:failed to open and stat registry file host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:a8b5fca80efae55088290f3da8110d7742de55c2a378d5ab53226a483f390e21, ret -1
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/overlaybd/cache/download_cache/download_cache.cpp:123|open:failed to open src: host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:a8b5fca80efae55088290f3da8110d7742de55c2a378d5ab53226a483f390e21 errno=2(No such file or directory)
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/image_file.cpp:161|__open_ro_remote:failed to open remote file host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:a8b5fca80efae55088290f3da8110d7742de55c2a378d5ab53226a483f390e21: No such file or directory errno=2(No such file or directory)
2023/06/16 00:22:01|ERROR|th=00007F645DF55E80|/overlaybd/src/image_file.cpp:246|do_parallel_open_files:failed to open files
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:400|get_length:failed to get meta from server
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:426|open:failed to open and stat registry file host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:0f4cc9cb34d36dbb2e59b3f466c200cf33a09e6064ee2bc0fc052969c3c2e190, ret -1
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/overlaybd/cache/download_cache/download_cache.cpp:123|open:failed to open src: host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:0f4cc9cb34d36dbb2e59b3f466c200cf33a09e6064ee2bc0fc052969c3c2e190 errno=2(No such file or directory)
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/image_file.cpp:161|__open_ro_remote:failed to open remote file host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:0f4cc9cb34d36dbb2e59b3f466c200cf33a09e6064ee2bc0fc052969c3c2e190: No such file or directory errno=2(No such file or directory)
2023/06/16 00:22:01|ERROR|th=00007F645D752740|/overlaybd/src/image_file.cpp:246|do_parallel_open_files:failed to open files
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/build/_deps/photon-src/net/http/client.cpp:246|call:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:260|get_scope_auth:connection failed
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:400|get_length:failed to get meta from server
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/registryfs/registryfs_v2.cpp:426|open:failed to open and stat registry file host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:aa2a28232710ebbcc24947127eac53e0a47db8b9ec84c2e83829469bf01da059, ret -1
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/overlaybd/cache/download_cache/download_cache.cpp:123|open:failed to open src: host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:aa2a28232710ebbcc24947127eac53e0a47db8b9ec84c2e83829469bf01da059 errno=2(No such file or directory)
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/image_file.cpp:161|__open_ro_remote:failed to open remote file host.docker.internal:9999/v2/hocus/hocus-block-registry-tests/blobs/sha256:aa2a28232710ebbcc24947127eac53e0a47db8b9ec84c2e83829469bf01da059: No such file or directory errno=2(No such file or directory)
2023/06/16 00:22:01|ERROR|th=00007F645CF4AEC0|/overlaybd/src/image_file.cpp:246|do_parallel_open_files:failed to open files
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/src/image_file.cpp:337|open_lowers:layer index 0 open failed, exit.
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/src/image_file.cpp:470|init_image_file:open lower layer failed.
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/src/main.cpp:302|dev_open:create image file failed
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/build/_deps/tcmu-src/libtcmu.cpp:605|device_add:handler open failed for uio0
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/build/_deps/tcmu-src/libtcmu.cpp:560|device_add:could not find handler for uio1
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/build/_deps/tcmu-src/libtcmu.cpp:560|device_add:could not find handler for uio2
2023/06/16 00:22:01|ERROR|th=00007F649EF5F740|/overlaybd/build/_deps/tcmu-src/libtcmu.cpp:640|device_remove:Could not remove device uio0: not found.
2023/06/16 00:22:01|INFO |th=00007F64A47C7740|/overlaybd/src/main.cpp:371|sigint_handler:sigint received
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/main.cpp:460|main:main loop exited
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/main.cpp:463|main:tcmulib closed
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/overlaybd/cache/download_cache/download_cache.cpp:118|~DownloadCacheFs:delete DownloadCacheFs
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/build/_deps/photon-src/io/epoll.cpp:75|~EventEngineEPoll:Finish event engine: epoll
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/build/_deps/photon-src/io/epoll.cpp:75|~EventEngineEPoll:Finish event engine: epoll
2023/06/16 00:22:01|INFO |th=00000000037458E0|/overlaybd/src/image_service.cpp:485|~ImageService:image service is fully stopped

What is the version of your Overlaybd?

https://github.com/hocus-dev/overlaybd/tree/bd560ed9066345fd71a1d44489d90e98662ba234
https://github.com/hocus-dev/hocus/blob/3e163c1792f12cacdc5054ed6faa3bc20162ac31/ops/docker/prebuilds.Dockerfile#L7

What is your OS environment?

Ubuntu 22.04.2 LTS running on Hocus

Are you willing to submit PRs to fix it?

  • Yes, I am willing to fix it.

请问使用overlaybd后,层缓存还会生效吗

层缓存指的是:不同镜像中某些层内容一样,在机器上共用该层,只需要下载一次

问题:将这些镜像转换为DADI镜像,相同内容的层还可以共用本地缓存吗

e.g:
镜像A 层包括: �a b c 镜像B 层包括:c d f 镜像A和镜像B层sha256内容一致

镜像A和镜像B转换加速镜像后

在同一台机器上,加速镜像A下载完成后,下载加速镜像B时,还需要下载层c吗

Low performance of FastOCI

Hi!
I've checked out FastOCI and ran some vm's using it. Unfortunately FastOCI has a prohibitive overhead, when booting vm's using cloud hypervisor then:
On FastOCI images:

root@localhost:~# systemd-analyze
Startup finished in 3.881s (kernel) + 4.782s (userspace) = 8.664s 
graphical.target reached after 4.778s in userspace
root@localhost:~# 

On OverlayBD images:

root@localhost:~# systemd-analyze
Startup finished in 3.608s (kernel) + 894ms (userspace) = 4.503s 
graphical.target reached after 889ms in userspace
root@localhost:~# systemd-analyze

FastOCI did not only affect the boot time but the VM was feeling way less snappy in interactive use and workloads like spawning containers on the VM took twice as long on FastOCI compared to OverlayBD.

can't install overlaybd-0.4.0-1.x86_64.deb

root@iZ6weakh6nugr2mo3361g7Z:/opt# apt install ./overlaybd-0.4.0-1.x86_64.deb 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'overlaybd:none' instead of './overlaybd-0.4.0-1.x86_64.deb'
The following NEW packages will be installed:
  overlaybd:none
0 upgraded, 1 newly installed, 0 to remove and 47 not upgraded.
Need to get 0 B/3,303 kB of archives.
After this operation, 15.0 MB of additional disk space will be used.
Get:1 /opt/overlaybd-0.4.0-1.x86_64.deb overlaybd none 0.4.0 [3,303 kB]
dpkg: warning: parsing file '/var/lib/dpkg/tmp.ci/control' near line 9 package 'overlaybd':
 empty value for 'Architecture' field
dpkg: error processing archive /opt/overlaybd-0.4.0-1.x86_64.deb (--unpack):
 package architecture () does not match system (amd64)
Errors were encountered while processing:
 /opt/overlaybd-0.4.0-1.x86_64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

"Snapshot" of writable layers

What is the version of your Overlaybd

No response

What would you like to be added?

I would like for the overlaybd-tcmu binary to implement a TCMU reconfigure handler which:

  1. Temporarily pauses IO on the block device
  2. Seals the current writable layer
  3. Creates a new empty writable layer
  4. Reconfigures itself, so the sealed layer is now a lower layer and the upper layer points to the new empty layer
  5. Resumes IO
    Sealing is quick, so the IO pause shouldn't be noticeable for users of the block device.

Why is this needed for Overlaybd?

OverlayBD will be the main storage back-end for https://github.com/hocus-dev/hocus (we're currently finishing the migration from raw sparse files to OverlayBD). We would have 2 use cases for reconfiguration:

  1. Hocus spawns long-lived vm's (workspaces) which we would like to periodically back up to an OCI registry without recreating the vm's from scratch.
  2. When fetching content from remote repositories we spawn an dedicated VM for that task which pulls changes from the remote repository into a new layer. If re-configuring tcmu was supported we could reuse the same block device and vm between pulls of remote repositories.

Are you willing to submit PRs to contribute to this feature?

  • Yes, I am willing to implement it.

image_service/load_cred_from_file: failed to parse blob url from Azure Container Registry

I got the following error

2021/10/16 09:36:48|ERROR|th=00007F37082BB840|image_service.cpp:75|parse_blob_url:invalid blob url: https://bindueastus2.azurecr.io/v2/redis/blobs/sha256:e698e83992b0cb6259e722c3365dde728e71dca5d344a51912b2ec27e05eb52b

For the above url, the word count read by parse_blob_url is 4.

https://github.com/alibaba/overlaybd/blob/75d7f8494229c2bd7008759ede68608b27a7f430/src/image_service.cpp#L74

Error when execute cmake

i don't known much about cmake, when i excute "cd build && cmake ..",it shows:
-- Configuring done
CMake Error at src/overlaybd/cache/ocf_cache/CMakeLists.txt:12 (add_library):
No SOURCES given to target: ocf_lib

Can anyone help me with this problem? Thanks

overlaybd-tcmu crash

After we sync the latest overlaybd codes(until a1390fa), the overlaybd-tcmu crash when bootup.

OS version: CentOS Linux release 7.4.1708 (Core)
kernel version: 4.18.0

The backtrace:
(gdb) bt #0 0x00007f5194ac4387 in raise () at /lib64/libc.so.6 #1 0x00007f5194ac5a78 in abort () at /lib64/libc.so.6 #2 0x00007f5194abd1a6 in __assert_fail_base () at /lib64/libc.so.6 #3 0x00007f5194abd252 in () at /lib64/libc.so.6 #4 0x00000000004f1554 in alog_format::FMTLogBuffer::printf_fmt<60, 81, , int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<81> >, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., x=@0x7f518de770c8: -1, xs#0=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:533 #5 0x00000000004f126b in alog_format::next<true, 60>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<81> >, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<81> >, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., x=@0x7f518de770cc: 3473955946, xs#0=@0x7f518de770c8: -1, xs#1=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #6 0x00000000004f0cd8 in alog_format::FMTLogBuffer::printf_fmt<50, 59, 81, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<59, 81> >, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., x=@0x7f518de770cc: 3473955946, xs#0=@0x7f518de770c8: -1, xs#1=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #7 0x00000000004f059b in alog_format::next<true, 50>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<59, 81> >, unsigned int, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<59, 81> >, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., x=@0x7f518de76fbc: 6619904, xs#0=@0x7f518de770cc: 3473955946, xs#1=@0x7f518de770c8: -1, xs#2=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #8 0x00000000004efa7d in alog_format::FMTLogBuffer::printf_fmt<37, 49, 59, 81, unsigned int, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<49, 59, 81> >, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., x=@0x7f518de76fbc: 6619904, xs#0=@0x7f518de770cc: 3473955946, xs#1=@0x7f518de770c8: -1, xs#2=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #9 0x00000000004eeeac in alog_format::next<true, 37>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<49, 59, 81> >, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<49, 59, 81> >, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., x=@0x7f518de97170: 38113, xs#0=@0x7f518de76fbc: 6619904, xs#1=@0x7f518de770cc: 3473955946, xs#2=@0x7f518de770c8: -1, xs#3=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #10 0x00000000004edbb0 in alog_format::FMTLogBuffer::printf_fmt<26, 36, 49, 59, 81, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<36, 49, 59, 81> >, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., x=@0x7f518de97170: 38113, xs#0=@0x7f518de76fbc: 6619904, xs#1=@0x7f518de770cc: 3473955946, xs#2=@0x7f518de770c8: -1, xs#3=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #11 0x00000000004ec2a7 in alog_format::next<true, 26>::printf_fmt<alog_format::ALogFMTString<alog_format::seq<36, 49, 59, 81> >, long, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::FMTLogBuffer&, alog_format::ALogFMTString<alog_format::seq<36, 49, 59, 81> >, long const&, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (log=..., fmt=..., x=@0x7f518de87138: 0, xs#0=@0x7f518de97170: 38113, xs#1=@0x7f518de76fbc: 6619904, xs#2=@0x7f518de770cc: 3473955946, xs#3=@0x7f518de770c8: -1, xs#4=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:504 #12 0x00000000004ea0f9 in alog_format::FMTLogBuffer::printf_fmt<0, 25, 36, 49, 59, 81, long, unsigned long, unsigned int, unsigned int, int, alog_noop>(alog_format::ALogFMTString<alog_format::seq<25, 36, 49, 59, 81> >, long const&, unsigned long const&, unsigned int const&, unsigned int const&, int const&, alog_noop const&) (this=0x7f518de75f10, fmt=..., x=@0x7f518de87138: 0, xs#0=@0x7f518de97170: 38113, xs#1=@0x7f518de76fbc: 6619904, xs#2=@0x7f518de770cc: 3473955946, xs#3=@0x7f518de770c8: -1, xs#4=...) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:537 #13 0x00000000004e108f in __log__<alog_format::seq<25, 36, 49, 59, 81>, 80, long&, unsigned long const&, unsigned int, unsigned int&, int&, alog_noop>(int, ILogOutput *, co---Type <return> to continue, or q <return> to quit--- nst Prologue &, const char (&)[80], long &, const unsigned long &, <unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332003>, unsigned int &, int &, <unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332030>) (level=3, output= 0x874720 <default_log_output_file>, prolog=..., fmt=..., xs#0=@0x7f518de87138: 0, xs#1=@0x7f518de97170: 38113, xs#2=<unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332003>, xs#3=@0x7f518de770cc: 3473955946, xs#4=@0x7f518de770c8: -1, xs#5=<unknown type in /opt/overlaybd/bin/overlaybd-tcmu, CU 0x300276, DIE 0x332030>) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:574 #14 0x00000000004e717a in ZFile::CompressionFile::pread(void*, unsigned long, long)::{lambda(ILogOutput*)#3}::operator()(ILogOutput*) const (__closure=0x7f518de97198, __output___LINE__=0x874720 <default_log_output_file>) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/zfile.cpp:426 #15 0x00000000004e8ac4 in LogBuilder<ZFile::CompressionFile::pread(void*, unsigned long, long)::{lambda(ILogOutput*)#3}>::~LogBuilder() (this=0x7f518de97190, __in_chrg=<optimized out>) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/../../alog.h:596 #16 0x00000000004e76fa in ZFile::CompressionFile::pread(void*, unsigned long, long) (this=0x3ea6050, buf=0x7f518de98000, count=4096, offset=0) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/zfile/zfile.cpp:426 #17 0x00000000004562ce in FileSystem::SwitchFile::pread(void*, unsigned long, long) (this=0x3ea6110, buf=0x7f518de98000, count=4096, offset=0) at /rpmbuild/BUILD/overlaybd-0.4.1/src/switch_file.cpp:135 #18 0x00000000004b2662 in LSMT::verify_ht(FileSystem::IFile*, char*) (file=0x3ea6110, buf=0x7f518de98000 "") at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/lsmt/file.cpp:859 #19 0x00000000004b2aad in LSMT::do_load_index(LSMT::IFile*, LSMT::HeaderTrailer*, bool) (file=0x3ea6110, pheader_trailer=0x3eeffd8, trailer=true) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/lsmt/file.cpp:871 #20 0x00000000004b4753 in LSMT::do_parallel_load_index(void*) (param=0x7ffd46696460) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/fs/lsmt/file.cpp:1086 #21 0x0000000000478c2f in photon::thread::go() (this=0x7f518de99800) at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/photon/thread.cpp:100 #22 0x0000000000476ace in photon::thread_stub() () at /rpmbuild/BUILD/overlaybd-0.4.1/src/overlaybd/photon/thread.cpp:255 #23 0x0000000000000000 in ()

compile error on gcc10

[ 81%] Built target fs_lib
Scanning dependencies of target net_lib
make[2]: Warning: File 'src/overlaybd/net/CMakeFiles/net_lib.dir/depend.make' has modification time 2.8 s in the future
[ 82%] Building CXX object src/overlaybd/net/CMakeFiles/net_lib.dir/curl.cpp.o
/root/wujiaxu/workspace/cpp/overlaybd/src/overlaybd/net/curl.cpp:215:6: error: ‘string’ in namespace ‘std’ does not name a type
  215 | std::string url_escape(const char *str) {
      |      ^~~~~~
/root/wujiaxu/workspace/cpp/overlaybd/src/overlaybd/net/curl.cpp:24:1: note: ‘std::string’ is defined in header ‘<string>’; did you forget to ‘#include <string>’?
   23 | #include "../timeout.h"
  +++ |+#include <string>
   24 | #include "../utility.h"
make[2]: *** [src/overlaybd/net/CMakeFiles/net_lib.dir/build.make:63: src/overlaybd/net/CMakeFiles/net_lib.dir/curl.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:729: src/overlaybd/net/CMakeFiles/net_lib.dir/all] Error 2
make: *** [Makefile:152: all] Error 2

registryfs.cpp: getActualUrl

/home/runner/work/overlaybd/overlaybd/src/overlaybd/registryfs/registryfs.cpp:241|getActualUrl:Failed to get actual url [url=http://172.17.18.1:19145/v2/library/redis/blobs/sha256:c62d96ea337990a7cd656edc1a4f4f0d2e0ca460bcda50358a8e40967e8e011f][ret=404]

l am using a simple registry which only handles basic requests, such as manifests and blobs. So, how to close this features?

Fail to make due boost download failure

Fail to download the boost library due to 401 Forbidden.

Output:

$ make -j
[  3%] Built target cache_frontend_lib
[  4%] Built target baselayer
[  8%] Built target lsmt_lib
[ 31%] Built target RapidJSON
[ 11%] Built target full_file_cache_lib
[ 12%] Performing download step (download, verify and extract) for 'Boost'
[ 39%] Built target base_lib
[ 19%] Built target zfile_lib
[ 21%] Built target net_lib
-- verifying file...
       file='/home/shizh/overlaybd/external/boost/src/boost_1_75_0.tar.gz'
-- MD5 hash of
    /home/shizh/overlaybd/external/boost/src/boost_1_75_0.tar.gz
  does not match expected value
    expected: '38813f6feb40387dfe90160debd71251'
      actual: 'd41d8cd98f00b204e9800998ecf8427e'
-- File already exists but hash mismatch. Removing...
-- Downloading...
   dst='/home/shizh/overlaybd/external/boost/src/boost_1_75_0.tar.gz'
   timeout='none'
-- Using src='https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz'
[ 49%] Built target tcmu_lib
[ 51%] Built target cache_lib
[ 54%] Built target registryfs_lib
-- Retrying...
-- Using src='https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz'
-- Retry after 5 seconds (attempt #2) ...
-- Using src='https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz'
-- Retry after 5 seconds (attempt #3) ...
-- Using src='https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz'
-- Retry after 15 seconds (attempt #4) ...
-- Using src='https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz'
-- Retry after 60 seconds (attempt #5) ...
-- Using src='https://dl.bintray.com/boostorg/release/1.75.0/source/boost_1_75_0.tar.gz'
CMake Error at Boost-stamp/download-Boost.cmake:157 (message):
  Each download failed!

How to clear the local layer cache

How to clear the local layer cache ?
Can I delete the cached files in the ’registryCacheDir‘ directory directly? Is the relevant information stored in the memory?

Refactor with PhotonLibOS

Since PhotonLibOS is official released, overlaybd will be reconstructed based on the latest photon.
Photon is a high-efficiency LibOS framework, based on a set of carefully selected C++ libs. Overlaybd is now based on an early version of photon. After refactoring, overlaybd will get the latest capabilities of photon.

Write ZFile index into file header

In Overlaybd kernel module https://github.com/data-accelerator/dadi-kernel-mod, it's hard to stat file length via kernel API. To get ZFile index_offset is also complex.

So we want to overwrite ZFile header after compression is done, and add index information into ZFile header.

see #60

Help with build errors

I'm developing on ARM64, and I run into these errors, I was wondering if I could get some help with.

c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-msse4.2’
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-mcrc32’

Full log

❯ make -j                                                                   build -> main
Scanning dependencies of target photon_obj
[  1%] Building CXX object src/overlaybd/cache/ocf_cache/CMakeFiles/ocf_env_lib.dir/ease_bindings/env/ocf_env.cpp.o
[  1%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/checksum/crc32c.cpp.o
[  2%] Building CXX object src/overlaybd/cache/ocf_cache/CMakeFiles/ocf_env_lib.dir/ease_bindings/env/utils_mpool.cpp.o
[  3%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/alog.cpp.o
[  3%] Building CXX object src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/crc32/crc32c.cpp.o
[  4%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/estring.cpp.o
[  4%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/event-loop.cpp.o
[  4%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/identity-pool.cpp.o
[  5%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/executor/executor.cpp.o
[  5%] Building CXX object src/overlaybd/registryfs/CMakeFiles/registryfs_lib.dir/registryfs.cpp.o
[  6%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/iovector.cpp.o
[  6%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o
[  7%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/syscall.c.o
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-msse4.2’
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-mcrc32’
[  7%] Building CXX object _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/easy_weak/easy_weak.cpp.o
c++: error: unrecognized command-line option ‘-msse4.2’
c++: error: unrecognized command-line option ‘-msse4.2’
[  8%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/queue.c.o
[  8%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/register.c.o
c++: error: unrecognized command-line option ‘-msse4.2’
cc: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-msse4.2’
[  9%] Building CXX object src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_file.cpp.o
cc: error: unrecognized command-line option ‘-msse4.2’
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-mcrc32’
make[2]: *** [src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/build.make:76: src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/crc32/crc32c.cpp.o] Error 1
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:76: _deps/photon-build/CMakeFiles/photon_obj.dir/common/alog.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:104: _deps/photon-build/CMakeFiles/photon_obj.dir/common/estring.cpp.o] Error 1
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:118: _deps/photon-build/CMakeFiles/photon_obj.dir/common/event-loop.cpp.o] Error 1
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:132: _deps/photon-build/CMakeFiles/photon_obj.dir/common/executor/executor.cpp.o] Error 1
c++: error: unrecognized command-line option ‘-msse4.2’
[  9%] Generating ../output/ext4_64
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:90: _deps/photon-build/CMakeFiles/photon_obj.dir/common/checksum/crc32c.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:666: src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
c++: error: unrecognized command-line option ‘-mcrc32’
[  9%] Building CXX object src/overlaybd/lsmt/CMakeFiles/lsmt_lib.dir/index.cpp.o
[  9%] Building CXX object src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_fs.cpp.o
c++: error: unrecognized command-line option ‘-msse4.2’
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:160: _deps/photon-build/CMakeFiles/photon_obj.dir/common/iovector.cpp.o] Error 1
cc: error: unrecognized command-line option ‘-mcrc32’
cc: error: unrecognized command-line option ‘-msse4.2’
[ 10%] Building CXX object src/overlaybd/lsmt/CMakeFiles/lsmt_lib.dir/file.cpp.o
[ 10%] Building CXX object src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_pool.cpp.o
c++: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-msse4.2’
make[2]: *** [_deps/photon-build/third_party/CMakeFiles/easy_weak.dir/build.make:76: _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/easy_weak/easy_weak.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:454: _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/all] Error 2
cc: error: unrecognized command-line option ‘-mcrc32’
c++: error: unrecognized command-line option ‘-mcrc32’
[ 11%] Building CXX object src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_store.cpp.o
cc: error: unrecognized command-line option ‘-msse4.2’
c++: error: unrecognized command-line option ‘-msse4.2’
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:146: _deps/photon-build/CMakeFiles/photon_obj.dir/common/identity-pool.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:372: _deps/photon-build/CMakeFiles/photon_obj.dir/all] Error 2
make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:76: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:118: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/syscall.c.o] Error 1
make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:90: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/queue.c.o] Error 1
ext4_64
cc: error: unrecognized command-line option ‘-mcrc32’
cc: error: unrecognized command-line option ‘-msse4.2’
make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:104: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/register.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:346: _deps/photon-build/CMakeFiles/uring.dir/all] Error 2
[ 11%] Built target baselayer
[ 11%] Linking CXX static library ../../../../output/libocf_env_lib.a
[ 11%] Built target ocf_env_lib
[ 11%] Linking CXX static library ../../../../output/libfull_file_cache_lib.a
[ 11%] Built target full_file_cache_lib
[ 12%] Linking CXX static library ../../../../output/libcache_frontend_lib.a
[ 12%] Built target cache_frontend_lib
[ 13%] Linking CXX static library ../../../output/libregistryfs_lib.a
[ 13%] Built target registryfs_lib
[ 14%] Linking CXX static library ../../../output/liblsmt_lib.a
[ 14%] Built target lsmt_lib
make: *** [Makefile:156: all] Error 2
2 ❯ sudo make install                                                       build -> main
[sudo] password for juliusl: 
[  0%] Building C object _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o
cc: error: unrecognized command-line option ‘-mcrc32’
cc: error: unrecognized command-line option ‘-msse4.2’
make[2]: *** [_deps/photon-build/CMakeFiles/uring.dir/build.make:76: _deps/photon-build/CMakeFiles/uring.dir/__/liburing-src/src/setup.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:346: _deps/photon-build/CMakeFiles/uring.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

fail to make on ubuntu 20.04

On ubuntu 20.04.1, a lot "undefined reference" errors occurred during make when following the readme instructions.

gcc version

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)

cmake version

cmake version 3.16.3

The log in detail:

[ 10%] Built target Boost
[ 20%] Built target RapidJSON
[ 29%] Built target image_lib
[ 36%] Built target photon_lib
[ 45%] Built target base_lib
[ 49%] Built target full_file_cache_lib
[ 51%] Built target registryfs_lib
[ 55%] Built target lsmt_lib
[ 63%] Built target zfile_lib
[ 67%] Built target cache_frontend_lib
[ 69%] Built target cache_lib
[ 81%] Built target fs_lib
[ 83%] Built target net_lib
[ 86%] Built target bs-overlaybd
[ 87%] Linking CXX executable ../../output/overlaybd-zfile
/usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x0): undefined reference to `main::__func__'
/usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x20): undefined reference to `main::__func__'
/usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x40): undefined reference to `main::__func__'
/usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x60): undefined reference to `main::__func__'
/usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0x80): undefined reference to `main::__func__'
/usr/bin/ld: CMakeFiles/overlaybd-zfile.dir/overlaybd-zfile.cpp.o:(.data.rel.ro.local+0xa0): more undefined references to `main::__func__' follow
/usr/bin/ld: ../../output/libbase_lib.a(alog.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `new_log_output_file(char const*, unsigned long, int, unsigned long)::__func__'
/usr/bin/ld: ../../output/libbase_lib.a(alog.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `log_output_file(char const*, unsigned long, int, unsigned long)::__func__'
/usr/bin/ld: ../../output/libbase_lib.a(iovector.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `iovector::push_front_more(unsigned long)::__func__'
/usr/bin/ld: ../../output/libbase_lib.a(iovector.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `iovector::push_back_more(unsigned long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog[_ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor5preadEPvmlE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog[_ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwrite(void const*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwrite(void const*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_1[_ZZN10FileSystem18AlignedFileAdaptor6pwriteEPKvmlE6prolog_1]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwrite(void const*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog[_ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::preadv_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor14preadv_mutableEP5iovecilE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::preadv_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_0[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_0]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_1[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_1]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_2[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_2]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local._ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_3[_ZZN10FileSystem18AlignedFileAdaptor15pwritev_mutableEP5iovecilE6prolog_3]+0x0): undefined reference to `FileSystem::AlignedFileAdaptor::pwritev_mutable(iovec*, int, long)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::new_aligned_file_adaptor(FileSystem::IFile*, unsigned int, bool, bool, IOAlloc*)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `FileSystem::new_aligned_file_adaptor(FileSystem::IFile*, unsigned int, bool, bool, IOAlloc*)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(aligned-file.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `FileSystem::new_aligned_fs_adaptor(FileSystem::IFileSystem*, unsigned int, bool, bool, IOAlloc*)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `exportfs_init::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `exportfs_init::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `exportfs_fini::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<long, long>(unsigned int, long, Delegate<int, AsyncResult<long>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIllEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<long, long>(unsigned int, long, Delegate<int, AsyncResult<long>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<int, int>(unsigned int, int, Delegate<int, AsyncResult<int>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIiiEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<int, int>(unsigned int, int, Delegate<int, AsyncResult<int>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<dirent*, dirent*>(unsigned int, dirent*, Delegate<int, AsyncResult<dirent*>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIP6direntS3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<dirent*, dirent*>(unsigned int, dirent*, Delegate<int, AsyncResult<dirent*>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<void, int>(unsigned int, int, Delegate<int, AsyncResult<void>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIviEEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<void, int>(unsigned int, int, Delegate<int, AsyncResult<void>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::IAsyncFile*, FileSystem::IAsyncFile*>(unsigned int, FileSystem::IAsyncFile*, Delegate<int, AsyncResult<FileSystem::IAsyncFile*>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIPNS_10IAsyncFileES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::IAsyncFile*, FileSystem::IAsyncFile*>(unsigned int, FileSystem::IAsyncFile*, Delegate<int, AsyncResult<FileSystem::IAsyncFile*>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog[_ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::AsyncDIR*, FileSystem::AsyncDIR*>(unsigned int, FileSystem::AsyncDIR*, Delegate<int, AsyncResult<FileSystem::AsyncDIR*>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(exportfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0[_ZZN10FileSystem10ExportBase11do_callbackIPNS_8AsyncDIRES3_EEvjT0_8DelegateIiJP11AsyncResultIT_EEEE6prolog_0]+0x0): undefined reference to `FileSystem::ExportBase::do_callback<FileSystem::AsyncDIR*, FileSystem::AsyncDIR*>(unsigned int, FileSystem::AsyncDIR*, Delegate<int, AsyncResult<FileSystem::AsyncDIR*>*>)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptorC4EiE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptorC4EiE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::LocalFileSystemAdaptor(int)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor14new_local_fileEiE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor14new_local_fileEiE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::new_local_file(int)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor4openEPKciE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor4openEPKciE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::open(char const*, int)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor4openEPKcijE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor4openEPKcijE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::open(char const*, int, unsigned int)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem22LocalFileSystemAdaptor5creatEPKcjE6prolog[_ZZN10FileSystem22LocalFileSystemAdaptor5creatEPKcjE6prolog]+0x0): undefined reference to `FileSystem::LocalFileSystemAdaptor::creat(char const*, unsigned int)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `new_localfile_adaptor::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(localfs.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `open_localfile_adaptor::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(path.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::Walker::enter_dir()::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(path.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `FileSystem::Walker::is_dir(dirent*)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog[_ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog]+0x0): undefined reference to `FileSystem::SubFileSystem::init(FileSystem::IFileSystem*, char const*, bool)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog_0[_ZZN10FileSystem13SubFileSystem4initEPNS_11IFileSystemEPKcbE6prolog_0]+0x0): undefined reference to `FileSystem::SubFileSystem::init(FileSystem::IFileSystem*, char const*, bool)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog[_ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog]+0x0): undefined reference to `FileSystem::SubFileSystem::PathCat::PathCat(FileSystem::SubFileSystem const*, char const*&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(subfs.cpp.o):(.data.rel.ro.local._ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog_0[_ZZN10FileSystem13SubFileSystem7PathCatC4EPKS0_RPKcE6prolog_0]+0x0): undefined reference to `FileSystem::SubFileSystem::PathCat::PathCat(FileSystem::SubFileSystem const*, char const*&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pread(void*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::preadv_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0xc0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0xe0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::read(void*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x100): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x120): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x140): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x160): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::readv_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x180): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x1a0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwrite(void const*, unsigned long, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x1c0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x1e0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev(iovec const*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x200): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x220): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::pwritev_mutable(iovec*, int, long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x240): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x260): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::write(void const*, unsigned long)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x280): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x2a0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev(iovec const*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x2c0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(throttled-file.cpp.o):(.data.rel.ro.local+0x2e0): undefined reference to `FileSystem::split_io<FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1}, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2}>(ALogStringL, unsigned long, unsigned long, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#1} const&, FileSystem::ThrottledFile::writev_mutable(iovec*, int)::{lambda(unsigned long)#2} const&)::__func__'
/usr/bin/ld: ../../output/libfs_lib.a(virtual-file.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `FileSystem::VirtualFile::piov_nocopy(long (FileSystem::IFile::*)(void*, unsigned long, long), iovec const*, int, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread-pool.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `photon::ThreadPoolBase::join(photon::TPControl*)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `photon::thread_yield_to(photon::thread*)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `photon::thread_interrupt(photon::thread*, int)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `photon::thread_join(photon::join_handle*)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `photon::thread_shutdown(photon::thread*, bool)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `photon::mutex::lock(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(thread.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `photon::rwlock::lock(int, unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog_0[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog_0]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog_1[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog_1]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon8libaiocb15submit_and_waitEmE6prolog_2[_ZZN6photon8libaiocb15submit_and_waitEmE6prolog_2]+0x0): undefined reference to `photon::libaiocb::submit_and_wait(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `photon::resume_libaio_requesters()::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `photon::posixaio::preadv(int, iovec const*, int, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `photon::posixaio::pwritev(int, iovec const*, int, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `libaio_wrapper_init::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `libaio_wrapper_init::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `libaio_wrapper_init::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0xc0): undefined reference to `libaio_wrapper_fini::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0xe0): undefined reference to `photon::have_n_try<photon::resume_libaio_requesters()::{lambda()#1}>(photon::resume_libaio_requesters()::{lambda()#1} const&, char const*, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x100): undefined reference to `photon::have_n_try<photon::wait_for_events()::{lambda()#1}>(photon::wait_for_events()::{lambda()#1} const&, char const*, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local+0x120): undefined reference to `photon::have_n_try<photon::wait_for_events()::{lambda()#2}>(photon::wait_for_events()::{lambda()#2} const&, char const*, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon10have_n_tryIZNS_8libaiocb6cancelEvEUlvE_EElRKT_PKclE6prolog[_ZZN6photon10have_n_tryIZNS_8libaiocb6cancelEvEUlvE_EElRKT_PKclE6prolog]+0x0): undefined reference to `photon::have_n_try<photon::libaiocb::cancel()::{lambda()#1}>(photon::libaiocb::cancel()::{lambda()#1} const&, char const*, long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon11posix_aiocb13async_performIPFiP5aiocbEJEEElT_DpT0_E6prolog[_ZZN6photon11posix_aiocb13async_performIPFiP5aiocbEJEEElT_DpT0_E6prolog]+0x0): undefined reference to `photon::posix_aiocb::async_perform<int (*)(aiocb*)>(int (*)(aiocb*))::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(aio-wrapper.cpp.o):(.data.rel.ro.local._ZZN6photon11posix_aiocb13async_performIPFiiP5aiocbEJiEEElT_DpT0_E6prolog[_ZZN6photon11posix_aiocb13async_performIPFiiP5aiocbEJiEEElT_DpT0_E6prolog]+0x0): undefined reference to `photon::posix_aiocb::async_perform<int (*)(int, aiocb*), int>(int (*)(int, aiocb*), int)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll4initEvE6prolog[_ZZN6photon5EPoll4initEvE6prolog]+0x0): undefined reference to `photon::EPoll::init()::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll4initEvE6prolog_0[_ZZN6photon5EPoll4initEvE6prolog_0]+0x0): undefined reference to `photon::EPoll::init()::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll3ctlEiijPviiE6prolog[_ZZN6photon5EPoll3ctlEiijPviiE6prolog]+0x0): undefined reference to `photon::EPoll::ctl(int, int, unsigned int, void*, int, int)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog[_ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog]+0x0): undefined reference to `photon::EPoll::do_wait_for_events(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog_0[_ZZN6photon5EPoll18do_wait_for_eventsEmE6prolog_0]+0x0): undefined reference to `photon::EPoll::do_wait_for_events(unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll15wait_for_eventsEijmE6prolog[_ZZN6photon5EPoll15wait_for_eventsEijmE6prolog]+0x0): undefined reference to `photon::EPoll::wait_for_events(int, unsigned int, unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon5EPoll4waitEP11epoll_eventiiE6prolog[_ZZN6photon5EPoll4waitEP11epoll_eventiiE6prolog]+0x0): undefined reference to `photon::EPoll::wait(epoll_event*, int, int)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll4initEvE6prolog[_ZZN6photon11MasterEPoll4initEvE6prolog]+0x0): undefined reference to `photon::MasterEPoll::init()::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll4initEvE6prolog_0[_ZZN6photon11MasterEPoll4initEvE6prolog_0]+0x0): undefined reference to `photon::MasterEPoll::init()::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog[_ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog]+0x0): undefined reference to `photon::MasterEPoll::wait_for_event(unsigned long, int, unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog_0[_ZZN6photon11MasterEPoll14wait_for_eventEmimE6prolog_0]+0x0): undefined reference to `photon::MasterEPoll::wait_for_event(unsigned long, int, unsigned long)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local._ZZN6photon11MasterEPoll21safe_thread_interruptEPNS_6threadEiiE6prolog[_ZZN6photon11MasterEPoll21safe_thread_interruptEPNS_6threadEiiE6prolog]+0x0): undefined reference to `photon::MasterEPoll::safe_thread_interrupt(photon::thread*, int, int)::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `fd_events_epoll_init::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `fd_events_epoll_fini::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `new_fd_poller::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `new_fd_poller::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `wait_for_fds::__func__'
/usr/bin/ld: ../../output/libphoton_lib.a(epoll.cpp.o):(.data.rel.ro.local+0xa0): undefined reference to `wait_for_fds::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem7TarFile5lseekEliE6prolog[_ZZN10FileSystem7TarFile5lseekEliE6prolog]+0x0): undefined reference to `FileSystem::TarFile::lseek(long, int)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem7TarFile5closeEvE6prolog[_ZZN10FileSystem7TarFile5closeEvE6prolog]+0x0): undefined reference to `FileSystem::TarFile::close()::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_0[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_0]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_1[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_1]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local._ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_2[_ZZN10FileSystem10TarZfileFs14open_tar_zfileEPNS_5IFileEPKcE6prolog_2]+0x0): undefined reference to `FileSystem::TarZfileFs::open_tar_zfile(FileSystem::IFile*, char const*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `is_tar_file::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `is_tar_file::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `is_tar_file::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(tar_zfile.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `is_tar_file::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile9JumpTable5buildEPKjmlE6prolog[_ZZN5ZFile15CompressionFile9JumpTable5buildEPKjmlE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::JumpTable::build(unsigned int const*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5fstatEP4statE6prolog[_ZZN5ZFile15CompressionFile5fstatEP4statE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::fstat(stat*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReaderC4EPKS0_mmE6prolog[_ZZN5ZFile15CompressionFile11BlockReaderC4EPKS0_mmE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::BlockReader(ZFile::CompressionFile const*, unsigned long, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog[_ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::read_blocks(unsigned long, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog_0[_ZZN5ZFile15CompressionFile11BlockReader11read_blocksEmmE6prolog_0]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::read_blocks(unsigned long, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog[_ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::crc32_code() const::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog_0[_ZZNK5ZFile15CompressionFile11BlockReader10crc32_codeEvE6prolog_0]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::crc32_code() const::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile11BlockReader8iterator17get_current_blockEvE6prolog[_ZZN5ZFile15CompressionFile11BlockReader8iterator17get_current_blockEvE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::BlockReader::iterator::get_current_block()::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_0[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_0]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_1[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_1]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_2[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_2]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local._ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_3[_ZZN5ZFile15CompressionFile5preadEPvmlE6prolog_3]+0x0): undefined reference to `ZFile::CompressionFile::pread(void*, unsigned long, long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x20): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x40): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x60): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x80): undefined reference to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0xa0): more undefined references to `ZFile::load_jump_table(FileSystem::IFile*, ZFile::CompressionFile::HeaderTrailer*, ZFile::CompressionFile::JumpTable&, bool)::__func__' follow
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x120): undefined reference to `zfile_open_ro::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x140): undefined reference to `zfile_open_ro::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x160): undefined reference to `zfile_open_ro::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x180): undefined reference to `ZFile::write_header_trailer(FileSystem::IFile*, bool, bool, bool, ZFile::CompressionFile::HeaderTrailer*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x1a0): undefined reference to `zfile_compress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x1c0): undefined reference to `zfile_compress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x1e0): undefined reference to `zfile_compress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x200): undefined reference to `zfile_compress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x220): undefined reference to `zfile_compress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x240): more undefined references to `zfile_compress::__func__' follow
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x380): undefined reference to `zfile_decompress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x3a0): undefined reference to `zfile_decompress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x3c0): undefined reference to `zfile_decompress::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x3e0): undefined reference to `is_zfile::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x400): undefined reference to `is_zfile::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(zfile.cpp.o):(.data.rel.ro.local+0x420): undefined reference to `is_zfile::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog[_ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog]+0x0): undefined reference to `ZFile::Compressor_lz4::init(ZFile::CompressArgs const*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog_0[_ZZN5ZFile14Compressor_lz44initEPKNS_12CompressArgsEE6prolog_0]+0x0): undefined reference to `ZFile::Compressor_lz4::init(ZFile::CompressArgs const*)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog[_ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog]+0x0): undefined reference to `ZFile::Compressor_lz4::compress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_0[_ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_0]+0x0): undefined reference to `ZFile::Compressor_lz4::compress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_1[_ZZN5ZFile14Compressor_lz48compressEPKhmPhmE6prolog_1]+0x0): undefined reference to `ZFile::Compressor_lz4::compress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_0[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_0]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_1[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_1]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local._ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_2[_ZZN5ZFile14Compressor_lz410decompressEPKhmPhmE6prolog_2]+0x0): undefined reference to `ZFile::Compressor_lz4::decompress(unsigned char const*, unsigned long, unsigned char*, unsigned long)::__func__'
/usr/bin/ld: ../../output/libzfile_lib.a(compressor.cpp.o):(.data.rel.ro.local+0x0): undefined reference to `create_compressor::__func__'
collect2: error: ld returned 1 exit status
make[2]: *** [src/tools/CMakeFiles/overlaybd-zfile.dir/build.make:93: output/overlaybd-zfile] Error 1
make[1]: *** [CMakeFiles/Makefile2:760: src/tools/CMakeFiles/overlaybd-zfile.dir/all] Error 2
make: *** [Makefile:152: all] Error 2

error: make -j

Scanning dependencies of target lsmt_lib
Scanning dependencies of target cache_frontend_lib
Scanning dependencies of target photon_obj
Scanning dependencies of target easy_weak
Scanning dependencies of target crc32_lib
Scanning dependencies of target registryfs_lib
Scanning dependencies of target full_file_cache_lib
Scanning dependencies of target download_cache_lib
Scanning dependencies of target ocf_env_lib
Scanning dependencies of target tar_lib
[ 0%] Building CXX object src/overlaybd/lsmt/CMakeFiles/lsmt_lib.dir/file.cpp.o
Scanning dependencies of target baselayer
[ 1%] Building CXX object src/overlaybd/lsmt/CMakeFiles/lsmt_lib.dir/index.cpp.o
[ 1%] Building CXX object src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_file.cpp.o
[ 2%] Building CXX object _deps/photon-build/third_party/CMakeFiles/easy_weak.dir/easy_weak/easy_weak.cpp.o
[ 3%] Building CXX object src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_fs.cpp.o
[ 4%] Building CXX object src/overlaybd/zfile/CMakeFiles/crc32_lib.dir/crc32/crc32c.cpp.o
[ 4%] Building CXX object src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_pool.cpp.o
[ 4%] Building CXX object src/overlaybd/cache/ocf_cache/CMakeFiles/ocf_env_lib.dir/ease_bindings/env/ocf_env.cpp.o
[ 5%] Building CXX object src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_store.cpp.o
[ 6%] Building CXX object src/overlaybd/cache/ocf_cache/CMakeFiles/ocf_env_lib.dir/ease_bindings/env/utils_mpool.cpp.o
[ 7%] Building CXX object src/overlaybd/tar/CMakeFiles/tar_lib.dir/header.cpp.o
[ 7%] Building CXX object src/overlaybd/cache/download_cache/CMakeFiles/download_cache_lib.dir/download_cache.cpp.o
[ 8%] Building CXX object src/overlaybd/tar/CMakeFiles/tar_lib.dir/libtar.cpp.o
[ 9%] Building CXX object src/overlaybd/registryfs/CMakeFiles/registryfs_lib.dir/registryfs.cpp.o
[ 9%] Generating ../output/ext4_64
[ 9%] Building CXX object src/overlaybd/registryfs/CMakeFiles/registryfs_lib.dir/registryfs_v2.cpp.o
[ 9%] Building CXX object src/overlaybd/tar/CMakeFiles/tar_lib.dir/tar_file.cpp.o
[ 10%] Building CXX object src/overlaybd/tar/CMakeFiles/tar_lib.dir/whiteout.cpp.o
ext4_64
[ 11%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/alog.cpp.o
[ 12%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/executor/executor.cpp.o
[ 12%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/checksum/crc32c.cpp.o
[ 13%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/iovector.cpp.o
[ 13%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/estring.cpp.o
[ 13%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/expirecontainer.cpp.o
[ 14%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/identity-pool.cpp.o
[ 14%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/event-loop.cpp.o
[ 15%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/memory-stream/memory-stream.cpp.o
[ 15%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/stream-messenger/messenger.cpp.o
[ 15%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/perf_counter.cpp.o
[ 15%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/uuid4.cpp.o
[ 16%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/ring.cpp.o
[ 17%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/common/utility.cpp.o
[ 17%] Built target baselayer
[ 17%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/async_filesystem.cpp.o
[ 18%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/aligned-file.cpp.o
[ 18%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/httpfs/httpfs_v2.cpp.o
[ 18%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/filecopy.cpp.o
[ 18%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/path.cpp.o
[ 19%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/exportfs.cpp.o
[ 20%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/localfs.cpp.o
[ 20%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/subfs.cpp.o
[ 21%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/httpfs/httpfs.cpp.o
[ 22%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/throttled-file.cpp.o
[ 23%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/xfile.cpp.o
[ 23%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/io/signal.cpp.o
[ 23%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/fs/virtual-file.cpp.o
[ 23%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/curl.cpp.o
[ 24%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/basic_socket.cpp.o
[ 25%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/body.cpp.o
[ 25%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/client.cpp.o
[ 25%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/headers.cpp.o
[ 25%] Linking CXX static library ../output/libeasy_weak.a
[ 26%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/cookie_jar.cpp.o
[ 27%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/message.cpp.o
[ 27%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/url.cpp.o
[ 28%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/status.cpp.o
[ 29%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/kernel_socket.cpp.o
[ 29%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/http/server.cpp.o
[ 29%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/rpc/out-of-order-execution.cpp.o
[ 30%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/rpc/rpc.cpp.o
[ 30%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/pooled_socket.cpp.o
[ 33%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/security-context/tls-stream.cpp.o
[ 33%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/net/utils.cpp.o
[ 31%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/thread/thread-key.cpp.o
[ 32%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/photon.cpp.o
[ 33%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/thread/workerpool.cpp.o
[ 33%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/thread/std-compat.cpp.o
[ 33%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/thread/thread-pool.cpp.o
[ 34%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/thread/thread.cpp.o
[ 35%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/io/aio-wrapper.cpp.o
[ 35%] Building CXX object _deps/photon-build/CMakeFiles/photon_obj.dir/io/epoll.cpp.o
[ 35%] Built target easy_weak

/overlaybd/build/_deps/photon-src/fs/filecopy.cpp: In function ‘ssize_t photon::fs::filecopy(photon::fs::IFile*, photon::fs::IFile*, size_t, int)’:
/overlaybd/build/_deps/photon-src/fs/filecopy.cpp:36:21: warning: ignoring return value of ‘int posix_memalign(void**, size_t, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
36 | ::posix_memalign(&buff, ALIGNMENT, bs);
| ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
In file included from /overlaybd/build/_deps/photon-src/rpc/rpc.cpp:25:
/overlaybd/build/_deps/photon-src/rpc/rpc.cpp: In member function ‘virtual int photon::rpc::StubImpl::do_call(photon::rpc::FunctionID, photon::rpc::SerializerIOV&, photon::rpc::SerializerIOV&, uint64_t)’:
/overlaybd/build/_deps/photon-src/rpc/rpc.cpp:169:57: warning: ?: using integer constants in boolean context, the expression will always evaluate to true’ [-Wint-in-bool-context]
169 | LOG_ERRNO_RETURN((err.no == ECONNRESET) ? ECONNRESET : EFAULT, -1, "failed to send request");
/overlaybd/build/_deps/photon-src/include/photon/common/alog.h:552:14: note: in definition of macro ‘LOG_ERRNO_RETURN’
552 | errno = (new_errno) ? (new_errno) : eno.no;
| ^~~~~~~~~
/overlaybd/build/_deps/photon-src/rpc/rpc.cpp:174:57: warning: ?: using integer constants in boolean context, the expression will always evaluate to true’ [-Wint-in-bool-context]
174 | LOG_ERRNO_RETURN((err.no == ECONNRESET) ? ECONNRESET : EFAULT, -1, "failed to receive response ");
/overlaybd/build/_deps/photon-src/include/photon/common/alog.h:552:14: note: in definition of macro ‘LOG_ERRNO_RETURN’
552 | errno = (new_errno) ? (new_errno) : eno.no;
| ^~~~~~~~~
/overlaybd/build/_deps/photon-src/net/utils.cpp: In function ‘void photon::net::base64_translate_3to4(const char*, char*)’:
/overlaybd/build/_deps/photon-src/net/utils.cpp:97:12: note: offset of packed bit-field ‘photon::net::base64_translate_3to4(const char*, char*)::xlator::b’ has changed in GCC 4.4
97 | struct xlator {
| ^~~~~~
/overlaybd/build/_deps/photon-src/net/utils.cpp:97:12: note: offset of packed bit-field ‘photon::net::base64_translate_3to4(const char*, char*)::xlator::c’ has changed in GCC 4.4
/overlaybd/build/_deps/photon-src/net/utils.cpp:108:15: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasin]
108 | auto x = (xlator )(&v);
| ^~~~~~~~~~~~~~
/overlaybd/build/_deps/photon-src/net/utils.cpp:108:15: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasin]
/overlaybd/build/_deps/photon-src/net/utils.cpp: In function ‘bool photon::net::base64_translate_4to3(const char
, char
)’:
/overlaybd/build/_deps/photon-src/net/utils.cpp:188:12: note: offset of packed bit-field ‘photon::net::base64_translate_4to3(const char*, char*)::xlator::b’ has changed in GCC 4.4
188 | struct xlator {
| ^~~~~~
/overlaybd/build/_deps/photon-src/net/utils.cpp:188:12: note: offset of packed bit-field ‘photon::net::base64_translate_4to3(const char*, char*)::xlator::c’ has changed in GCC 4.4
c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[2]: *** [_deps/photon-build/CMakeFiles/photon_obj.dir/build.make:622: _deps/photon-build/CMakeFiles/photon_obj.dir/rpc/rpc.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[2]: *** [src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/build.make:63: src/overlaybd/cache/frontend/CMakeFiles/cache_frontend_lib.dir/cached_file.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[2]: *** [src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/build.make:63: src/overlaybd/cache/full_file_cache/CMakeFiles/full_file_cache_lib.dir/cache_pool.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....

v0.6.0 release does not work on Ubuntu 18.04

The overlaybd-tcmu service will not start on 18.04. My guess is because release v0.6.0 was compiled on 20.04+? The workaround is to install the missing shared libraries,

 apt install libaio1 libnl-3-dev libnl-genl-3-dev

Just for context, we are working on adding support in AKS. The default node image in AKS is Ubuntu 18.04.

compile error on gcc-7.5

[root@xxx build]# make
[ 1%] Building CXX object src/CMakeFiles/image_lib.dir/bk_download.cpp.o
In file included from /home/container-acc/overlay-tcmu/overlaybd/src/overlaybd/alog-stdstring.h:19:0,
from /home/container-acc/overlay-tcmu/overlaybd/src/bk_download.cpp:22:
/home/container-acc/overlay-tcmu/overlaybd/src/overlaybd/string_view.h:29:36: fatal error: experimental/string_view: No such file or directory
#include <experimental/string_view>
^
compilation terminated.
make[2]: *** [src/CMakeFiles/image_lib.dir/bk_download.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/image_lib.dir/all] Error 2
make: *** [all] Error 2

how to known how much data has been downloaded for a dadi image

I made a test for the overlaybd performance.

# create container
nerdctl run --snapshotter overlaybd -d --name test -v /opt/volume:/docker $dadi_image sleep 100000
# copy data, here the /usr directory cost most of the disk space for the image $dadi_image, and the /opt/volume directory belong to another disk.
time nerdctl exec -it test cp -r /usr/ /docker/

Then the time that the copy costs seems too little, so I suspect the overlaybd didn't downloaded all the data that the /usr directory really used.

At the same time, I found the cached data for the image $dadi_image in the cache directory is also too little.

libssl1.1 dep

Hi,

I noticed libssl1.1 is still in use, however Ubuntu 22.04 is using libssl3, so overlaybd-tcmu will fail to start on 22.04,

× overlaybd-tcmu.service - overlaybd-tcmu service
     Loaded: loaded (/etc/systemd/system/overlaybd-tcmu.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Mon 2023-04-10 22:28:23 UTC; 1h 4min ago
   Main PID: 105044 (code=exited, status=127)
        CPU: 6ms

Apr 10 22:28:21 systemd[1]: overlaybd-tcmu.service: Main process exited, code=exited, status=127/n/a
Apr 10 22:28:21 overlaybd-tcmu[105044]: /opt/overlaybd/bin/overlaybd-tcmu: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

Side loading compressed layer files into the cacheDir

What happened in your environment?

is side loading compressed layer files into the cacheDir supported?

I am looking into fetching the layer files out of band and saving them in the cacheDir as sha256:. Does overlaybd pickup the new files added externally to the directory after it has started? Or does it hydrate once and maintains the inventory internally until a restart?

What did you expect to happen?

I still see a few downloads happening - the logging wasn't verbose and didn't easily tell me which digest it was referring to - i will turn on debug logging and try again - but wanted to check if the above scenario is supposed to work.

How can we reproduce it?

copy the compressed layer files to the cacheDir after overlaybd has started - then start the container - expectation is overlaybd doesn't issue any blob download requests.

What is the version of your Overlaybd?

NA

What is your OS environment?

Ubuntu 18

Are you willing to submit PRs to fix it?

  • Yes, I am willing to fix it.

If the registry_cache files are corrupted overlaybd fails to load.

What happened in your environment?

Looks like if the registry_cache has some corrupt files overlaybd fails to create image.

logs below

2023/07/13 07:02:37|ERROR|th=00007FE4F37F9F80|/src/src/overlaybd/lsmt/file.cpp:1159|verify_ht:header magic/type don't match
2023/07/13 07:02:37|ERROR|th=00007FE4F37F9F80|/src/src/overlaybd/lsmt/file.cpp:1553|do_parallel_load_index:failed to load index from 32-th file
2023/07/13 07:02:37|ERROR|th=00007FE5D1B53B00|/src/src/overlaybd/lsmt/file.cpp:1581|load_merge_index:load index failed.
2023/07/13 07:02:37|ERROR|th=00007FE5D1B53B00|/src/src/image_file.cpp:346|open_lowers:LSMT::open_files_ro(files, 76, 1) return NULL
2023/07/13 07:02:37|ERROR|th=00007FE5D1B53B00|/src/src/image_file.cpp:470|init_image_file:open lower layer failed.
2023/07/13 07:02:37|ERROR|th=00007FE5D1B53B00|/src/src/main.cpp:302|dev_open:create image file failed
2023/07/13 07:02:37|ERROR|th=00007FE5D1B53B00|/src/build/_deps/tcmu-src/libtcmu.cpp:605|device_add:handler open failed for uio3

Looks like it would be good to have logic to delete the file and retry?

What did you expect to happen?

Recover by deleting the file and redownloading.

How can we reproduce it?

  1. Start a container on overlaybd.
  2. Corrupt the registry_cache files by writing junk to it
  3. observe the container doesn't start anymore.

What is the version of your Overlaybd?

0.5.3-1.

What is your OS environment?

Ubuntu 20.04

Are you willing to submit PRs to fix it?

  • Yes, I am willing to fix it.

Issue authenticating with ACR

Hello, I was having issues authenticating with ACR. I looked at the code and noticed it uses the basic auth flow w/ GET request. For ACR, we use the POST refresh token method -- Is there a way to use alternative auth modes?

DEFER({ release_cURL(req); });
photon::net::StringWriter writer;
if (!username.empty()) {
req->set_user_passwd(username.c_str(), password.c_str()).set_redirect(3);
}
auto ret = req->GET(auth_url, &writer, tmo.timeout_us());
LOG_DEBUG(VALUE(writer.string));

Example curl of what I mean

                curl -v -X POST -H "Content-Type: application/x-www-form-urlencoded" -d \
                "grant_type=refresh_token&service=$registry&scope=$scope&refresh_token=$acr_refresh_token" \
                https://$registry/oauth2/token

Fail to start overlaybd-tcmu service

Fail to start in Ubuntu 18.04

$ sudo systemctl start overlaybd-tcmu
Failed to start overlaybd-tcmu.service: Unit overlaybd-tcmu.service is not loaded properly: Exec format error.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.