• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Jaranguda

Belajar Mengajar

  • Home
  • Sponsor/Jasa
  • Tentang

Linux

Cara Buat atau Update UID User Docker Image

Last Updated on 19 June 2023 By tommy Leave a Comment

Pertama yang perlu diketahui adalah user yang digunakan oleh docker image, cara termudah untuk mengetahuinya adalah dengan mengeksekusi id, perintah id bisanya sudah ada dalam docker image. Beberapa contoh

docker run debian id
docker run ubuntu id
docker run fedora id
docker run alpine id

dari ke empat docker image tersebut sama-sama menggunakan user root

uid=0(root) gid=0(root) groups=0(root)

Kita asumsikan anda menggunakan user app dengan uid 1000 dan group appgroup dengan gid 1000.

1. Update existing user

1. usermod and groupmod
Bila docker image memiliki usermod dan groupmod, untuk user dan group yang sudah ada, tambahkan di Dockerfile

usermod -u 10000 app && groupmod -g 10000 appgroup

perintah diatas akan mengupdate uid user app menjadi 10000 dan group appgroup menjadi 10000. Untuk pengguna Alpine Linux, perlu menginstall shadow (apk --no-cache add shadow) terlebih dahulu

Untuk contoh kita menggunakan image haproxy:lts-alpine. Pertama mari kita cek, user dan group yang digunakan

$ docker run haproxy:lts-alpine id
uid=99(haproxy) gid=99(haproxy) groups=99(haproxy)

Anggap Dockerfile yang kita miliki, seperti pada baris dibawah ini

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

update menjadi

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
USER root
RUN apk --no-cache add shadow
RUN usermod -u 10000 haproxy && groupmod -g 10000 haproxy
USER haproxy

build docker diatas, mari kita berinama haproxy-dev2

docker build . -t haproxy-dev1
# cek uid dan group id dengan
docker run haproxy-dev1 id

setelah selesai di-build, cek user dan group user haproxy
build docker usermod usergroup

2. Pilihan terakhir sed
Bila tidak ada usermod dan tidak ada pilihan untuk update Docker image, maka pilihan terakhir kita adalah update file /etc/passwd dan /etc/group manual

sed -i 's/1000/10000/g' /etc/passwd /etc/group

Sebagai contoh, mari kita gunakan kembali Dockerfile diatas

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

ubah menjadi

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
USER root
RUN sed -i 's/99/10000/g' /etc/passwd /etc/group
USER haproxy

build, lalu cek user dan group id haproxy

docker build . -t haproxy-dev2
# cek uid dan group id dengan
docker run haproxy-dev2 id

2. Buat user baru

Dalam penggunaan image docker, sangat disarankan untuk menggunakan user dengan privileges/hak akses yang terbatas. Bila anda menggunakan distro sebagai base image, biasanya user default adalah root, untuk itu mari kita buat contoh menambah/membuat user di docker image.

1. adduser dan addgroup
adduser dan groupadd biasanya digunakan di BusyBox atau Alpine

addgroup appgroup -g 10000 && adduser -D -h /app -G appgroup -u 10000 app

Contoh file Dockerfile Alpine Linux

FROM alpine:3
RUN addgroup appgroup -g 10000 && adduser -D -h /app -G appgroup -u 10000 app
USER app

build, lalu jalankan

$ docker build . -t test-user1
# cek user dan group
$ docker run test-user1 id 
uid=10000(app) gid=10000(appgroup) groups=10000(appgroup)

2. useradd dan groupadd
alternative lainnya adalah menggunakan useradd dan groupadd

groupadd -g 10000 appgroup && useradd -u 10000 -g appgroup -m -d /app app

Contoh file Dockerfile Ubuntu

FROM ubuntu:jammy
RUN groupadd -g 10000 appgroup && useradd -u 10000 -g appgroup -m -d /app app
USER app

build, lalu jalankan

$ docker build . -t test-user2
# cek user dan group
$ docker run test-user2 id 
uid=10000(app) gid=10000(appgroup) groups=10000(appgroup)

Filed Under: Linux

Solusi helm Upgrade Failed

Last Updated on 23 May 2023 By tommy Leave a Comment

Sewaktu upgrade update helm chart di Kubernetes, muncul pesan error

Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress

perintah yang saya gunakan

helm upgrade --install api-golang api-golang -f api-golang/env/dev.yaml -n application

1. Cek helm ls
Pertama cek dulu chart yang sudah di deploy sebelumnya

helm ls -n application

kadang kala, disini tidak muncul helm chart yang baru dideploy, tidak perlu khawatir karena bisa kita cek dengan helm history

2. helm history
Lihat history helm chart tersebut

$  helm history api-golang -n application
REVISION    UPDATED                     STATUS      CHART           APP VERSION DESCRIPTION
1          Mon May 22 09:16:04 2023    superseded  api-golang-0.1.0   1.16.0      Upgrade complete
2          Mon May 22 09:38:43 2023    superseded  api-golang-0.1.0   1.16.0      Upgrade complete
3          Mon May 22 10:44:38 2023    superseded  api-golang-0.1.0   1.16.0      Upgrade complete
4          Mon May 22 13:55:44 2023    superseded  api-golang-0.1.0   1.16.0      Upgrade complete
5          Tue May 23 08:49:23 2023    superseded  api-golang-0.1.0   1.16.0      Upgrade complete
6          Tue May 23 09:57:24 2023    deployed    api-golang-0.1.0   1.16.0      Upgrade complete
7          Tue May 23 10:10:01 2023    failed      api-golang-0.1.0   1.16.0      Upgrade "api-golang" failed: pre-upgrade hooks failed: timed out waitig for the condition
8          Tue May 23 10:12:21 2023    pending-upgrade api-golang-0.1.0   1.16.0  Preparing upgrade

kalo dilihat dari history deployment diatas, bisa kita lihat no. 8 masih proses pending-upgrade walaupun sudah lebih dari 20 menit masih tetap prosesnya seperti itu. Solusinya adalah dengan rollback ke deployment terakhir yang sukses, dari contoh diatas adalah revision ke 6.

helm rollback api-golang 6 -n application

Salah satu perintah yang sangat membantu waktu troubleshooting adalah mengambil events di namespace yang anda gunakan

kubectl get events --sort-by='.lastTimestamp' -n application

Filed Under: Linux

Cara Menonaktifkan Pager di macOS

Last Updated on 28 December 2022 By tommy Leave a Comment

Untuk melihat apa yang digunakan PAGER di mac, jalankan di terminal

$ echo $PAGER
less

Pager ini tujuannya untuk menampilkan keluaran dari perintah di teriminal yang bisa diakses dengan berbagai ukuran layar. Contoh tampilan ketika menjalankan git branch
git branch

Seakan-akan output git branch tersebut di buka di layer yang berbeda dengan tempat anda mengjalankan perintah tersebut. Bagi saya ini kurang user-friendly, dan saya lebih memilih tanpa adanya PAGER tersebut.

Contoh tampilan tanpa pager
Mac screenshot terminal

Cara untuk menonaktifkan PAGER tersebut adalah dengan menambahkan export PAGER="" di ~/.zshrc untuk zsh dan ~/.bashrc untuk bash

# zsh shell
echo 'export PAGER=""' >> ~/.zshrc
# bash shell
echo 'export PAGER=""' >> ~/.bashrc

setelah menambahkan baris tersebut, reload konfigurasi shell anda.

# zsh shell
source >> ~/.zshrc
# bash shell
source >> ~/.bashrc

Filed Under: Linux

Cara Force Delete Namespace di Kubernetes

Last Updated on 14 November 2022 By tommy Leave a Comment

Cara yang akan kita bahas disini bisa digunakan untuk berbagai object yang digunakan oleh Kubernertes seperti namespace atau LoadBalancer ataupun object lainnya.
Bila anda mendapati masalah seperti menghapus suatu namespace di Kubernetes, tetapi statusnya tetap Terminating

➜  ~ kubectl delete ns/kafka
namespace "kafka" deleted

bila di cek status namespacenya Terminating

➜  ~ kubectl get ns/kafka
NAME    STATUS        AGE
kafka   Terminating   10d

untuk lebih jelas, kita lihat detail lebih jauh tentang namespace ini

➜  ~ kubectl describe ns/kafka
Name:         kafka
Labels:       kubernetes.io/metadata.name=kafka
              kubesphere.io/namespace=kafka
Annotations:  <none>
Status:       Terminating
Conditions:
  Type                                         Status  LastTransitionTime               Reason                  Message
  ----                                         ------  ------------------               ------                  -------
  NamespaceContentRemaining                    True    Tue, 08 Nov 2022 21:33:35 +0700  SomeResourcesRemain     Some resources are remaining: pods. has 1 resource instances
  NamespaceFinalizersRemaining                 False   Tue, 08 Nov 2022 22:09:57 +0700  ContentHasNoFinalizers  All content-preserving finalizers finished
 
No resource quota.
 
No LimitRange resource.
➜  ~ kubectl get pods -n kafka
NAME      READY   STATUS        RESTARTS      AGE
kafka-0   0/1     Terminating   4 (12d ago)   12d

Solusinya adalah dengan menghapus finalizer.

Jalankan

kubectl edit ns/kafka

cari lalu hapus baris

  finalizers:
  - kubernetes

finalizer

setelah menghapus baris tersebut, tunggu beberapa saat agar perubahan tersebut dijalankan oleh kubernetes

Filed Under: Linux

MacOS Minta Install Git

Last Updated on 15 October 2022 By tommy Leave a Comment

Git Macos

Yang ditampilkan ini cukup mengganggu, karena cukup sering muncul tiap menjalankan command di terminal Mac
The “git” command requires the command line developer tools. Would you like to install the tools now?
Choose to install to download and install the command line developer tools now

command install mac

Solusinya jalankan

sudo xcode-select -switch /Library/Developer/CommandLineTools

Filed Under: Linux

Login ke Trino dengan Keycloak OpenID

Last Updated on 12 August 2022 By tommy Leave a Comment

Karena trino tidak memiliki fitur authentikasi bawaan, maka kita akan menggunakan pihak ketiga (third party), yang akan digunakan disini keycloak. Keycloak sendiri bisa menggunakan SAML ataupun OpenID, karena trino support OpenID, maka kita akan menggunakan OpenID untuk koneksi antara kedua service ini.

Setting Keycloak 19

Login ke keycloak ke master console sebagai admin

1. Buat Realm Trino
buat realm keycloak

2. Buat client
Klik menu Client -> Create Client
create client di keycloak realms
Yang perlu di isi

Client Type : OpenID Connect
Client ID : trino
Name : Aplikasi Trino

pada capability config, pastikan sesuai dengan

Client authentication : ON
Authorization : ON
Authentication flow : 
 - Standard flow
 - Direct access grants

klik Save

Selanjutnya, pada “Valid redirect URIs” isi dengan https://localhost:8443/*. Akhiri dengan klik Save
tambahkan valid redirect
Bila anda mencoba berbagai services, bisa juga menggunakan *, sebagai nilai “Valid redirect URIs”, dengan begitu URL apa pun akan diterima oleh Keycloak, tapi ingat jangan digunakan di server production.

Klik menu Realm Settings, pada baris Endpoints klik OpenID Endpoint Configuration
Openid endpoint setting dibawah realms setting

Format URL-nya : https://[DOMAIN KEYCLOAK]/realms/[REALMS]/.well-known/openid-configuration
openid config
Copy URL Issuer, contoh https://keycloak.jaranguda.com/realms/app-trino

Klik menu Client, klik trino. Pada tab credential, copy Client secret
keycloak client dan id secret di keycloak

Ketiga informasi ini (issuer, client name dan client secret) akan kita gunakan sewaktu menjalankan aplikasi Trino

Issuer : https://keycloak.jaranguda.com/realms/app-trino
Client : trino
Client secret : JxG5wAdYCv4EvMdXrMyKKYy0GLa5UlTv

Tambah User Keycloak

Saat ini kita belum memiliki user, untuk itu kita akan membuat 1 user untuk login. Selain cara ini kita bisa juga menggunakan user dari LDAP, Google, Twitter dan lain sebagainya, tetapi untuk mempersingkat tutorial ini usernya kita buat manual.

klik menu Users -> Create new user
create user in keycloak
akhiri dengan klik Create

Field yang perlu diisi

Username : jaranguda
Email : blablabla@domain
Email verified : ON
First name : Jaranguda
Last name : Com
Enabled : ON

Klik Credential
set password permanent keycloak
ingat untuk mencentang Temporary Off agar passwordnya permanen.

Install Trino

Untuk memudahkan tutorial ini, kita akan menjalankan trino dengan docker. Agar bisa menggunakan fitur OAUTH, kita harus menggunakan mode SSL/HTTPS/TLS.

Buat folder untuk menyimpan config trino

mkdir /home/jaranguda/trino

1. Generate SSL

openssl req -newkey rsa:2048 -nodes -keyout trino.key -x509 -days 3650 -out trino.crt

Satukan private key dan certificate diatas menjadi satu

cat trino.crt trino.key > /home/jaranguda/trino/trino.cert

2. Config Trino
Buat file /home/jaranguda/trino/config.properties yang berisi

#single node install config
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
discovery.uri=http://localhost:8080
 
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=/tmp/trino.pem
 
internal-communication.shared-secret=DtwONqSu2DukReKmJg1uU5XvloM6WAZztvtUTy3r6rcXenPGZUGlflYtE3saEXeyEqQGDKZsH/0azZvMDFhvZscF6Zjfrzxr8YzGkP3WOe4Pj7VbQiKga227lJogUzrfGBfjKyzrq4OpJV51PABcTi/QMmSqt/i8PB/q365PmDzOlGez3D6dM9g+OuFTp2HJcim8uaNHlzyFQmYEo/uszbNcS63xjUCi0Z9rpBbgRBnZtbU4Hf3T+hM8M8I5w/acf9PjUN/O4zdjB/fR8TmD48hckfYvc6IW2LVYM63IF/zBd77U8G6ZEyaJ+EQ08riBRWTv74jkgpEqJPKW5FBHKwC3MBj58FIAeo8l3W6Rxa6QHRSsaVris2MfUK+iqE5/catCQZaqefRa2jIuRG9Yk1SJfu+OYdWTuatJVjk7EYo1Epsfa5AMYprm+zT5uO59AaXlByjOufqlKEUcn1zT8FE1i1+1tfxmY1VFbFMWpatXcfLsVFWHnG3g0QpJ1troxA07qnAKBBnI97i3lGmfCrWHWZfmLj5iDVrUAuQdhHvvzQYiTweYkXQturXsvH69gbInUTlv06U/3VJOgY7ymW6WLMW7eiC21uA6wpLnLryX5etn2fGzBKR41L6VmrxKE1Eob2DD22SWClP5j3dbRaVT5vWwvQov4p3bSJZFSg8=
 
http-server.authentication.type=oauth2
web-ui.authentication.type=oauth2
http-server.authentication.oauth2.issuer=https://keycloak.jaranguda.com/realms/app-trino
http-server.authentication.oauth2.client-id=trino
http-server.authentication.oauth2.client-secret=JxG5wAdYCv4EvMdXrMyKKYy0GLa5UlTv

internal-communication.shared-secret, bisa digenerate dengan openssl rand 512 | base64 -w0
ganti issuer, client-id dan client-secret, sisanya biarkan default. Lalu jalankan trino dengan docker

docker run -p 8443:8443 -v /home/jaranguda/trino/config.properties:/etc/trino/config.properties -v /home/jaranguda/trino.cert:/tmp/trino.pem trinodb/trino

trino berjalan dengan normal

Setelah docker berjalan, buka di browser https:localhost:8443, jangan kaget waktu mendapati error, karena ini untuk tahap development jadi sah-sah saja menggunakan self-signed certificate, untuk production bisa menggunakan SSL gratis seperti Let’s Encrypt, agar tidak muncul peringatan “Warning: Potential Security Risk Ahead” seperti gambar dibawah
unknown root ca self signed
klik Advanced, lalu Accept the Risk and Continue

Anda akan otomatis diarahkan ke halaman sign-in Keycloak
Otomatis diredirect ke keycloak

isi username dan password yang tadi dibuat
input username password keycloak

Tampilan UI trino setelah login
login ke trino dengan keycloak

Filed Under: Linux

  • Go to page 1
  • Go to page 2
  • Go to page 3
  • Interim pages omitted …
  • Go to page 125
  • Go to Next Page »

Primary Sidebar

Pencarian

Tanya Jawab tentang DevOps SRE CPE, gabung di https://t.me/devopsindonesia

Terbaru

  • Cara Buat atau Update UID User Docker Image
  • Solusi helm Upgrade Failed
  • macOS package is untrusted
  • Cara Mengganti Port Screen Sharing macOS
  • Cara Menonaktifkan Pager di macOS

Komentar

  • Iqu on Review ISP Fiber Optik Balifiber
  • Sarah on Kemana Menghilangnya Saldo BCA 50 ribu
  • Rizcky on Kemana Menghilangnya Saldo BCA 50 ribu
  • Mubashar sadiq on Password Superadmin Huawei HG8245A
  • Beritalogi on Cara Redirect Domain di Cloudflare

Tulisan Populer

  • Password Router Huawei HG8245H5 Indihome 1.3m views
  • Password Terbaru ZTE F609 Indihome 786k views
  • Password Superadmin Huawei HG8245A 330.5k views
  • Cara Setting Manual Modem GPON ZTE F609 Indihome 275.4k views
  • Cara Setting Wireless ZTE F609 Indihome 260.4k views
  • Mengaktifkan Port LAN di Huawei HG8245 Indihome 172.2k views
  • Kemana Menghilangnya Saldo BCA 50 ribu 162k views
  • Akses UseeTV Indihome via Wireless ZTE F609 157.5k views
  • Cara Reset Password ZTE F609 Indihome 148.5k views
  • Cara Setting DHCP Server Modem/Router ZTE F609 115.5k views

Kategori

  • Delphi
  • dll
  • Gambas
  • Internet
  • Java
  • Lazarus
  • Linux
  • PHP
  • Review
  • Teknologi

Sponsor

kadal.id
carakami.com
kuotabisa.com
Untuk jadi sponsor, hubungi kita lewat halaman sponsor
© 2021. Jaranguda
  • Linux
  • PHP
  • Internet
  • Teknologi
  • Delphi
  • Gambas
  • Java