Description
Description
We use Gitea with Drone. One of our CD jobs builds a large binary and uploads it to Gitea as a release (using Drone's Gitea-Release Plugin). This jobs runs nightly.
Apparently, Gitea stores the upload in /tmp
and does not remove it from there. Therefore, the server runs out of available disk space after a while.
As a workaround, we manually restart Gitea every now and then. Due to Systemd's PrivateTmp
this also wipes Giteas /tmp
directory.
Note: We have
[repository.upload]
TEMP_PATH = data/tmp/uploads
So, I'm not sure, why uploads are stored in /tmp
at all.
After one nightly job the file from the CD job is in Gitea's /tmp
:
-rw------- 1 git git 221663149 3. Mai 02:23 multipart-940622690
To debug the issue, I experimented with uploading attachments to releases via the GUI and the API. In the browser, I'm limited to 20 MB file size and these files did not remain in /tmp
.
When uploading the same 20 MB file with curl
, it also did not remain in /tmp
.
However, I could reproduce the issue by uploading a 30 MB file with curl
.
So, the issue seems to be related to file size.
I can't tell, if only "large" files get written to /tmp
or all files get written there, but only "small" files are deleted after the upload.
I did not investigate, if this issue affects only attachments to releases, or also other kinds of attachments.
It is unclear to me, what exactly the bug is, but I'm fairly certain it is a bug and not a configuration issue on our side.
I think Gitea should probably remove temporary uploads from /tmp
or store them in TEMP_PATH
instead of /tmp
.
If you need any more information or want me to test something, please ask.
We'll update to the latest Gitea release by the end of the week. I'll report back if that changes anything.
Gitea Version
1.16.1
Can you reproduce the bug on the Gitea demo site?
No
Log Gist
No response
Screenshots
No response
Git Version
2.30.2
Operating System
Debian GNU/Linux 11.2
How are you running Gitea?
Gitea binary is from dl.gitea.io and started via a (custom) Systemd unit:
[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea
ExecStart=/opt/gitea/gitea web
Restart=always
Environment=USER=git HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea GITEA_CUSTOM=/opt/gitea/custom MACARON_ENV=production
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
[Install]
WantedBy=multi-user.target
Database
PostgreSQL