Skip to main content

the avatar of Kubic Project

Kubic with Kubernetes 1.19.0 released

Announcement

The Kubic Project is proud to announce that Snapshot 20200907 has been released containing Kubernetes 1.19.0.

Release Notes are avaialble HERE.

Upgrade Steps

All newly deployed Kubic clusters will automatically be Kubernetes 1.19.0 from this point.

For existing clusters, please follow our new documentation our wiki HERE

Thanks and have a lot of fun!

The Kubic Team

a silhouette of a person's head and shoulders, used as a default avatar

Aprende #Vim (de la manera más inteligente). El libro.

¿Otro libro o texto más para aprender a utilizar el editor de texto Vim? Pues sí, nunca es suficiente…

¿Estás buscando un libro o texto para aprender a utilizar el editor Vim y empezar a sacarle todo el partido que puede ofrecer esta potente herramienta de edición de textos? Quizás este libro que te traigo sea un buen punto de partida.

En este blog llevo ya un tiempo ofreciendo tutoriales y guías sobre el uso del editor Vim. Este es un recurso más que puedes utilizar en ese empeño en aprender a utilizar Vim.

Este artículo es una nueva entrega del curso “improVIMsado” que desde hace meses vengo publicando en mi blog sobre el editor Vim y que puedes seguir en estos enlaces:

Sobre el editor Vim  se ha escrito un montón de artículos, tutoriales, libros. Se han hecho vídeos, etc. Pero nunca está de más el poder dar otra visión, otro concepto y el poder llegar a más usuarios informando de la potencia que ofrece Vim a la hora de gestionar textos.

Hace unos días gracias a Ekaitz, conocí un trabajo de un usuario que estaba escribiendo un libro o tutorial en inglés y utilizando un repositorio de GitHub para llevar a cabo la tarea. El usuario es Igor Irianto y el libro es Learn Vim (the smart way)

En ese proyecto, a lo largo de los distitos capítulos, nos va explicando distintos conceptos y funcionalidades del editor Vim. Muchas de ellas ya las he tratado en mi blog, que puedes encontrar reunidas en este enlace:

Pero siempre es interesante ofrecer otros ejemplo, u otro método didáctico. El proyecto me resultó interesante, así que he decidido ponerme manos a la obra e ir traduciendo al español el libro y después ofrecerlo no solo en el repositorio de GitHub, si no también mediante Gitbook u otra alternativa…

Así que en GitHub está disponible mi repositorio para ir realizando la traducció de los diferentes capítulos publicados en el original. Te invito a clonar, abrir tu editor Vim y participar, traduciendo, corrigiendo o mejorando las traducciones mediante Pull Request.

Espero que el trabajo final resulte interesante y sirva para dar a conocer más esta gran herramienta, ¡incluso a lo mejor entre los usuarios de Emacs! 🙂

Enlaces de interés

a silhouette of a person's head and shoulders, used as a default avatar

José Jiménez en Podcast Linux #111

En esta ocasión se cumple el dicho de «no hay dos sin tres» y ésta será el tercer podcast consecutivo que comparto de los programas del podcast de Juan Febles. En esta ocasión os presento a José Jiménez en Podcast Linux #111 donde nos habla de su experiencia como comunicador en el mundo del Software Libre.

José Jiménez en Podcast Linux #111

José Jiménez en Podcast Linux #111

En esta ocasión tengo el placer de presentaros a otro promotor de las bondades de los sistemas libres.

Se trata de José Jiménez, un experimentado usuario que lleva en el mundo de la informática desde los tiempos del Spectrum y que es linuxero desde mediados de los 90 con Slackware 3.4, posteriormente se pasó a Red Hat 4 y en la actualidad se encuentra con Fedora, eso si con KDE durante toda su vida ya que dice que ya utilizaba la versión 1.0.

De su charla destacaría el concepto de la «falsa gratuidad de GNU/Linux» ya que según él, y de forma muy acertada, todo el software se paga, bien sea con dinero (M$ o Apple) o con tiempo de aprendizaje, como son los libres. Esta idea me la quedo (gracias José).

Además en la entrevista con Juan descubrimos que es un experto en placas ARM como Raspeberry Pi pero que le encanta buscar alternativas (muchas de las cuales pueden ser incluso mejores que la Raspy) y que domina como pocos Telegram.

Y lo mejor de todo, no es erudito sino que un sabio ya que todo su conocimiento lo comparte con todo el mundo. Os recomiendo su blog: rooteando.com.

José Jiménez en Podcast Linux #111

No obstante, para entender mejor quien es José y qué le hace merecedor de un capítulo de Linux Conexion lo mejor es leer las palabras del presentador y creador del podcast Juan Febles:

«¡¡¡Muy buenas amante del Software Libre!!!

Bienvenido a otra entrega de Podcast Linux, la número 111. Un saludo muy fuerte de quien te habla, Juan Febles. Hoy estamos con José Jiménez, podcaster y bloguero promoviendo su pasión: la informática, en especial GNU/Linux y el Software Libre. De profesión formador , aunque actualmente no ejerce, le gusta la programación en Python y Django, usuario muy activo en Telegram, donde tiene múltiples proyectos y podcasts, de varias temáticas; Linux, ARM, Telegram o formación.»

Como siempre, os dejo el audio para que los podáis escuchar y disfrutar de este programa de una hora de duración.

Y los enlaces de interés de José Jiménez:

Canales de Telegram:

Más información: Podcast Linux

Y aprovecho para animaros a seguir Podcast Linux en algunos de los canales de comunicación que tiene, los cuales han cambiado debido a que Podcast Linux ha abandona e

a silhouette of a person's head and shoulders, used as a default avatar

Ultrabooks con Linux económicos: Slimbook Essential

Hoy hago un hueco en la serie de artículos de la Akademy 2020 en línea que está ocupando el blog estos últimos días. Y es que me encanta publicar cosas de la compañía valenciana Slimbook. En este caso un poco más contento si cabe porque responden a una de las peticiones que le estoy haciendo a su gerente desde hace tiempo: unos ultrabook con linux económicos. Se trata de la serie Essential de 14 y 15 pulgadas.

Ultrabooks con Linux económicos: Slimbook Essential

Mucho han cambiado las cosas desde finales de la primera década de los 2000 cuando escribía artículos llamados «¡Quiero un netbook con linux» buscando mi compañero de fatigas ideal.

En la actualidad Tener un ultrabook (o portátil delgado y de bajo peso) con Linux es algo relativamente sencillo, tenemos alternativas de varias empresas, aunque si es verdad es que si tienes un presupuesto ajustado quizás pienses que no vale la pena invertir tanto dinero.

3r Encuentro del Software Libre

Y es que hasta la fecha, los ultrabook con Linux respondían un tipo de usuario que sabían bien que compraban una máquina de altas prestaciones con un precio acorde diseñados para durar mucho tiempo con un alto grado de utilización.

No obstante, para los usuarios menos experimentados en los aspectos del hardware de su computadora, un portátil de 15 es un portátil de 15, casi independientemente de qué placa base, procesador o tarjeta gráfica que tenga. No es una crítica, es una realidad, ya que piensan (posiblemente de forma acertada) que para el uso que le van a dar es una inversión económica demasiado elevada.

Este grueso de usuarios es elevado y hay que reconocer que en mi caso me cuesta mucho convencerles de qué en realidad a la larga compensa ya que no será la primera vez que tengo que «arreglar» algún portátil «nuevo» que no da la talla para lo que se pide. Y lo que se le pide es que abra una página web antes de que se ponga el sol.

Ultrabooks con Linux económicos: Slimbook Essential

Así que me es muy grato anunciar que Slimbook ha lanzado una serie de Ultrabooks que se ajusta a ese intervalo de usuarios, aquellos que quieren un portátil bueno de 15 pulgadas, que no les importa dar el salto a sistemas compatibles 100% con GNU/Linux, pero que no quieren gastarse 700€.

Ultrabooks con Linux económicos: Slimbook Essential

Esa es el motivo de la existencia de la gama Slimbook Essential que , en mi sincera opinión, van a tener una más que buena aceptación entre un sector de público que quiere un portátil bueno a un precio moderado. En otras palabras, es el ultrabook para aquellos usuarios que quieren prestaciones más que aceptables a un precio muy ajustado, con un diseño bonito y un peso reducido.

Las características de configuración básicas son las siguientes:

  • Procesador Intel de décima generación
  • Pantalla: 14 o 15’6 pulgadas FullHD de marco delagado
  • Teclado: Español retro-iluminado RGB (modelo 15’6) y retro-iluminado Blanco (modelo 14)
  • Material: Aluminio y ABS color titanio
  • Apertura de 180º
  • Puertos USB: 2 tipo 3.0, 1 tipo 3.1 y 1 tipo USB tipo C (para el modelo de 15’6)
  • Memoria RAM: 8GB (ampliable) DDR4
  • Disco duro M.2: 250GB SSD NVMe (ampliable)
  • Batería de hasta 7 horas de autonomía
  • Peso: 1,3 kg (modelo de 14) y 1,6 (modelo de 15’6)
Ultrabooks con Linux económicos: Slimbook Essential

Todo ello a partir de 499€ el modelo de 14 y de 549€ el de 15’6 pulgadas. Unos precios razonables para aquellas personas que no quieren gastarse mucho pero quieren asegurarse un portátil para mucho tiempo. ¡Ya tengo el portátil recomendado para mis compañeros del colegio!

a silhouette of a person's head and shoulders, used as a default avatar

Tarde del segundo día de Akademy 2020 en línea

Sigue adelante el evento más importante de la Comunidad KDE Internacional. Bienvenidos a la tarde del segundo día de Akademy 2020 en línea, un resumen de lo que ha dado de sí la jornada vespertina del sábado

Tarde del segundo día de Akademy 2020 en línea

Creo que voy a empezar todos los artículos dedicados a Akademy 2020 con este vídeo de bienvenida… me ha encantado la diversidad cultural que nos muestra.

El momento de KDE e.V.

Akademy 2020 se reanuda con la clásica presentación de la Junta de KDE e.V. y los informes de los Grupos de Trabajo, donde se rinden cuentas a todo lo que han hecho durante el año desde la última Akademy.

Entre los aspectos más destacados la Junta destaca el aumento del número de empleados remunerados de tres a cinco, la migración a GitLab y la financiación de más apoyo a los miembros de la comunidad.

Se puede leer todo el documento en este enlace, al que creo que le dedicaré todo un artículo.

Tarde del segundo día de Akademy 2020 en línea

Las charlas de la tarde

La tarde inicia con la emisión simultáneamente desde dos salas. De esta forma hablaremos de la Room 1 y la Room 2.

De esta forma nos encontramos en la Room 1 ponencias como:

  • «Input Handling Update» por Shawn Rutledge, donde nos habla de lo que vendrá con Qt 6.
  • «Native Desktop Styling Support for Qt Quick Controls 2″ a cargo de Richard Moe Gustavsen donde se habla de el trabajo para el soporte nativo de estilo de escritorio para Qt Quick Controls 2.
  • Patrick Pereira presentó «QML Rapid Prototyping«, es decir, Desarrollando herramientas para mejorar los prototipos y el desarrollo del QML
  • Tej Shah, un doctor en medicina dental de los Estados Unidos, nos habló de su proyecto Clear.Dental y su intento de mover la odontología al Código Abierto usando el poder de Linux, Qt y KDE.
  • Rohan Garg dio a los asistentes una lección de Gráficos Linux 101 en la que explicó cómo la creciente popularidad de los dispositivos ARM ha dado lugar a arquitecturas de plataforma con hardware gráfico más extrañas.
Tarde del segundo día de Akademy 2020 en línea
Uno de los temas del 2020: la relación entre Qt y KDE explicada por Cornelius.

Mientras que en la Room 2 tenemos:

  • A Cornelius Schumacher hablando de la Fundación KDE Free Qt, que establecida en 1998 mantiene a las herramientas Qt libre para KDE y todos los demás proyectos de software libre.
  • A Aleix Pol hablando de los productos KDE y cómo percibe su relación con los usuarios.
  • A Johan Thelin introduciéndonos con su charla «Linux in Cars – So What?» desde su mismo coche.
  • A Camilo Higuita hablando de su propio proyecto: Maui. Además nos resumió las actualizaciones del grupo de aplicaciones, servicios, bibliotecas y marcos de UI (Interfaz de Usuario) que Maui proporciona para producir aplicaciones de aspecto atractivo.
  • A Amy Spark, participante de Google Summer of Code, mostró cómo integró el código abierto de Hollywood con las aplicaciones de KDE al portar una tecnología de animación de Disney a Krita.

Tarde del segundo día de Akademy 2020 en línea
Krita mola y lo sabes.

Las charlas relámpago

No quiero olvidar las charlas relámpago que se realizaron en la Room 1:

  • Flatpak, Flathub y KDE: A Quick Summary a cargo de Albert Astals Cid rl cual presentó a la audiencia qué es Flatpak, qué era Flathub y cómo KDE interactuaba con ambos.
  • Nicolás Alvarez habló de la mejora de la infraestructura de los servidores de KDE, la formación del Grupo de Trabajo Sysadmin, y contó a los asistentes cómo el equipo de Sysadmin estaba haciendo más manejables los servidores de KDE al reducir la «deuda técnica», trasladando las tareas manuales a los scripts, mejorando la documentación y haciendo más cosas comprobables localmente antes de ponerlas en los servidores reales.
  • David Edmundson dio consejos sobre cómo ganar una discusión con un mantenedor, habiendo participado y presenciado cientos de discusiones sobre Bugzilla y Phabricator que luego se convirtieron en argumentos que produjeron enojosos estancamientos. Compartió con la audiencia los métodos que había visto funcionar para lograr finales felices y advirtió contra las actitudes que convertían las situaciones en experiencias miserables para todos.
Tarde del segundo día de Akademy 2020 en línea
Participar en un Akademy desde el coche abren nuevas posibilidades para futuros eventos.

Más información: KDE

Material audiovisual Akademy 2020 en línea

Una de las cosas positivas de esta Akademy es que todo el material debe ser emitido digitalmente, lo cual hace que ya puede estar listo para ser compartido en diferido, aunque sea sin editar.

De esta forma, en caso de que te lo hayas perdido, las charlas de hoy ya están disponibles en línea en tres bloques – uno para la mañana y dos para cada una de las habitaciones utilizadas por la tarde. También se ha grabado grabado todas las charlas por separado y pronto podrás verlas en las plataformas de vídeo disponibles de KDE.

a silhouette of a person's head and shoulders, used as a default avatar

Minimal/custom install KDE

Setelah selesai melakukan minimal/custom install openSUSE dan membuat fitur factory reset, langkah selanjutnya adalah memasang Desktop Environment/Window Manager, Display Manager, aplikasi-aplikasi pendukung dan modul-modul YaST yang diperlukan. Tapi sayangnya saya cuma punya satu laptop, sehingga tidak bisa mencoba banyak Desktop Environment atau Window Manager. Jadi yang saya tuliskan di sini apa yang biasa saya gunakan saja, sesuai dengan judul tulisan.

Memasang paket dari installer

Ketika belum terhubung ke internet, jika kita tidak mematikan repositori online saat baru selesai instalasi openSUSE, zypper akan komplain bahwa repositori-repositori tersebut gagal diperbarui. Jadi sebaiknya kita matikan dahulu:

su -c "zypper modifyrepo -dt"

Lalu hidupkan repositori installer:

su -c "zypper modifyrepo -el"

Setelah itu masukkan piringan DVD atau flashdisk yang digunakan untuk instalasi openSUSE. Lalu pasang semua paket yang diperlukan dengan perintah:

su -c "zypper install <nama-paket>"

Paket-paket yang mungkin perlu adalah:

  • plasma5-session atau plasma5-session-wayland: Desktop Environment. Perbedaan dari kedua paket tersebut adalah, jika memasang plasma5-session-wayland akan ikut membawa plasma5-session sebagai dependensi, tapi tidak sebaliknya. Jika memasang plasma5-session kita hanya bisa login ke sesi X11 saja, tapi plasma5-session-wayland, selain bisa ke X11, juga bisa ke sesi Wayland dan Full Wayland.
  • sddm: Display Manager. Setelah memasang paket ini saya bisanya mengganti service display-manager.service dengan sddm.service dengan perintah: su -c "systemctl disable display-manager.service && systemctl enable sddm.service". Jika perlu login otomatis, ubah parameter DISPLAYMANAGER_AUTOLOGIN di /etc/sysconfig/displaymanager dengan perintah: su -c "sed -i 's/DISPLAYMANAGER_AUTOLOGIN=\"/DISPLAYMANAGER_AUTOLOGIN=\"$USER/' /etc/sysconfig/displaymanager".
  • plasma-nm5: NetworkManager applet.
  • plasma5-pa: Volume Manager applet.
  • dolphin: File Manager.
  • konsole: Terminal Emulator.
  • kate: Text Editor.
  • okular: Document Viewer.
  • gwenview5: Image Viewer.
  • spectacle: Screen Capture, untuk mengambil screenshot desktop.
  • ark: Archive Manager, untuk membuka file .zip, .tar, dan lain-lain.
  • vlc: Multimedia Player, untuk memutar video dan musik.
  • MozillaFirefox: Web Browser.
  • libreoffice-writer: Word Processor LibreOffice.
  • libreoffice-calc: Spreadsheet LibreOffice.
  • libreoffice-impress: Presentation LibreOffice.
  • libreoffice-qt5: Antarmuka Qt LibreOffice, supaya serasi dengan tampilan KDE.

Paket-paket pelengkap

  • kernel-firmware atau di Tumbleweed ada kernel-firmware-<perangkat>. Paket ini tergantung pada hardware yang digunakan. Jika ada hardware yang membutuhkan kernel-firmware biasanya saat booting muncul peringatan seperti fail to load firmware brcm/bcm43xx-0.fw (ini yang muncul di laptop saya), atau bisa juga diperiksa dengan perintah dmesg | grep -i 'firmware'. Dari peringatan tersebut kita bisa menentukan firmware apa yang dibutuhkan dengan perintah zypper search --provides bcm43xx-0.fw. Dari hasil perintah tersebut akan muncul kernel-firmware atau kernel-firmware-brcm (tergantung apakah Anda menggunakan Leap atau Tumbleweed). Maka pasang paket tersebut.
  • glibc-locale atau glibc-locale-base. Ini adalah paket locale. Untuk menghilangkan peringatan -bash: warning: setlocale: LC_BLABLA: cannot change locale (BLABLA): No such file or directory saat masuk mode CLI yang dibahas di tulisan minimal/custom install openSUSE dan peringatan Failed to set local. Fix your system. saat menjalankan perintah snapper yang dibahas di tulisan membuat fitur factory reset. Jika Anda akan menggunakan bahasa selain Inggris (US), pasang glibc-locale. Tapi jika Anda hanya akan menggunakan bahasa Inggris standar sistem, cukup pasang glibc-locale-base. Jika Anda memilih memasang glibc-locale-base tapi lebih suka format 24 jam daripada AM/PM dan/atau lebih suka format tanggal bulan tahun daripada bulan tanggal tahun, Anda bisa mengubah bahasa dari en_US.UTF-8 ke C.UTF-8 dengan perintah su -c "localectl set-locale LANG=C.UTF-8".
  • ca-certificates-mozilla. Untuk mengakses jaringan aman, termasuk repositori https.
  • deltarpm. Jika menggunakan openSUSE Leap. Supaya ukuran file yang diunduh ketika update lebih kecil.
  • btrfsmaintenance. Jika menggunakan Btrfs, untuk scrub, balance dan trim otomatis dalam jangka waktu tertentu.
  • alsa-plugins-pulse. Tanpa ini PulseAudio tidak bisa memutar suara dari lebih dari satu sumber secara bersamaan.
  • usb_modeswitch, ModemManager dan mobile-broadband-provider-info. Jika Anda menggunakan modem mobile broadband (operator selular atau sejenisnya). Bisa juga ditambahkan modem-manager-gui jika perlu.
  • kdeconnect-kde. Untuk menghubungkan komputer dengan smartphone Android dan perangkat lain. Jangan lupa untuk memasang openssh untuk bisa membuka tempat penyimpanan Android dari Dolphin.
  • kio-extras5. Komponen tambahan KIO. Salah satu fungsinya supaya bisa menampilkan preview file di File Manager Dolphin atau Konqueror.
  • ffmpegthumbs. Untuk menampilkan preview file video.
  • libqt5-qtimageformats. Beberapa format gambar, seperti .webp, tidak bisa dibuka di Gwenview tanpa paket ini.
  • xdg-desktop-portal-kde. Supaya open/save dialog jadi serasi di aplikasi non KDE.
  • upower. Untuk manajemen daya yang nantinya bisa diatur dari System Settings.
  • tlp-rdw. Otomatis membawa paket tlp sebagai dependensi. Untuk manajemen daya.
  • smartmontools. Monitor perangkat SMART (Self-Monitoring, Analysis and Reporting Technology System).
  • grub2-branding-openSUSE. Jika ingin menu Grub bling-bling. Tanpa paket ini tampilan Grub hanya layar hitam dengan tulisan putih.
  • grub2-snapper-plugin. Supaya bisa boot ke read-only snapshot melalui menu Grub.
  • plymouth. Jika ingin layar booting bling-bling. Tanpa ini, saat booting hanya layar hitam.
  • command-not-found. Untuk mempermudah mencari paket yang harus dipasang. Ketika kita menjalankan suatu perintah mendapat respon bash: command not found, cara termudah mencari paket yang harus dipasang adalah dengan perintah cnf <perintah> lewat paket ini.
  • udisks2. Untuk mempermudah mounting perangkat internal atau eksternal (seperti flashdisk) dari File Manager Dolphin.
  • ntfs-3g. Jika ada partisi dengan filesystem NTFS.
  • man. Untuk membaca Manual.
  • xdg-utils. Perintah xdg-open, xdg-su dan beberapa perintah xdg-<sesuatu> lainnya ada di paket ini.
  • xdg-user-dirs. Untuk manajemen direktori standar (seperti Documents, Music, Videos, dll) di $HOME.
  • fonts-config. Setelan antialiasing, hinting, mengatur default fonts Sans, Serif dan Monospace diatur lewat paket ini. Pengaturannya ada di /etc/sysconfig/fonts-config. Setelah mengubah isi dari file tersebut, jalankan su -c "fonts-config".
  • Font pelengkap. Bisa coba dengan noto*fonts atau google*fonts. Tanda * supaya semua paket dengan awalan noto atau google dan akhiran fonts ikut dipilih untuk dipasang.
  • plasma5-addons. Tambahan koleksi Widget Plasma.
  • vim atau nano. Jika butuh teks editor CLI.
  • sudo. Untuk mengganti su -c "perintah" dengan sudo perintah, jika Anda lebih terbiasa atau lebih nyaman dengan sudo.
  • Modul-modul YaST. Cari dengan perintah zypper search yast. Pasang sesuai dengan kebutuhan. Jangan lupa untuk memasang libyui-qt-pkg* dan/atau libyui-ncurses-pkg* jika tidak otomatis ikut terpasang. Ganti * dengan nomor yang sesuai dengan hasil pencarian menggunakan zypper search libyui. Setelah memasang YaST, jangan lupa untuk mengubah parameter USE_SNAPPER di /etc/sysconfig/yast2 menjadi no dengan perintah su -c "sed -i 's/USE_SNAPPER=\"yes/USE_SNAPPER=\"no/' /etc/sysconfig/yast2". Karena jika tidak diubah, YaST akan membuat Snapshot di konfigurasi root setiap kali kita membuka modul YaST yang akan membuat nomor Snapshot menjadi tidak serasi antara konfigurasi root dengan konfigurasi lainnya.
  • Dan lain-lain. Silakan cari dengan perintah zypper search <keyword> jika ada paket yang dibutuhkan yang ada dalam installer.

Setelah semua paket yang dibutuhkan yang ada dalam installer dipasang, cabut/keluarkan piringan DVD atau flashdisk installer. Lalu matikan kembali repositori installer tersebut:

su -c "zypper modifyrepo -dl"

Hidupkan kembali repo-oss, repo-non-oss, repo-update dan repo-update-non-oss. Untuk repo-update-non-oss ini hanya ada di Leap, sedangkan di Tumbleweed tidak ada:

su -c "zypper modifyrepo -e repo-oss repo-non-oss repo-update repo-update-non-oss"

Tambahkan repositori Packman

Setelah selesai dengan semua proses instalasi paket dari installer, jalankan ulang (reboot) komputer, lalu hubungkan ke internet. Lanjutkan dengan menambahkan repositori Packman.

Untuk openSUSE Leap 15.2 (untuk Leap selain 15.2, sesuaikan angka versinya):

su -c "zypper addrepo --name 'Packman Repository' https://repo.opensuse.id/packman/openSUSE_Leap_15.2/ repo-packman"

Untuk openSUSE Tumbleweed:

su -c "zypper addrepo --name 'openSUSE-Tumbleweed-Packman' https://repo.opensuse.id/packman/openSUSE_Tumbleweed/ repo-packman"

Nama setelah opsi --name silakan ubah sesuai keinginan supaya mudah diingat atau supaya cocok dengan penamaan repositori lainnya. Untuk melihat daftar repositori, gunakan perintah zypper repos.

Jika tidak mau repositori otomatis melakukan refresh, tambahkan opsi --no-refresh. Untuk melakukan refresh secara manual, jalankan perintah su -c "zypper refresh".

Jika ingin paket yang diinstall tidak otomatis terhapus setelah paket terpasang, tambahkan opsi --keep-packages. Semua file paket ada di /var/cache/zypp/packages.

Untuk opsi-opsi lainnya silakan jalankan perintah zypper help addrepo.

Setelah repositori Packman ditambahkan, update paket ke repositori tersebut:

su -c "zypper dup --from repo-packman"

Setelah selesai, coba VLC untuk memainkan berbagai format audio/video. Seharusnya proses ini sudah cukup untuk menjalankan berbagai format standar audio/video, seperti .mp3 atau .mp4, tanpa harus memasang lagi codec khusus.

Pasang paket lain yang tidak tersedia di installer

Paket-paket yang mungkin perlu ditambahkan:

  • opi. Untuk memasang paket dari OBS. Pastikan untuk memasang sudo juga jika memasang paket ini. Cara mencari dan memasang paket dari OBS dengan opi adalah dengan perintah opi <keyword>, lalu ikuti petunjuknya.
  • falkon. Jika tidak suka dengan Firefox.
  • mpv. Jika Anda menganggap VLC terlalu bloated atau terlalu overkill.
  • elisa atau clementine. Jika ingin memisahkan player musik dengan player video. Jangan lupa untuk memasang gstreamer-plugins-libav, gstreamer-plugins-good, gstreamer-plugins-bad dan gstreamer-plugins-ugly jika Anda memasang clementine, jika paket-paket tersebut tidak otomatis ikut terpasang sebagai dependensi.
  • Dan lain-lain. Silakan cari dengan perintah zypper search <keyword> jika ada paket yang dibutuhkan yang tidak ada di dalam installer.

Untuk pengguna Desktop Environment atau Window Manager lain

Jika Anda ingin menggunakan Desktop Environment atau Window Manager lain, buat semua paket yang ada di sini sebagai acuan dan ganti dengan alternatif di Desktop Environment/Window Manager yang Anda gunakan. Misalnya ganti dolphin dengan nautilus atau thunar dan seterusnya.

Untuk pengguna Plasma 5 pun tidak perlu mengikuti daftar ini, karena saya juga tidak memasang semua yang ada di sini. Anda bisa bereksperimen dengan mengurangi atau menambahkan paket lainnya sesuai kebutuhan. Jika ada yang salah atau dirasa kurang pas, lakukan factory reset dan mulai lagi dari awal sampai menemukan setelan yang pas dengan selera pribadi. “No pain, no gain.”

Jika ada paket penting yang tidak tercantum di sini, kabari saya.


Tulisan ini dapat dibaca juga di: https://kikisyahadat.github.io/2020/09/07/minimal-custom-install-kde.html

the avatar of YaST Team

Digest of YaST Development Sprint 107

The last two weeks of August the YaST team has kept the same modus operandi than the rest of the month, focusing on fixing bugs and polishing several internal aspects. But we also found some time to start working on some mid-term goals in the area of AutoYaST and storage management. Find below a summary of the most interesting stuff addressed during the sprint finished a week ago (sorry for the delay).

Although it doesn’t look like too much, the bright side is that we are already deep into the next sprint. So you will not have to wait much to have more news from us. Meanwhile, stay safe and fun!

the avatar of Klaas Freitag

Screensharing with MS Teams and KDE: Black Screen

In the day job we use Microsoft Teams. The good news is that it is running on the Linux Desktop, and specifically KDE. So far, so good, however, there was a problem with screensharing for me.

Whenever I tried to share my KDE screen, the screen became black, surrounded with a red rectangle as indicator for the shared area. The people who I shared with also just saw the black area, and also the mouse pointer as me.

The problem is described in a bugreport and there are two ways of solving it:

  1. Enable compositing: The red indicator rectangle requires that the window manager supports compositing. KWin can of course do that, and with that enabled, sharing works fine including the red rectangle.
  2. If compositing can or should not be used there is another workaround: As the bug report shows, renaming the file /usr/share/teams/resources/app.asar.unpacked/node_modules/slimcore/bin/rect-overlay so that it is not used by teams fixes it as well. Obviously you wont have the red rectangle with this solution.

That said, it is of course preferable to use an open source alternative to Teams to help these evolve.

the avatar of Duncan Mac-Vicar

Raspberry Pi cluster with k3s & Salt (Part 1)

I have been running some workloads on Raspberry Pi’s / Leap for some time. I manage them using salt-ssh along with a Pine64 running OpenBSD. You can read more about using Salt this way in my Using Salt like Ansible post.

rpi-cluster-small.jpg

The workloads ran on containers, which were managed with systemd and podman. Salt managed the systemd service files on /etc/systemd, which start, monitor and stops the containers. For example, the homeassistant.sls state, managed the service file for mosquitto:

homeassistant.mosquito.deploy:
  file.managed:
    - name: /root/config/eclipse-mosquitto/mosquitto.conf
    - source: salt://homeassistant/files/mosquitto/mosquitto.conf

homeassistant.eclipse-mosquitto.container.service:
  file.managed:
    - name: /etc/systemd/system/eclipse-mosquitto.service
    - contents: |
	[Unit]
	Description=%N Podman Container
	After=network.target

	[Service]
	Type=simple
	TimeoutStartSec=5m
	ExecStartPre=-/usr/bin/podman rm -f "%N"
	ExecStart=/usr/bin/podman run -ti --rm --name="%N" -p 1883:1883 -p 9001:9001 -v /root/config/eclipse-mosquitto:/mosquitto/config -v /etc/localtime:/etc/localtime:ro --net=host docker.io/library/eclipse-mosquitto
	ExecReload=-/usr/bin/podman stop "%N"
	ExecReload=-/usr/bin/podman rm "%N"
	ExecStop=-/usr/bin/podman stop "%N"
	Restart=on-failure
	RestartSec=30

	[Install]
	WantedBy=multi-user.target
  service.running:
    - name: eclipse-mosquitto
    - enable: True
    - require:
      - pkg: homeassistant.podman.pkgs
      - file: /etc/systemd/system/eclipse-mosquitto.service
      - file: /root/config/eclipse-mosquitto/mosquitto.conf
    - watch:
      - file: /root/config/eclipse-mosquitto/mosquitto.conf

The Salt state also made sure the right packages and other details where ready before the service was started.

This was very simple and worked well so far. One disadvantage is that the workloads are tied to a particular Pi. I was not going to make the setup more complex by building my own orchestrator.

Another disadvantage is that I was pulling the containers into the SD card. I was not hoping for a long life of these. After it died, I took it as a good opportunity to re-do this setup.

My long term goal would be to netboot the Pi’s, and have the storage mounted. I am not very familiar with all the procedure, so I will go step by step.

I decided for the the initial iteration:

  • k3s (Lightweight Kubernetes) on the Pi’s
  • The k3s server to use a USB disks/SSDs with btrfs as storage
  • The worker nodes to /var/lib/rancher/k3s from USB storage
  • Applying the states over almost stock Leap 15.2 images should result in a working cluster

All the above managed with salt-ssh tree on a git repository just like I was used to

k3s installation

We start by creating k3s/init.sls. For the k3s state I defined a minimal pillar defining the server and the shared token:

k3s:
  token: xxxxxxxxx
  server: rpi03

The first part of the k3s state ensures cgroups are configured correctly and disables swap:

k3s.boot.cmdline:
  file.managed:
    - name: /boot/cmdline.txt
    - contents: |
	cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

k3s.disable.swap:
  cmd.run:
    - name: swapoff -a
    - onlyif:  swapon --noheadings --show=name,type | grep .

As the goal was to avoid using the SD card, the next state makes sure /var/lib/rancher/k3s is a mount. I have to admit I wasted quite some time getting right the state for the storage mount. Using mount.mounted did not work because it is buggy and took different btrfs subvolume mounts from the same device as the same mount.

k3s.volume.mount:
  mount.mounted:
    - name: /var/lib/rancher/k3s
    - device: /dev/sda1
    - mkmnt: True
    - fstype: btrfs
    - persist: False
    - opts: "subvol=/@k3s"

I resorted then to write my own state. I discovered the awesome findmnt command, and my workaround looked like:

k3s.volume.mount:
  cmd.run:
    - name: mount -t btrfs -o subvol=/@{{ grains['id'] }}-data /dev/sda1 /data
    - unless: findmnt --mountpoint /data --noheadings | grep '/dev/sda1[/@k3s]'
    - require:
	- file: k3s.volume.mntpoint

This turned later to be a pain, as the k3s installer started k3s without caring much if this volume was mounted or not. Then I remembered: systemd does exactly that. It manages mount and dependencies. This simplified the mount state to:

k3s.volume.mount:
  file.managed:
    - name: /etc/systemd/system/var-lib-rancher-k3s.mount
    - contents : |
	[Unit]

	[Install]
	RequiredBy=k3s
	RequiredBy=k3s-agent

	[Mount]
	What=/dev/sda1
	Where=/var/lib/rancher/k3s
	Options=subvol=/@k3s
	Type=btrfs
  cmd.run:
    - name: systemctl daemon-reload
    - onchanges:
	- file: k3s.volume.mount
  service.running:
    - name: var-lib-rancher-k3s.mount

The k3s state works as follows: it runs the installation script in server or agent mode depending if the pillar k3s:server entry matches with the node where the state is applied.

{%- set k3s_server = salt['pillar.get']('k3s:server') -%}
{%- if grains['id'] == k3s_server %}
{%- set k3s_role = 'server' -%}
{%- set k3s_suffix = "" -%}
{%- else %}
{%- set k3s_role = 'agent' -%}
{%- set k3s_suffix = '-agent' -%}
{%- endif %}

k3s.{{ k3s_role }}.install:
  cmd.run:
    - name: curl -sfL https://get.k3s.io | sh -s -
    - env:
	- INSTALL_K3S_TYPE: {{ k3s_role }}
{%- if k3s_role == 'agent' %}
	- K3S_URL: "https://{{ k3s_server }}:6443"
{%- endif %}
	- INSTALL_K3S_SKIP_ENABLE: "true"
	- INSTALL_K3S_SKIP_START: "true"
	- K3S_TOKEN: {{ salt['pillar.get']('k3s:token', {}) }}
    - unless:
	# Run install on these failed conditions
	# No binary
	- ls /usr/local/bin/k3s
	# Token changed/missing
	- grep '{{ salt['pillar.get']('k3s:token', {}) }}' /etc/systemd/system/k3s{{ k3s_suffix }}.service.env
	# Changed/missing server
{%- if k3s_role == 'agent' %}
	- grep 'K3S_URL=https://{{ k3s_server }}:6443' /etc/systemd/system/k3s{{ k3s_suffix }}.service.env
{%- endif %}
    - require:
	- service: k3s.volume.mount
	- service: k3s.kubelet.volume.mount

k3s.{{ k3s_role }}.running:
  service.running:
    - name: k3s{{ k3s_suffix }}
    - enable: True
    - require:
      - cmd: k3s.{{ k3s_role }}.install

Workloads

The next step is to move workloads like homeassistant into this setup.

k3s allows to automatically deploy manifests located in /var/lib/rancher/server/manifests. We can deploy eg. mosquitto like the following:

homeassistant.mosquitto:
  file.managed:
    - name: /var/lib/rancher/k3s/server/manifests/mosquitto.yml
    - source: salt://homeassistant/files/mosquitto.yml
    - require:
      - k3s.volume.mount

With mosquito.yml being:

---
apiVersion: v1
kind: Namespace
metadata:
  name: homeassistant
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mosquitto
  namespace: homeassistant
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mosquitto
  template:
    metadata:
      labels:
	app: mosquitto
    spec:
      containers:
	- name: mosquitto
	  image: docker.io/library/eclipse-mosquitto
	  resources:
	    requests:
	      memory: "64Mi"
	      cpu: "100m"
	    limits:
	      memory: "128Mi"
	      cpu: "500m"
	  ports:
	  - containerPort: 1883
	  imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: mosquitto
  namespace: homeassistant
spec:
  ports:
  - name: mqtt
    port: 1883
    targetPort: 1883
    protocol: TCP
  selector:
    app: mosquitto

Homeassistant is no different, except that we use a ConfigMap resource to store the configuration and define an Ingress resource to access it from the LAN:

---
apiVersion: v1
kind: Namespace
metadata:
  name: homeassistant
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: homeassistant-config
  namespace: homeassistant
data:
  configuration.yaml: |
    homeassistant:
      auth_providers:
	- type: homeassistant
	- type: trusted_networks
	  trusted_networks:
	    - 192.168.178.0/24
	    - 10.0.0.0/8
	    - fd00::/8
	  allow_bypass_login: true
      name: Home
      latitude: xx.xxxx
      longitude: xx.xxxx
      elevation: xxx
      unit_system: metric
      time_zone: Europe/Berlin
    frontend:
    config:
    http:
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: homeassistant
  namespace: homeassistant
spec:
  replicas: 1
  selector:
    matchLabels:
      app: homeassistant
  template:
    metadata:
      labels:
	app: homeassistant
    spec:
      containers:
	- name: homeassistant
	  image: homeassistant/raspberrypi3-64-homeassistant:stable
	  volumeMounts:
	    - name: config-volume-configuration
	      mountPath: /config/configuration.yaml
	      subPath: configuration.yaml
	  livenessProbe:
	    httpGet:
	      scheme: HTTP
	      path: /
	      port: 8123
	    initialDelaySeconds: 30
	    timeoutSeconds: 30
	  resources:
	    requests:
	      memory: "512Mi"
	      cpu: "100m"
	    limits:
	      memory: "1024Mi"
	      cpu: "500m"
	  ports:
	    - containerPort: 8123
	      protocol: TCP
	  imagePullPolicy: Always
      volumes:
	- name: config-volume-configuration
	  configMap:
	    name: homeassistant-config
	    items:
	    - key: configuration.yaml
	      path: configuration.yaml
---
apiVersion: v1
kind: Service
metadata:
  name: homeassistant
  namespace: homeassistant
spec:
  selector:
    app: homeassistant
  ports:
    - port: 8123
      targetPort: 8123
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: homeassistant
  namespace: homeassistant
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefixStrip
spec:
  rules:
  - host: homeassistant.int.mydomain.com
    http:
      paths:
      - path: /
	backend:
	  serviceName: homeassistant
	  servicePort: 8123

Setting up Ingress was the most time consuming part. It took me a while to figure out how it was supposed to work, and customizing the Treafik Helm chart is not intuitive to me. While homeassistant was more straightforward as it is a simple HTTP behind SSL proxy service, the Kubernetes dashboard is already deployed with SSL inside the cluster. I am still figuring out how ingress.kubernetes.io/protocol: https, traefik.ingress.kubernetes.io/pass-tls-cert: "true" (oh, don’t forget the quotes!) or insecureSkipVerify work toghether and what is the best way to expose it to the LAN.

In a future post, I will describe the dashboards setup, and other improvements.

a silhouette of a person's head and shoulders, used as a default avatar

Reasons to hire inexperienced engineers

There are many reasons to consider hiring inexperienced software engineers into your team, beyond the commonly discussed factors of cost and social responsibility.

Hire to maximise team effectiveness; not to maximise team size. Adding more people increases the communication and synchronisation overhead in the team. Growing a team has rapidly diminishing returns.

However, adding the right people, perspectives, skills, and knowledge into a team can transform that team’s impact. Instantly unblocking problems that would have taken days of research. Resolving debates that would have paralysed. The right balance between planning and action.

It’s easy to undervalue inexperienced software engineers as part of a healthy team mix. While teams made up of entirely senior software engineers can be highly effective. There are many benefits beyond cost and social responsibility for hiring entry level and junior software engineers onto your team.

Fresh Perspectives

Experienced engineers have learned lots of so called “best practices” or dogma. Mostly these are good habits that are safer ways of working, save time, and aid learning. On the other hand sometimes the context has changed and these practices are no longer useful, but we carry on doing them anyway out of habit. Sometimes there’s a better way, now that tech has moved on, and we haven’t even stopped to consider.

There’s a lot of value in having people on the team who’ve yet to develop the same biases. People who’ll force you to think through and articulate why you do the things you’ve come to take for granted. The reflection may help you spot a better way.

To take advantage you need sufficient psychological safety that anyone can ask a question without fear of ridicule. This also benefits everyone.

Incentive for Simplicity and Safety

A team of experienced engineers may be able to tolerate a certain amount of accidental code complexity. Their expertise may enable them to work relatively safely without good test safety nets and gaps in their monitoring. I’m sure you know better ;)

Needing to make our code simple enough to understand for a new software engineer to be able to understand and change it exerts positive pressure on our code quality.

Having to make it safe to fail. Protecting everyone on the team from being able to make a change that takes down production or corrupts data helps us all. We’re all human.

Don’t have any junior engineers? What would you do differently if you knew someone new to programming was joining your team next week? Which of those things should you be doing anyway? How many would pay back their investment even with experienced engineers? How much risk and complexity are you tolerating? What’s its cost?

Growth opportunity for others

Teaching, advising, mentoring, coaching less experienced people on the team can be a good development opportunity for others. Teaching helps deepen your own understanding of a topic. Practising your ability to lift others up will serve you well.

Level up fast

It can be humbling how swiftly new developers can get up to speed and become highly productive. Particularly in an environment that really values learning. Pair programming can be a tremendous accelerator for learning through doing. True pairing, i.e. solving problems together, rather than spoonfeeding or observing.

Tenure

Amount of software engineering experience is one indicator for the impact an individual can have. Amount of experience within your organisation is also relevant. If you only hire senior people and your org is not growing fast enough to provide them with further career development opportunities they are more likely to leave to find growth opportunities. It can be easier to find growth opportunities for people earlier in their career.

A mix of seniorities can help increase the average tenure of developers in your organisation—assuming you will indeed support them with their career development.

Action over Analysis

Junior engineers often bring a healthy bias towards getting on with doing things over excessive analysis. Senior engineers sometimes get stuck evaluating foreseen possibilities, finding “the best tool for the job”, or debating minutiae ad nauseam. Balancing the desires to do the right things right, with the desire to do something, anything quickly on a team can be transformational.

Hire Faster

There’s more inexperienced people. It’s quicker to find people if we relax our experience and skill requirements. Some underrepresented minorities may be less underrepresented at more junior levels.

The inexperienced engineer you hire today could be the senior engineer you need in years to come.

To ponder

What other reasons have I missed? In what contexts is the opposite true? When would you only hire senior engineers?

The post Reasons to hire inexperienced engineers appeared first on Benji's Blog.