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
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:
- https://victorhckinthefreeworld.com/tag/vim/
- https://victorhck.gitlab.io/comandos_vim/articulos.html
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
- https://github.com/iggredible/Learn-Vim
- https://github.com/victorhck/learn-Vim-es
- https://victorhckinthefreeworld.com/tag/vim/
- https://victorhck.gitlab.io/comandos_vim

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

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.

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:
- Blog: http://rooteando.com/
- Telegram: https://t.me/JoseAJimenez
- Twitter: https://twitter.com/RooteandoBlog
Canales de Telegram:
- Un día una aplicación: https://t.me/UnDiaUnaAplicacion
- Un Python al día: https://t.me/UnPythonAlDia
- Entrevista en Diferido: https://t.me/entrevistaendiferido
- Formadores en tiempos revueltos: https://t.me/Foentire
- Podcast Tomando un café: https://t.me/TomandoUnCafe
- Podcast ARM para todos: https://t.me/ARMparaTodos
- Podcast Aviones de papel: https://t.me/avionesdepapel
- Boletín de noticias: https://tinyletter.com/jajt
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
- Twitter: https://twitter.com/podcastlinux
- Mastodon: https://mastodon.social/@podcastlinux/
- Correo: podcastlinux@disroot.org
- Web: https://podcastlinux.com/
- Telegram: https://t.me/podcastlinux
- Telegram Juan Febles: https://t.me/juanfebles
- Youtube: https://www.youtube.com/PodcastLinux
- Feed Podcast Linux: https://podcastlinux.com/feed
- Feed Linux Express (Audios Telegram): https://podcastlinux.com/Linux-Express/feed
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.

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.

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€.

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)

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!
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.

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.

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.

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.

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.
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-sessionatauplasma5-session-wayland: Desktop Environment. Perbedaan dari kedua paket tersebut adalah, jika memasangplasma5-session-waylandakan ikut membawaplasma5-sessionsebagai dependensi, tapi tidak sebaliknya. Jika memasangplasma5-sessionkita hanya bisa login ke sesi X11 saja, tapiplasma5-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 parameterDISPLAYMANAGER_AUTOLOGINdi /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-firmwareatau di Tumbleweed adakernel-firmware-<perangkat>. Paket ini tergantung pada hardware yang digunakan. Jika ada hardware yang membutuhkankernel-firmwarebiasanya saat booting muncul peringatan sepertifail to load firmware brcm/bcm43xx-0.fw(ini yang muncul di laptop saya), atau bisa juga diperiksa dengan perintahdmesg | grep -i 'firmware'. Dari peringatan tersebut kita bisa menentukan firmware apa yang dibutuhkan dengan perintahzypper search --provides bcm43xx-0.fw. Dari hasil perintah tersebut akan munculkernel-firmwareataukernel-firmware-brcm(tergantung apakah Anda menggunakan Leap atau Tumbleweed). Maka pasang paket tersebut. -
glibc-localeatauglibc-locale-base. Ini adalah paket locale. Untuk menghilangkan peringatan-bash: warning: setlocale: LC_BLABLA: cannot change locale (BLABLA): No such file or directorysaat masuk mode CLI yang dibahas di tulisan minimal/custom install openSUSE dan peringatanFailed to set local. Fix your system.saat menjalankan perintahsnapperyang dibahas di tulisan membuat fitur factory reset. Jika Anda akan menggunakan bahasa selain Inggris (US), pasangglibc-locale. Tapi jika Anda hanya akan menggunakan bahasa Inggris standar sistem, cukup pasangglibc-locale-base. Jika Anda memilih memasangglibc-locale-basetapi lebih suka format 24 jam daripada AM/PM dan/atau lebih suka format tanggal bulan tahun daripada bulan tanggal tahun, Anda bisa mengubah bahasa darien_US.UTF-8keC.UTF-8dengan perintahsu -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,ModemManagerdanmobile-broadband-provider-info. Jika Anda menggunakan modem mobile broadband (operator selular atau sejenisnya). Bisa juga ditambahkanmodem-manager-guijika perlu. -
kdeconnect-kde. Untuk menghubungkan komputer dengan smartphone Android dan perangkat lain. Jangan lupa untuk memasangopensshuntuk 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 pakettlpsebagai 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 responbash: command not found, cara termudah mencari paket yang harus dipasang adalah dengan perintahcnf <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. Perintahxdg-open,xdg-sudan beberapa perintahxdg-<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, jalankansu -c "fonts-config". - Font pelengkap. Bisa coba dengan
noto*fontsataugoogle*fonts. Tanda*supaya semua paket dengan awalannotoataugoogledan akhiranfontsikut dipilih untuk dipasang. -
plasma5-addons. Tambahan koleksi Widget Plasma. -
vimataunano. Jika butuh teks editor CLI. -
sudo. Untuk menggantisu -c "perintah"dengansudo perintah, jika Anda lebih terbiasa atau lebih nyaman dengansudo. - Modul-modul YaST. Cari dengan perintah
zypper search yast. Pasang sesuai dengan kebutuhan. Jangan lupa untuk memasanglibyui-qt-pkg*dan/ataulibyui-ncurses-pkg*jika tidak otomatis ikut terpasang. Ganti*dengan nomor yang sesuai dengan hasil pencarian menggunakanzypper search libyui. Setelah memasang YaST, jangan lupa untuk mengubah parameterUSE_SNAPPERdi /etc/sysconfig/yast2 menjadinodengan perintahsu -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 memasangsudojuga jika memasang paket ini. Cara mencari dan memasang paket dari OBS denganopiadalah dengan perintahopi <keyword>, lalu ikuti petunjuknya. -
falkon. Jika tidak suka dengan Firefox. -
mpv. Jika Anda menganggap VLC terlalu bloated atau terlalu overkill. -
elisaatauclementine. Jika ingin memisahkan player musik dengan player video. Jangan lupa untuk memasanggstreamer-plugins-libav,gstreamer-plugins-good,gstreamer-plugins-baddangstreamer-plugins-uglyjika Anda memasangclementine, 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
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).
- Making the AutoYaST profiles more flexible by means of Embedded Ruby (ERB). That’s still a work in progress and we will publish a separate blog post with more details and examples soon.
- When reporting errors in a certain element of an AutoYaST profile to the user, do it with the same syntax that is used when specifying ask-lists.
- Preliminary version of a menu bar for the Partitioner. Again, this is still in progress, so stay tuned for more news.
- Better handling of corrupted or completely incorrect AutoYaST profiles.
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!
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:
- 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.
- 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-overlayso 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.
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.
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.
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.