# Mounting S3 Bucket di Ubuntu Linux dengan Menggunakan S3FS

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/S3FS.png" alt=""><figcaption></figcaption></figure>

## Introduction

[**S3FS**](https://github.com/s3fs-fuse/s3fs-fuse) bisa merujuk pada beberapa hal, tetapi yang paling umum lebih merujuk pada project [**FUSE (Filesystem in Userspace)**](https://www.kernel.org/doc/html/next/filesystems/fuse.html) bernama [**`s3fs`**](https://manpages.ubuntu.com/manpages/jammy/man1/s3fs.1.html). S3FS sendiri adalah sebuah tool yang memungkinkan kita dapat mengakses Cloud Storage yang menggunakan protokol [**S3**](https://aws.amazon.com/s3) seperti service S3 dari provider [**Amazon Web Services (AWS)**](https://aws.amazon.com) atau [**Cloudian**](https://cloudian.com), yang mana protokol ini memungkinkan kita dapat menyimpan file statis seperti teks, audio, video dan gambar.

Dengan menggunakan S3FS kita dapat mengakses dan menyimpan file secara langsung di S3 bucket yang kita miliki, hal ini mirip dengan cara kita untuk menyimpan file pada filesystem lokal.&#x20;

Berikut ini adalah beberapa fitur umum dari S3FS:

1. **FUSE Integration:** Menggunakan FUSE, S3FS membuat Cloud Storage berbasis protokol S3 terlihat seperti filesystem lokal.
2. **Amazon S3 Bucket as Filesystem:** Mengakses S3 bucket melalui jalur file dan directory standar.
3. **File Upload dan Download:** Memungkinkan kita dapat meng-upload dan men-download file dari dan ke S3 bucket seperti kita melakukannya pada filesystem lokal.
4. **Perintah Standar Linux:** Dapat digunakan dengan perintah standar Linux untuk file dan direktory seperti **`cp`**, **`mv`**, **`ls`**, dll.
5. **File Konfigurasi:** Konfigurasi S3FS dapat disimpan dalam file konfigurasi untuk memudahkan pengaturan dan penggunaan.

## Installation

### Install Paket Software S3FS

Agar kita dapat menggunakan S3FS untuk melakukan mounting S3 bucket pada sistem operasi Ubuntu Linux, kita perlu melakukan instalasi paket software **`s3fs`** terlebih dahulu dan berikut perintahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
apt-get install s3fs -y
```

{% endcode %}

## Configuration

Selanjutnya buat S3 bucket yang nantinya akan kita mounting ke directory mountpoint yang akan kita gunakan sebagai directory untuk backup, untuk membuat S3 bucket pastikan kita sudah memiliki service S3 terlebih dahulu, pada simulasi ini service S3 yang digunakan yakni layanan [**NEO Object Storage**](https://www.biznetgio.com/product/neo-object-storage) dari cloud provider [**Biznet GIO Nusantara**](https://www.biznetgio.com).

Untuk melakukan manajemen S3 kita juga dapat menggunakan S3 client seperti [**Cyberduck**](https://cyberduck.io/), [**DragonDisk**](http://www.s3-client.com), [**Rclone**](https://rclone.org), [**S3cmd**](https://s3tools.org/s3cmd) maupun [**S3 Browser**](https://s3browser.com), pada simulasi ini digunakan S3FS untuk melakukan mounting S3 bucket ke mountpoint yang ada di Ubuntu Linux, pastikan pada saat melakukan konfigurasi untuk data credential yang digunakan oleh service S3, ubah parameter **`[ACCESS_KEY]`** dan **`[SECRET_KEY]`** yang nantinya akan disimpan pada file konfigurasi **`/etc/.passwd-s3fs`** dan berikut langkah-langkahnya:

### Konfigurasi S3FS

Kemudian kita perlu melakukan konfigurasi S3FS seperti membuat directory mountpoint dan membuat data credential untuk akses S3 bucket dan berikut langkah-langkahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
cd /
mkdir S3-Backup
echo [ACCESS_KEY]:[SECRET_KEY] > /etc/.passwd-s3fs
chmod 600 /etc/.passwd-s3fs
```

{% endcode %}

### Mounting S3 Bucket Secara Manual

Setelah itu lakukan mounting S3 bucket ke directory mountpoint yang sudah dibuat secara manual dan berikut langkah-langkahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
s3fs media.medusa.my.id /S3-Backup -o passwd_file=/etc/.passwd-s3fs -o url=https://[S3_ENDPOINT] -o use_path_request_style
df -Th
cd /S3-Backup/
ls -lah
```

{% endcode %}

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/Mounting%20S3%20Bucket.png" alt=""><figcaption><p>Mounting the S3 Bucket</p></figcaption></figure>

{% hint style="info" %}

```markdown
media.medusa.my.id = Merupakan nama S3 bucket yang telah dibuat
/S3-Backup = Directory mountpoint untuk menyimpan backup ke S3
-o passwd_file=/etc/.passwd-s3fs = Opsi untuk menentukan file yang berisi data credential untuk mengakses S3 Bucket
-o url=https://[S3_ENDPOINT] = Opsi untuk menentukan URL endpoint dari provider S3
-o use_path_request_style = Opsi untuk menentukan penggunaan metode permintaan path-style URL
```

{% endhint %}

### Membuat Script Mounting S3 Bucket Otomatis

Apabila proses di atas sudah selesai dilakukan secara manual dan kita sudah berhasil melakukan mounting S3 bucket, selanjutnya agar mountpoint tersebut dapat terbaca pada filesystem Ubuntu Linux dan tidak ter-unmount saat sistem operasi dilakukan reboot, maka kita perlu melakukan konfigurasi **`rc.local`** dan membuat script untuk menjalankan mounting S3 bucket secara otomatis pada saat sistem operasi dilakukan booting, serta melakukan unmount pada mountpoint yang saat ini masih ada pada filesystem lokal dan berikut langkah-langkahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
cd /etc
vi S3FS-rc.sh
vi rc.local
chmod +x /etc/S3FS-rc.sh
chmod +x /etc/rc.local
umount -i /S3-Backup/
```

{% endcode %}

{% hint style="warning" %}
{% code title="/etc/S3FS-rc.sh" %}

```bash
#!/bin/bash
s3fs media.medusa.my.id /S3-Backup -o passwd_file=/etc/.passwd-s3fs -o url=https://[S3_ENDPOINT] -o use_path_request_style
```

{% endcode %}
{% endhint %}

{% hint style="warning" %}
{% code title="/etc/rc.local" %}

```bash
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
./etc/S3FS-rc.sh
```

{% endcode %}
{% endhint %}

### Membuat Service rc.local

Selanjutnya kita perlu membuat service **`rc.local`** dengan nama **`rc.local.service`** agar nantinya script **`rc.local`** dapat menjalankan schedule untuk mengeksekusi script **`S3FS-rc.sh`** yang digunakan untuk melakukan mounting S3 bucket secara otomatis pada saat sistem operasi dilakukan booting setelah dilakukan reboot sebelumnya.

{% code overflow="wrap" lineNumbers="true" %}

```bash
vi /etc/systemd/system/rc-local.service
```

{% endcode %}

{% hint style="warning" %}
{% code title="/etc/systemd/system/rc-local.service" %}

```markdown
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
```

{% endcode %}
{% endhint %}

### Mengaktifkan Service

Setelah service **`rc.local`** sudah selesai dibuat, selanjutnya kita perlu meng-enable service terlebih dahulu dan kemudian men-start service tersebut agar running.

{% code overflow="wrap" lineNumbers="true" %}

```bash
systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service
```

{% endcode %}

{% hint style="success" %}
{% code title="Output" %}

```bash
● rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             └─debian.conf
     Active: active (running) since Wed 2023-11-22 15:52:10 UTC; 5min ago
       Docs: man:systemd-rc-local-generator(8)
    Process: 620 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
      Tasks: 3 (limit: 4646)
     Memory: 18.5M
        CPU: 96ms
     CGroup: /system.slice/rc-local.service
             └─726 s3fs media.medusa.my.id /S3-Backup -o passwd_file=/etc/.passwd-s3fs -o url=https://[S3_ENDPOINT] -o use_path_request_style

Nov 22 15:52:10 agus-staging systemd[1]: Starting /etc/rc.local Compatibility...
Nov 22 15:52:10 agus-staging s3fs[630]: s3fs version 1.90(unknown) : s3fs -o passwd_file=/etc/.passwd-s3fs -o url=https://[S3_ENDPOINT] -o use_path_request_style media.medusa.my.id /S3-Backup
Nov 22 15:52:10 agus-staging s3fs[630]: Loaded mime information from /etc/mime.types
Nov 22 15:52:10 agus-staging s3fs[726]: init v1.90(commit:unknown) with GnuTLS(gcrypt)
Nov 22 15:52:10 agus-staging systemd[1]: Started /etc/rc.local Compatibility.

```

{% endcode %}
{% endhint %}

## Testing

Terakhir setelah dilakukan reboot pada sistem operasi yang digunakan untuk mounting S3 bucket, lakukan SSH kembali ke komputer atau server Ubuntu Linux tersebut dan berikut langkah-langkahnya:

{% code overflow="wrap" lineNumbers="true" %}

```bash
reboot
ssh user@123.45.67.89 -p666
df -Th
```

{% endcode %}

<figure><img src="https://nos.wjv-1.neo.id/cdn.medusa.my.id/After%20Reboot.png" alt=""><figcaption><p>Operating System After Rebooting</p></figcaption></figure>

Demikian sedikit pengetahuan dan pengalaman yang dapat saya bagikan, semoga apa yang telah saya sampaikan dapat bermanfaat bagi kita semua.

<details>

<summary><strong>Referensi</strong></summary>

* [**FUSE-based file system backed by Amazon S3**](https://github.com/s3fs-fuse/s3fs-fuse#readme)
* [**Ubuntu: rc.local di ubuntu 20.04**](https://lms.onnocenter.or.id/wiki/index.php/Ubuntu:_rc.local_di_ubuntu_20.04)

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.madfxr.my.id/documentation/categories/linux/mounting-s3-bucket-di-ubuntu-linux-dengan-menggunakan-s3fs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
