Hello!
I've used the instruction created by Daniel Glasser and with some small code adjustments in a few files I was able to compile Ceph 12.2.8 on a Raspberry Pi 3+. Compiling Ceph on this devices including the creation of packages takes at least 8-12 hours and I'm using an external USB SSD for storage and swap...
The most important issues I faced were related to a difference in behaviour with LLVM/Clan.
I was able to move my monitors from some VMs running in my test environment to 3 Raspberry Pi 3+ devices, and they work fine.
I'd like to share these adjustments here, maybe they can be incorporated in the code base if they make any sense.
Anyone who wants to compile Ceph for themselves can make these ajustments on their own.
If for some reason the build would fail with some error after you run ./make-debs.sh you can restart with
dpkg-buildpackage -j4 -us -us -nc (not sure if that double -us is required)
If you do plan to build this code on the Raspberry Pi, you need an external USB SSD and create either a swap file or swap partition on the device of at least 2 GB because 1 GB of memory is not enough to compile Ceph. Also make sure you cool your Raspberry Pi properly...
FileStore.cc
296c296
< r = ::open((*path)->path(), flags|O_CLOEXEC, 0644);
---
> r = ::open((*path)->path(), flags, 0644);
764c764
< FileStoreBackend *FileStoreBackend::create(unsigned long f_type, FileStore *fs)
---
> FileStoreBackend *FileStoreBackend::create(long f_type, FileStore *fs)
784c784
< void FileStore::create_backend(unsigned long f_type)
---
> void FileStore::create_backend(long f_type)
=== FileStore.h
60c60
< #define BTRFS_SUPER_MAGIC 0x9123683EUL
---
> #define BTRFS_SUPER_MAGIC 0x9123683EL
168c168
< void create_backend(unsigned long f_type);
---
> void create_backend(long f_type);
790c790
< unsigned long m_fs_type;
---
> long m_fs_type;
870c870
< static FileStoreBackend *create(unsigned long f_type, FileStore *fs);
---
> static FileStoreBackend *create(long f_type, FileStore *fs);
=== rgw_rados.cc
3823c3825
< auto handles = std::vector<librados::Rados>{static_cast<unsigned int>(cct->_conf->rgw_num_rados_handles)};
---
> auto handles = std::vector<librados::Rados>{cct->_conf->rgw_num_rados_handles};
===rgw_sync_log_trim.cc
896c896
< wait(utime_t{static_cast<time_t>(config.trim_interval_sec), 0});
---
> wait(utime_t{config.trim_interval_sec, 0});
I have attached a list of all the error I encountered and I've fixed with the changes above for anyone who is interested.