Failed to upload file to OpenStack Swift 2.14.0 on Raspberry Pi 3 due to "[Errno 13] Permission denied"

Creating and erasing buckets (containers) in my installation of OpenStack Swift version 2.14.0 works well. This setting is for Swift only. OpenStack services such as Keystone were no longer used.

$ swift stat Account: AUTH_test Containers: 2 Objects: 0 Bytes: 0 Containers in policy "policy-0": 2 Objects in policy "policy-0": 0 Bytes in policy "policy-0": 0 Connection: keep-alive ... $ swift post s3perf $ swift list -A http://10.0.0.253:8080/auth/v1.0 -U test:tester -K testing bucket s3perf 

These are (positive) messages about creating a bucket inside storage1.error .

 $ tail -f /var/log/swift/storage1.error ... May 9 13:58:50 raspberrypi container-server: STDERR: (1114) accepted ('127.0.0.1', 38118) May 9 13:58:50 raspberrypi container-server: STDERR: 127.0.0.1 - - [09/May/2017 11:58:50] "POST /d1/122/AUTH_test/s3perf HTTP/1.1" 204 142 0.021630 (txn: tx982eb25d83624b37bd290-005911aefa) 

But any attempt to download the file only causes the error message [Errno 13] Permission denied .

 $ swift upload s3perf s3perf-testfile1.txt Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf/s3perf-testfile1.txt 503 Service Unavailable [first 60 chars of response] <html><h1>Service Unavailable</h1><p>The server is currently $ tail -f /var/log/swift/storage1.error ... May 18 20:55:44 raspberrypi object-server: STDERR: (927) accepted ('127.0.0.1', 45684) May 18 20:55:44 raspberrypi object-server: ERROR __call__ error with PUT /d1/40/AUTH_test/s3perf/testfile : #012Traceback (most recent call last):#012 File "/home/pi/swift/swift/obj/server.py", line 1105, in __call__#012 res = getattr(self, req.method)(req)#012 File "/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012 resp = func(ctrl, *args, **kwargs)#012 File "/home/pi/swift/swift/obj/server.py", line 814, in PUT#012 writer.put(metadata)#012 File "/home/pi/swift/swift/obj/diskfile.py", line 2561, in put#012 super(DiskFileWriter, self)._put(metadata, True)#012 File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in _put#012 tpool_reraise(self._finalize_put, metadata, target_path, cleanup)#012 File "/home/pi/swift/swift/common/utils.py", line 3536, in tpool_reraise#012 raise resp#012IOError: [Errno 13] Permission denied (txn: txfbf08bffde6d4657a72a5-00591dee30) May 18 20:55:44 raspberrypi object-server: STDERR: 127.0.0.1 - - [18/May/2017 18:55:44] "PUT /d1/40/AUTH_test/s3perf/testfile HTTP/1.1" 500 875 0.015646 (txn: txfbf08bffde6d4657a72a5-00591dee30) 

The proxy.error file proxy.error contains the error message ERROR 500 Expect: 100-continue From Object Server .

 May 18 20:55:44 raspberrypi proxy-server: ERROR 500 Expect: 100-continue From Object Server 127.0.0.1:6010/d1 (txn: txfbf08bffde6d4657a72a5- 00591dee30) (client_ip: 10.0.0.220) 

I started Swift as a user pi and assigned these folders to this user:

 $ sudo chown pi:pi /etc/swift $ sudo chown -R pi:pi /mnt/sdb1/* $ sudo chown -R pi:pi /var/cache/swift $ sudo chown -R pi:pi /var/run/swift 

sdb1 is a loopback device with the XFS file system.

 $ mount | grep sdb1 /srv/swift-disk on /mnt/sdb1 type xfs (rw,noatime,nodiratime,attr2,nobarrier,inode64,logbufs=8,noquota) $ ls -ld /mnt/sdb1/1/ drwxr-xr-x 3 pi pi 17 May 12 13:14 /mnt/sdb1/1/ 

I deployed Swift this way .

I wonder why conrainers work, but when loading a file, it crashes due to Permission denied .

Update 1:

 $ sudo swift-ring-builder /etc/swift/account.builder /etc/swift/account.builder, build version 2 256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining) The overload factor is 0.00% (0.000000) Ring file /etc/swift/account.ring.gz is up-to-date Devices: id region zone ip address:port replication ip:port name weight partitions balance flags meta 0 1 1 127.0.0.1:6012 127.0.0.1:6012 d1 1.00 256 0.00 $ sudo swift-ring-builder /etc/swift/container.builder /etc/swift/container.builder, build version 2 256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining) The overload factor is 0.00% (0.000000) Ring file /etc/swift/container.ring.gz is up-to-date Devices: id region zone ip address:port replication ip:port name weight partitions balance flags meta 0 1 1 127.0.0.1:6011 127.0.0.1:6011 d1 1.00 256 0.00 $ sudo swift-ring-builder /etc/swift/object.builder /etc/swift/object.builder, build version 2 256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining) The overload factor is 0.00% (0.000000) Ring file /etc/swift/object.ring.gz is up-to-date Devices: id region zone ip address:port replication ip:port name weight partitions balance flags meta 0 1 1 127.0.0.1:6010 127.0.0.1:6010 d1 1.00 256 0.00 

Update 2

Required ports are open.

 $ nmap localhost -p 6010,6011,6012,8080,22 ... PORT STATE SERVICE 22/tcp open ssh 6010/tcp open x11 6011/tcp open unknown 6012/tcp open unknown 8080/tcp open http-proxy 

Update 3

I can write as user pi inside the folder where Swift should store objects.

 $ whoami pi $ touch /srv/1/node/d1/objects/test $ ls -l /srv/1/node/d1/objects/test -rw-r--r-- 1 pi pi 0 May 13 22:59 /srv/1/node/d1/objects/test 

Update 4

All fast processes belong to user pi .

 $ ps aux | grep swift pi 944 3.2 2.0 24644 20100 ? Ss May12 65:14 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf pi 945 3.1 2.0 25372 20228 ? Ss May12 64:30 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf pi 946 3.1 1.9 24512 19416 ? Ss May12 64:03 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf pi 947 3.1 1.9 23688 19320 ? Ss May12 64:04 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf pi 1000 0.0 1.7 195656 17844 ? Sl May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf pi 1001 0.0 1.8 195656 18056 ? Sl May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf pi 1002 0.0 1.6 23880 16772 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf pi 1003 0.0 1.7 195656 17848 ? Sl May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf pi 1004 0.0 1.7 24924 17504 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf pi 1005 0.0 1.6 24924 16912 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf pi 1006 0.0 1.8 24924 18368 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf pi 1007 0.0 1.8 24924 18208 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf pi 1008 0.0 1.8 25864 18824 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf pi 1009 0.0 1.8 25864 18652 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf pi 1010 0.0 1.7 25864 17340 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf pi 1011 0.0 1.8 25864 18772 ? S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf pi 1012 0.0 1.8 24644 18276 ? S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf pi 1013 0.0 1.8 24900 18588 ? S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf pi 1014 0.0 1.8 24900 18588 ? S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf pi 1015 0.0 1.8 24900 18568 ? S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf 

Update 5

When I create a bucket, the Swift service creates a folder like this:

 /mnt/sdb1/1/node/d1/containers/122/9d5/7a23d9409f11da3062432c6faa75f9d5/ 

and this folder contains a db file, for example 7a23d9409f11da3062432c6faa75f9d5.db . I think this is the right behavior.

But when I try to upload the file inside the bucket, Swift only creates an empty folder like this.

 /mnt/sdb1/1/node/d1/objects/139/eca/8b17958f984943fc97b6b937061d2eca 

I can create files inside these empty folders via touch or echo as user pi , but for some unknown reason, Swift does not store files inside these folders.

Update 6

To investigate this further, I installed Swift according to SAIO instructions - Swift All In One once in VMware ESXi virtual machine with Ubuntu 14.04 LTS and once again inside Raspbian on Raspberry Pi 3. The result is that inside Ubuntu 14.04 VM Swift works fine, but when you start Ontop Rasberry Pi, file loading does not work.

 Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf-testbucket/testfiles/s3perf-testfile1.txt 503 Service Unavailable [first 60 chars of response] <html><h1>Service Unavailable</h1><p>The server is currently 

The storage1.error log storage1.error still says:

 May 24 13:15:15 raspberrypi object-server: ERROR __call__ error with PUT /sdb1/484/AUTH_test/s3perf-testbucket/testfiles/s3perf-testfile1.txt : #012Traceback (most recent call last):#012 File "/home/pi/swift/swift/obj/server.py", line 1105, in __call__#012 res = getattr(self, req.method)(req)#012 File "/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012 resp = func(ctrl, *args, **kwargs)#012 File "/home/pi/swift/swift/obj/server.py", line 814, in PUT#012 writer.put(metadata)#012 File "/home/pi/swift/swift/obj/diskfile.py", line 2561, in put#012 super(DiskFileWriter, self)._put(metadata, True)#012 File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in _put#012 tpool_reraise(self._finalize_put, metadata, target_path, cleanup)#012 File "/home/pi/swift/swift/common/utils.py", line 3536, in tpool_reraise#012 raise resp#012IOError: [Errno 13] Permission denied (txn: txdfe3c7f704be4af8817b3-0059256b43) 

Update 7

The problem is still not fixed, but now I have a working Swift service on Raspberry Pi. I installed the (rather outdated) version of Swift version 2.2.0 that comes with Raspbian and it works well. The steps I took have been explained here here .

+5
source share
1 answer

Based on the information you provide, errors occur while writing metadata.

Operations for writing metadata fall into two categories: inode manipulation and advanced attribute management. So there are two possible sources for your mistakes.

Firstly, this is an inode related error. This error may occur due to the installation of the inode64 parameter during device installation. According to the XFS man page :

If applications are used that do not handle inode numbers greater than 32 bits, the inode32 parameter must be specified.

Secondly, this is the extended attribution associated with the error. You can use the python xattr package to write extended attributes and check if an exception has occurred.

+1
source

All Articles