<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bucky</id>
	<title>Alpine Linux - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bucky"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Bucky"/>
	<updated>2026-05-05T20:14:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=CEPH&amp;diff=31273</id>
		<title>CEPH</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=CEPH&amp;diff=31273"/>
		<updated>2025-10-24T14:49:57Z</updated>

		<summary type="html">&lt;p&gt;Bucky: /* Installing OSDs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft|work in progress}}&lt;br /&gt;
&lt;br /&gt;
[https://ceph.io/en/ Ceph] is a software defined storage platform. There are various methods and tools to deploy Ceph, none of which (to my knowledge) work on Alpine. Ceph packages have been available in the community repository since Alpine 3.10. Generally, the current latest and previous versions are made available.&lt;br /&gt;
&lt;br /&gt;
This how-to, explains how to deploy Ceph monitors, managers and OSDs, via apk, manually.&lt;br /&gt;
&lt;br /&gt;
== Installing MONITORs ==&lt;br /&gt;
=== Bootstrapping the first MONITOR ===&lt;br /&gt;
In this example we use 3 hosts as monitor and manager roles:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MON_HOST1=&amp;quot;mon01&amp;quot;&lt;br /&gt;
MON_HOST1_IP=&amp;quot;%IP_ADDRESS%&amp;quot;&lt;br /&gt;
MON_HOST2=&amp;quot;mon02&amp;quot;&lt;br /&gt;
MON_HOST2_IP=&amp;quot;%IP_ADDRESS%&amp;quot;&lt;br /&gt;
MON_HOST3=&amp;quot;mon03&amp;quot;&lt;br /&gt;
MON_HOST3_IP=&amp;quot;%IP_ADDRESS%&amp;quot;&lt;br /&gt;
FSID=$(cat /proc/sys/kernel/random/uuid) #store this FSID&lt;br /&gt;
echo $FSID&lt;br /&gt;
CLUSTER_NAME=&amp;quot;ceph&amp;quot; # default value if unspecified&lt;br /&gt;
HOSTNAME=$(cat /etc/hostname)&lt;br /&gt;
PUBLIC_NETWORK=&amp;quot;%NETWORK_CIDR%&amp;quot;&lt;br /&gt;
MYNET=&amp;quot;%NETWORK_CIDR%&amp;quot;&lt;br /&gt;
VERSION=17&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|#apk add ceph$VERSION-mon ceph$VERSION-mon-daemon ceph$VERSION-mon-tools ceph$VERSION-openrc sudo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/ceph/$CLUSTER_NAME.conf &lt;br /&gt;
[global]&lt;br /&gt;
# Cluster unique identifier&lt;br /&gt;
fsid = $FSID&lt;br /&gt;
mon_initial_members = $MON_HOST1&lt;br /&gt;
mon_host = $MON_HOST1_IP, $MON_HOST2_IP, $MON_HOST3_IP&lt;br /&gt;
mon_allow_pool_delete = true&lt;br /&gt;
ms_bind_ipv4 = false # change as needed&lt;br /&gt;
ms_bind_ipv6 = true # change as needed&lt;br /&gt;
public_network = $PUBLIC_NETWORK&lt;br /&gt;
# Enable authentication&lt;br /&gt;
auth_cluster_required = cephx&lt;br /&gt;
auth_service_required = cephx&lt;br /&gt;
auth_client_required = cephx&lt;br /&gt;
# https://docs.ceph.com/en/latest/rados/configuration/pool-pg-config-ref/#pool-pg-and-crush-config-reference&lt;br /&gt;
osd_pool_default_size = 3 # Write an object three times&lt;br /&gt;
osd_pool_default_min_size = 2 # Accept an I/O operation to a degraded PG that has two copies of an object&lt;br /&gt;
osd_pool_default_pg_num = 128 # total number of OSDs * 100 / osd_pool_default_size. Use nearest power of two.&lt;br /&gt;
osd_crush_chooseleaf_type = 1&lt;br /&gt;
rgw_data = /var/lib/ceph/radosgw/\$cluster-\$id # literal variables&lt;br /&gt;
&lt;br /&gt;
[mon]&lt;br /&gt;
mon_data = /var/lib/ceph/mon/\$cluster-$FSID # &amp;quot;cluster&amp;quot; is a literal variable&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ceph-authtool --create-keyring /tmp/$CLUSTER_NAME.mon.keyring --gen-key -n mon. --cap mon &#039;allow *&#039;&lt;br /&gt;
ceph-authtool --create-keyring /etc/ceph/$CLUSTER_NAME.client.admin.keyring --gen-key -n client.admin --cap mon &#039;allow *&#039; --cap osd &#039;allow *&#039; --cap mds &#039;allow *&#039; --cap mgr &#039;allow *&#039;&lt;br /&gt;
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/$CLUSTER_NAME.keyring --gen-key -n client.bootstrap-osd --cap mon &#039;profile bootstrap-osd&#039; --cap mgr &#039;allow r&#039;&lt;br /&gt;
&lt;br /&gt;
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/$CLUSTER_NAME.client.admin.keyring&lt;br /&gt;
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/$CLUSTER_NAME.keyring&lt;br /&gt;
&lt;br /&gt;
chown ceph:ceph /tmp/$CLUSTER_NAME.mon.keyring&lt;br /&gt;
&lt;br /&gt;
monmaptool --create --add $MON_HOST1 $MON_HOST1_IP --add $MON_HOST2 $MON_HOST2_IP --add $MON_HOST3 $MON_HOST3_IP --fsid $FSID /tmp/monmap&lt;br /&gt;
&lt;br /&gt;
install -d -o ceph /var/lib/ceph/mon/$CLUSTER_NAME-$FSID&lt;br /&gt;
&lt;br /&gt;
sudo -u ceph ceph-mon --cluster $CLUSTER_NAME --mkfs -i $HOSTNAME --inject-monmap /tmp/monmap --keyring /tmp/$CLUSTER_NAME.mon.keyring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create AWall policies&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/awall/optional/ceph-mon.json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ceph cluster monitor component&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;service&amp;quot;: {&lt;br /&gt;
    &amp;quot;ceph-mon&amp;quot;: { &amp;quot;proto&amp;quot;: &amp;quot;tcp&amp;quot;, &amp;quot;port&amp;quot;: [ 3300, 6789 ] }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;src&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-mon&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;dest&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-mon&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/awall/optional/ceph-client-osd.json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ceph cluster OSD client&amp;quot;,&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;service&amp;quot;: {&lt;br /&gt;
    &amp;quot;ceph-osd&amp;quot;: { &amp;quot;proto&amp;quot;: &amp;quot;tcp&amp;quot;, &amp;quot;port&amp;quot;: &amp;quot;6800-7300&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;dest&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-osd&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
awall enable ceph-mon&lt;br /&gt;
awall enable ceph-client-osd&lt;br /&gt;
awall activate -f&lt;br /&gt;
ln -s ceph /etc/init.d/ceph-mon.$HOSTNAME&lt;br /&gt;
rc-update add ceph-mon.$HOSTNAME&lt;br /&gt;
openrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inspect that the first node was bootstrapped correctly running {{Cmd|ceph -s}}&lt;br /&gt;
&lt;br /&gt;
=== Adding other MONITOR nodes ===&lt;br /&gt;
Copy /etc/ceph/ceph.conf, /tmp/ceph.mon.keyring /etc/ceph/ceph.client.admin.keyring /var/lib/ceph/bootstrap-osd/ceph.keyring from existing monitor to the new monitor node.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install -d --owner ceph --group ceph /etc/ceph /var/lib/ceph/bootstrap-osd&lt;br /&gt;
install -d -o ceph /var/lib/ceph/mon/$CLUSTER_NAME-$FSID&lt;br /&gt;
chown ceph /tmp/$CLUSTER_NAME.mon.keyring&lt;br /&gt;
&lt;br /&gt;
monmaptool --create --add $MON_HOST1 $MON_HOST1_IP --add $MON_HOST2 $MON_HOST2_IP --add $MON_HOST3 $MON_HOST3_IP --fsid $FSID /tmp/monmap&lt;br /&gt;
&lt;br /&gt;
sudo -u ceph ceph-mon --cluster $CLUSTER_NAME --mkfs -i $HOSTNAME --inject-monmap /tmp/monmap --keyring /tmp/$CLUSTER_NAME.mon.keyring&lt;br /&gt;
&lt;br /&gt;
ln -s ceph /etc/init.d/ceph-mon.$HOSTNAME&lt;br /&gt;
rc-update add ceph-mon.$HOSTNAME&lt;br /&gt;
openrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;ceph -s&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;mon is allowing insecure global_id reclaim&amp;lt;/code&amp;gt; fix with {{Cmd|ceph config set mon auth_allow_insecure_global_id_reclaim false}}&lt;br /&gt;
&lt;br /&gt;
== Installing MANAGERs ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install -d --owner ceph --group ceph /var/lib/ceph/mgr/$CLUSTER_NAME-$HOSTNAME&lt;br /&gt;
# note this keyring is unique per manager, does not need to be copied across the cluster!&lt;br /&gt;
ceph auth get-or-create mgr.$HOSTNAME mon &#039;allow profile mgr&#039; osd &#039;allow *&#039; mds &#039;allow *&#039; &amp;gt; /var/lib/ceph/mgr/$CLUSTER_NAME-$HOSTNAME/keyring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/awall/optional/ceph-mgr.json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ceph cluster Manager component&amp;quot;,&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;service&amp;quot;: {&lt;br /&gt;
    &amp;quot;ceph-mgr&amp;quot;: { &amp;quot;proto&amp;quot;: &amp;quot;tcp&amp;quot;, &amp;quot;port&amp;quot;: &amp;quot;6800-7300&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;src&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-mgr&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
awall enable ceph-mgr&lt;br /&gt;
awall activate -f&lt;br /&gt;
&lt;br /&gt;
apk add ceph$VERSION-mgr ceph$VERSION-mgr-dashboard&lt;br /&gt;
ln -s ceph /etc/init.d/ceph-mgr.$HOSTNAME&lt;br /&gt;
rc-update add ceph-mgr.$HOSTNAME&lt;br /&gt;
openrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected issues:&lt;br /&gt;
&lt;br /&gt;
Module &#039;restful&#039; has failed dependency: PyO3 modules may only be initialized once per interpreter process&lt;br /&gt;
&lt;br /&gt;
https://github.com/bazaah/aur-ceph/issues/20&lt;br /&gt;
&lt;br /&gt;
https://lists.ceph.io/hyperkitty/list/ceph-users@ceph.io/thread/FB7XE6WYDK3EBJYPABSPX5B2LEILWWJA/#FB7XE6WYDK3EBJYPABSPX5B2LEILWWJA&lt;br /&gt;
&lt;br /&gt;
Workaround: &amp;lt;code&amp;gt;ceph mgr module disable restful&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing OSDs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setup-devd udev #alpine eudev drop-in replacement for udev&lt;br /&gt;
apk add ceph$VERSION-osd ceph$VERSION-osd-daemon ceph$VERSION-osd-tools eudev ceph$VERSION-openrc&lt;br /&gt;
mkdir -p /var/lib/ceph/bootstrap-osd /etc/ceph&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy /var/lib/ceph/bootstrap-osd/$CLUSTER_NAME.keyring from a monitor node to /var/lib/ceph/bootstrap-osd/$CLUSTER_NAME.keyring&lt;br /&gt;
&lt;br /&gt;
Copy /etc/ceph/ceph.conf from a monitor node to /etc/ceph/ceph.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/awall/optional/ceph-client-mon.json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ceph cluster monitor client&amp;quot;,&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;service&amp;quot;: {&lt;br /&gt;
    &amp;quot;ceph-mon&amp;quot;: { &amp;quot;proto&amp;quot;: &amp;quot;tcp&amp;quot;, &amp;quot;port&amp;quot;: [ 3300, 6789 ] }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;dest&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-mon&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/awall/optional/ceph-osd.json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Ceph cluster OSD component&amp;quot;,&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;service&amp;quot;: {&lt;br /&gt;
    &amp;quot;ceph-osd&amp;quot;: { &amp;quot;proto&amp;quot;: &amp;quot;tcp&amp;quot;, &amp;quot;port&amp;quot;: &amp;quot;6800-7300&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;src&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-osd&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;dest&amp;quot;: &amp;quot;\$MYNET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ceph-osd&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
awall enable ceph-client-mon&lt;br /&gt;
awall enable ceph-osd&lt;br /&gt;
awall activate -f&lt;br /&gt;
&lt;br /&gt;
ln -s /var/lib/ceph/bootstrap-osd/ceph.keyring /etc/ceph/ceph.client.bootstrap-osd.keyring #it seems it wants the keyring in this location&lt;br /&gt;
ceph-volume lvm create --data /dev/sdX --no-systemd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the ID of the OSD created, you&#039;ll need to create an init entry for each OSD and start it like so.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s ceph /etc/init.d/ceph-osd.&amp;lt;OID_ID&amp;gt;&lt;br /&gt;
rc-update add ceph-osd.&amp;lt;OID_ID&amp;gt;&lt;br /&gt;
openrc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(note: you can discover the OSD IDs present on the host with &amp;lt;code&amp;gt;ceph-volume osd list&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.archlinux.org/title/Ceph Ceph - ArchWiki]&lt;br /&gt;
* [https://wiki.gentoo.org/wiki/Ceph Ceph - Gentoo Wiki]&lt;br /&gt;
* [https://www.youtube.com/watch?v=jJrnJ9rj6fs A Ceph tutorial - YouTube]&lt;br /&gt;
&lt;br /&gt;
[[Category:Filesystems]]&lt;/div&gt;</summary>
		<author><name>Bucky</name></author>
	</entry>
</feed>