Skip to main content

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

Mejoras en openSUSE Leap-15.1 3a. parte





Mejoras en openSUSE 15.1 - Leap (3a. parte)



OpenStack

Leap 15.1 tiene varios paquetes OpenStack para que los administradores puedan controlar grandes grupos de recursos de computación, almacenamiento y redes.

El paquete openstack-utils es una utilidad para ayudar en la configuración y configuración de los paquetes OpenStack.

openstack-config - Manipula los archivos ini de openstack
openstack-db: configura o elimina la base de datos para un servicio específico
openstack-demo-install: configure todos los servicios en un solo nodo para realizar pruebas
openstack-status: proporciona una descripción general del estado de los servicios instalados

Las macros de OpenStack RPM son necesarias para crear paquetes de OpenStack y los paquetes como las extracciones de openstack-suse en otros paquetes de utilidad que son principalmente útiles para el empaquetado de OpenStack. Algunos incluso se usan solo en tiempo de construcción.

Sistema de impresión

Leap 15.1 tiene CUPS 2.2.7. CUPS es un sistema de impresión modular que permite que una computadora actúe como un servidor de impresión. Una computadora que ejecuta CUPS es un host que puede aceptar trabajos de impresión de las computadoras cliente, procesarlos y enviarlos a la impresora adecuada. CUPS consta de una cola de impresión y un programador, un sistema de filtro que convierte los datos de impresión a un formato que la impresora entenderá y un sistema back-end que envía estos datos al dispositivo de impresión. CUPS utiliza el Protocolo de impresión de Internet (IPP) como la base para administrar los trabajos de impresión y las colas. También proporciona las interfaces de línea de comando tradicionales para los sistemas de impresión System V y Berkeley, y brinda soporte para el protocolo Line Printer Daemon de Berkeley y soporte limitado para el protocolo de bloque de mensajes del servidor (SMB). CUPS viene con una interfaz basada en web incorporada.

Contenedores

Leap 15.1 está repleto de varias tecnologías de contenerización como Singularity, que brindan contenedores y reproducibilidad a la computación científica y al mundo de la computación de alto rendimiento (HPC). Singularity apareció por primera vez en la distribución Leap en Leap 42.3 y proporciona funcionalidad para construir contenedores mínimos más pequeños y ejecuta los contenedores como entornos de aplicación única. Otro paquete oficial en Leap 15.1 es libcontainers-common, que permite la configuración de archivos y páginas de manual compartidas por herramientas basadas en las bibliotecas github.com/containers, como Buildah, CRI-O, Podman y Skopeo.


openSUSE Leap 15.1 - 1a. parte

openSUSE Leap 15.1 - 2a. parte

openSUSE Leap 15.1 - 4a. parte

openSUSE Leap 15.1 - 5a. parte

openSUSE Leap 15.1 - 6a. parte

openSUSE Leap 15.1 - 7a. parte

openSUSE Leap 15.1 - 8a. parte


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

Mejoras en openSUSE Leap-15.1 2a. parte




Mejoras en openSUSE Leap-15.1-2a.parte

systemd

Leap 15.1 tiene la versión systemd 234. Esta es la misma versión que estaba en Leap 15.0. La siguiente información pertenece a la versión 234:

Se ha agregado soporte para la creación dinámica de usuarios durante la vida útil de un servicio. Si se especifica DynamicUser = yes, las ID de usuario y grupo se asignarán desde el rango 61184..65519 durante la vida útil del servicio. Se pueden resolver utilizando el nuevo módulo NSS nss-systemd.so. El módulo debe estar habilitado en /etc/nsswitch.conf. Los servicios que se inician de esta manera tienen PrivateTmp = y RemoveIPC = habilitados, de modo que todos los recursos asignados por el servicio se eliminarán cuando finalice el servicio. También tienen ProtectHome = solo lectura y ProtectSystem = estricto habilitado, por lo que no pueden realizar modificaciones permanentes en el sistema.

MemoryLimit = y la configuración de la unidad relacionada ahora opcionalmente tienen especificaciones de porcentaje. El porcentaje se toma en relación con la cantidad de memoria física en el sistema (o, en el caso de los contenedores, la cantidad de memoria asignada). Esto permite escalar los recursos del servicio cuidadosamente con la cantidad de RAM disponible en el sistema. De manera similar, la opción RuntimeDirectorySize = de systemd-logind ahora también tiene valores de porcentaje opcionalmente.

De manera similar, TasksMax = también toma valores de porcentaje ahora. El valor se toma en relación con el número máximo configurado de procesos en el sistema. El máximo de tareas por servicio se ha cambiado al 15% con esta funcionalidad. (Efectivamente, esto es un aumento de 512 → 4915 para las unidades de servicio, dada la configuración pid_max predeterminada del kernel).

La configuración del archivo de la unidad SystemCallFilter = obtuvo soporte para conjuntos de filtros de llamadas del sistema predefinidos y nombrados. Por ejemplo, SystemCallFilter = @ clock es ahora una forma efectiva de hacer que todas las llamadas del sistema relacionadas con el cambio de reloj no estén disponibles para un servicio. Se definen una serie de grupos predefinidos similares. Escribir filtros de llamadas al sistema para servicios del sistema se simplifica sustancialmente con este nuevo concepto. En consecuencia, todos los servicios de larga duración propios de systemd ahora habilitan el filtrado de llamadas al sistema basado en esto, de forma predeterminada.

Se ha agregado una nueva configuración de servicio MemoryDenyWriteExecute =, tomando un valor booleano. Si está activado, un servicio ya no puede crear asignaciones de memoria que se puedan escribir y ejecutar al mismo tiempo. Esto mejora la seguridad de los servicios donde está habilitado, ya que se vuelve más difícil escribir dinámicamente y luego ejecutar la memoria en los procesos de servicio explotados. Esta opción se ha habilitado para todos los servicios de larga duración propios de systemd. 
 
La jerarquía de cgroup unificada agregada en Linux 4.5 ahora es compatible. Usamos systemd.unified_cgroup_hierarchy = 1 en la línea de comando del kernel para habilitar. Además, se ha agregado la compatibilidad con el controlador cgroup "io" en la jerarquía unificada, de modo que la "memoria", "pids" y "io" son ahora los controladores que son compatibles con la jerarquía unificada.

Se ha agregado un nuevo comando "systemctl revert" que se puede usar para revertir a la versión del proveedor de un archivo de unidad, en caso de que se hayan realizado cambios locales agregando entradas o anulando el archivo de unidad.

PHP 7


PHP7 es un lenguaje de secuencias de comandos incrustado HTML del lado del servidor diseñado principalmente para el desarrollo web, pero también se usa como un lenguaje de programación de propósito general. La versión 7.2.5 que se encuentra en Leap 15.1 y 15.0 incluye la implementación estándar de PHP, Zend PHP. Se incluyen el binario de línea de comandos de PHP y el archivo de configuración (php.ini). Este paquete debe estar instalado para poder utilizar PHP. Además, se pueden instalar módulos de extensión y módulos de servidor (por ejemplo, para Apache). Documentación adicional está disponible en el paquete php-doc.

openSUSE Leap 15.1 - 1a. parte

openSUSE Leap 15.1 - 3a. parte

openSUSE Leap 15.1 - 4a. parte

openSUSE Leap 15.1 - 5a. parte

openSUSE Leap 15.1 - 6a. parte

openSUSE Leap 15.1 - 7a. parte

openSUSE Leap 15.1 - 8a. parte

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

Mejoras en openSUSE Leap 15.1 1a. parte





Mejoras en openSUSE 15.1 - Leap (1a. parte)

 
Las siguientes lineas contienen algunos detalles sobre las novedades de esta versión de openSUSE. ¿Demasiada información? Esta es sólo la 1a. parte de la información que tenemos sobre openSUSE Leap 15.1. Echa un vistazo a las características destacadas.

Sistema operativo base

Kernel de linux


 Leap 15.1 utilizará el kernel de Linux 4.12. El hardware de gráficos compatible con el kernel 4.19 de Linux se incluyó en el puerto para el lanzamiento de Leap 15.1, que admite más controladores de gráficos para la Unidad de procesamiento de gráficos (GPU) y un mejor soporte para las tarjetas Vega de AMD. El kernel cambia a CONFIG_PREEMPT_VOLUNTARY https://bugzilla.suse.com/show_bug.cgi?id=1125004
Una lista de características prominentes y detalles complejos se pueden encontrar en kernelnewbies.org.

Soporte de hardware


Leap 15.1 funciona con X86_64 y los escenarios de implementación se pueden ejecutar para físicos, virtuales, de host e invitados, y en la nube. Los puertos para otras arquitecturas como ARM64 y POWER estarán disponibles en la comunidad.

Colección de compiladores GNU


GNU Compiler Collection 8 está disponible además de GCC 7.

Mejoras generales
  •     Mejoras de optimización inter-procedimiento:
  1.         Las métricas de estimación de tiempo de ejecución rediseñadas conducen a suposiciones más realistas que impulsan las heurísticas de la línea de entrada y la clonación. 
  2.         El paso ipa-pure-const se extiende para propagar el atributo malloc, y la opción de advertencia correspondiente -Wsuggest-attribute = malloc emite un diagnóstico para las funciones que se pueden anotar con el atributo malloc.
  •   Perfil de mejoras de optimización impulsada:
  1.        Nueva infraestructura para la representación de perfiles (tanto estimados estáticamente como retroalimentación del perfil) que permite la propagación de información adicional sobre la confiabilidad del perfil. 
  2.        Una serie de mejoras en el perfil de actualización del código resuelve los problemas encontrados por el nuevo código de verificación. 
  3.        Detección estática de código que no se ejecuta en una ejecución válida del programa. Esto incluye rutas que activan un comportamiento indefinido, así como llamadas a funciones declaradas con el atributo frío. Recientemente, el atributo noreturn no implica todos los efectos de frío para diferenciar entre exit (que es noreturn) y abortar (que además no se ejecuta en ejecuciones válidas). 
  4.       -Freorder-blocks-and-partition, una función de división de cuerpos en regiones frías y calientes, ahora está habilitada de forma predeterminada en -O2 y superior para x86 y x86-64. 
  • Mejoras de optimización de tiempo de enlace:
  1.         Hemos mejorado significativamente la información de depuración de los objetivos ELF utilizando DWARF al preservar adecuadamente la información específica del idioma.
  •     Se presenta una nueva opción -fcf-protection = [full | branch | return | none] para ejecutar la instrumentación de código para aumentar la seguridad del programa al verificar que las direcciones de destino de las instrucciones de transferencia de flujo de control (como la llamada de función indirecta, el retorno de función, el salto indirecto) ) son validos. Actualmente, la instrumentación solo es compatible con objetivos x86 GNU / Linux. Consulte la guía del usuario para obtener más información sobre la sintaxis de la opción y la sección "Nuevos objetivos y mejoras específicas del objetivo" para IA-32 / x86-64 para obtener más detalles.
  •    La opción -gcolumn-info ahora está habilitada de forma predeterminada. Incluye información de columna además de solo nombres de archivos y números de línea en la información de depuración DWARF.
  •    El paso de optimización de nido de bucle de base poliédrica -floop-nest-optimic ha sido revisado. Todavía se considera experimental y no puede dar como resultado ninguna mejora en el tiempo de ejecución.
  •    Se han agregado dos nuevos pasos de optimización de nido de bucle clásico. -floop-unroll-and-jam realiza el desenrollado del bucle externo y la fusión de las copias del bucle interno. -Floop-intercambio intercambia bucles en un nido de bucle para mejorar la localidad de datos. Ambos pasos están habilitados de forma predeterminada en -O3 y superior.
  •  El paso de optimización del nido de bucle clásico -free-loop-distribution se ha mejorado y habilitado de forma predeterminada en -O3 y superior. Admite la distribución de nidos de bucle en algunos escenarios restringidos; también es compatible con la distribución de bucle más interna cancelable con control de versiones de bucle en las comprobaciones de alias en tiempo de ejecución.

  • La nueva opción -fstack-clash-protection hace que el compilador inserte sondas cada vez que el espacio de la pila se asigna de forma estática o dinámica para detectar de manera confiable los desbordamientos de la pila y así mitigar el vector de ataque que se basa en saltar sobre una página de protección de la pila como lo proporciona el sistema operativo. Redes

     
Redes
  
Leap 15.1 ahora usará Network Manager de manera predeterminada para computadoras portátiles y de escritorio; Anteriormente, solo las computadoras portátiles estaban predeterminadas en Network Manager. Las instalaciones del servidor continuarán por defecto en Wicked. Un cambio que se aplica tanto a Wicked como a Network Manager es que /etc/resolv.conf, yp.conf y algunos otros archivos son un enlace a un archivo en / run, que son actualizados por netconfig. Esta versión ha agregado algunos controladores WiFi populares para chipsets inalámbricos más modernos; cuyos beneficios reflejan el uso dinámico de WiFi y con la configuración de redes privadas virtuales.
 
 Seguridad

Leap 15.1 ha recibido todos los backports necesarios y utiliza el mismo Kernel de Enterprise Linux que utiliza SUSE. Leap tiene la protección contra choques, que fue importante para una vulnerabilidad de "Choque de pila" que expuso otras distribuciones.
OpenSSL

OpenSSL fue actualizado a 1.1.0i. Los siguientes fueron cambios importantes de la versión openSSL 1.1.0h en Leap 15.0:



 Client DoS due to large DH parameter (CVE-2018-0732)
Cache timing vulnerability in RSA Key Generation (CVE-2018-0737)


dehydrated / letencrypt

Dehydrated es un cliente para letsencrypt. La integración de SUSE proporciona plantillas para Apache, nginx y lighttpd. También admite la emisión basada en DNS, incluida la compatibilidad con certificados comodín.

Dehydrated es un cliente para firmar certificados con un servidor ACME (actualmente solo proporcionado por Let´s Encrypt) implementado como un bash-script relativamente simple.

Utiliza la utilidad openssl para todo lo relacionado con el manejo real de claves y certificados, por lo que necesita tenerlo instalado. 



openSUSE Leap 15.1 - 2a. parte

openSUSE Leap 15.1 - 3a. parte

openSUSE Leap 15.1 - 4a. parte

openSUSE Leap 15.1 - 5a. parte

openSUSE Leap 15.1 - 6a. parte

openSUSE Leap 15.1 - 7a. parte

openSUSE Leap 15.1 - 8a. parte




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

Linux perf and KCachegrind

If you occassionally do performance profiling as I do, you probably know Valgrind's Callgrind and the related UI KCachegrind. While Callgrind is a pretty powerful tool, running it takes quite a while (not exactly fun to do with something as big as e.g. LibreOffice).

Recently I finally gave Linux perf a try. Not quite sure why I didn't use it before, IIRC when I tried it somewhen long ago, it was probably difficult to set up or something. Using perf record has very little overhead, but I wasn't exactly thrilled by perf report. I mean, it's text UI, and it just gives a list of functions, so if I want to see anything close to a call graph, I have to manually expand one function, expand another function inside it, expand yet another function inside that, and so on. Not that it wouldn't work, but compared to just looking at what KCachegrind shows and seeing ...

When figuring out how to use perf, while watching a talk from Milian Wolff, on one slide I noticed a mention of a Callgrind script. Of course I had to try it. It was a bit slow, but hey, I could finally look at perf results without feeling like that's an effort. Well, and then I improved the part of the script that was slow, so I guess I've just put the effort elsewhere :).

And I thought this little script might be useful for others. After mailing Milian, it turns out he just created the script as a proof of concept and wasn't interested in it anymore, instead developing Hotspot as UI for perf. Fair enough, but I think I still prefer KCachegrind, I'm used to this, and I don't have to switch the UI when switching between perf and callgrind. So, with his agreement, I've submitted the script to KCachegrind. If you would find it useful, just download this do something like:

$ perf record -g ...
$ perf script -s perf2calltree.py > perf.out
$ kcachegrind perf.out



the avatar of Chun-Hung sakana Huang

使用 Ansible 建立 容器化 GitLab with openSUSE in Azure 小記

使用 Ansible 建立 容器化 GitLab with openSUSE in Azure 小記

OS: openSUSE Leap 15 in Azure

今天來測試使用 ansible 在 Azure 上面透過容器化的方式建立 GitLab

GitLab 官方建議規格

先來試試看網路上搜尋到的方式
首先試試看沒有掛在 volume 的方式

$docker  run  -d  --hostname  gitlab.example.com  -p  443:443  -p  80:80  --name  gitlab --restart always  gitlab/gitlab-ce:latest

這樣的方式可以將 GitLab 啟動起來, 沒有問題
接下來就要考慮如何將這一系列的動作用 Ansible 串起來了 :)

考量點有
  • 安裝容器服務以及啟動
  • 要有一個獨立磁碟將 container 的設定與資料存起來
    • 掛載起來的時候, 要進行切割分割區以及建立 file system
    • 掛載到指定目錄
  • 下載 gitlab-ce 的 container image 並執行他, 開通 port 80 and port 443
  • 以上的方式要以非互動的方式來進行

寫了一個 playbook 來進行 gitlab 的安裝
  • 使用 gitlab 群組來進行安裝
    • 因為想配合 Azure Dynamic Inventory 方式

檔案 gitlab_install.yml 內容如下

---
# edit by sakana 2019/5/12
#########################################################  
#
#
#########################################################  

- name: Install docker and run service
# use group
 hosts: gitlab
#  sudo: True
 become: True
 vars_prompt:
   - name: "hostname"
     prompt: "Enter gitlab hostname, ex: gitlab.example.com"
     private: no
     default: gitlab.example.com

   - name: "container_name"
     prompt: "Enter container name when we create, ex: gitlab"
     private: no
     default: gitlab

 tasks:
#    - name: test setup moudule
#      setup: filter=ansible_distribution

   - name: Install docker with openSUSE Leap
     zypper:
       name:
         - docker
         - curl
     when: ansible_distribution == "openSUSE Leap"

# 舊的方式 with_item 即將被棄用
#    - name: Install docker with openSUSE Leap
#      zypper: name={{ item }}
#      with_items:
#        - docker
#        - curl
#      when: ansible_distribution == "openSUSE Leap"

#######################################################
# 等到 openSUSE 測試完成再來測試 CentOS and Ubuntu
#
#    - name: Install docker with CentOS
#      yum: name={{ item }}
#      with_items:
#        - docker
#        - curl
#      when: ansible_distribution == "CentOS"

#    - name: Install docker with Ubuntu
#      apt: name={{ item }} update_cache=yes
#      with_items:
#        - docker.io
#        - curl
#      when: ansible_distribution == "Ubuntu"

  
#    - name: Create docker link with Ubuntu
#      shell: ln -sf /usr/bin/docker.io /usr/local/bin/docker
#      when: ansible_distribution == "Ubuntu"
#
######################################################


#-------------------------------------------------------  

   - name: Set docker enable and run
     service: name=docker state=started enabled=yes

#-------------------------------------------------------  

# 使用 parted 建立label
   - name: use parted to make label
     shell: parted /dev/sdc mklabel msdos
# 使用 parted 建立分割區, 要使用百分比的方式才能非互動
   - name: use parted create partition
     shell: parted /dev/sdc mkpart primary 0% 100%
# 建立 file system
   - name: use mkfs.xfs create file system
     shell: mkfs.xfs -f /dev/sdc1
# 使用 mount module 掛載, 寫入 /etc/fstab
   - name: mount /dev/sdc1 to /gitlab
     mount:
       path: /gitlab
       src: /dev/sdc1
       fstype: xfs
       state: mounted

#-------------------------------------------------------  

   - name: use docker command to run
     shell: docker run -d --hostname {{ hostname }} -p 443:443 -p 80:80 --name {{ container_name }} --restart always gitlab/gitlab-ce:latest

#-------------------------------------------------------  


建立方式
如果有使用 azure_rm.py 記得 chmod a+x azure_rm.py

我是使用 Azure Dynamic Inventory 方式

> ansible-playbook -i  azure_rm.py  --ask-pass  --ask-become-pass  -u  使用者名稱   gitlab_install.yml

  • 這個 playbook 目前沒有處理 security group, 暫時先用手動開, 後面視需求看要不要加進去

VM 所加掛的資料磁碟, 非互動方式的處理我是使用 parted 指令

==== parted 一些指令小記 ====

列出 /dev/sdc 上面的分割區
> parted  /dev/sdc  print

建立 label
超過 2TB 以上的
> parted  /dev/sdc mklabel  gpt

一般用
> parted  /dev/sdc mklabel msdos

建立分割區, 使用整顆硬碟
> parted  /dev/sdc  mkpart  primary 0%  100%

刪除第一個分割區
> parted  /dev/sdc rm  1

=======================

建立完機器, 最後的步驟就是
  • 在 Azure portal 上面開啟機器 security group 的 port 80


設定 GitLab root 密碼  -- > Change your password

就有一個 GitLab 實驗環境可以使用啦 :)

~ enjoy it

Reference:

the avatar of Chun-Hung sakana Huang

使用 ansible 管理 Azure Kubernetes Service (AKS) instance 小記

使用 ansible 管理 Azure Kubernetes Service (AKS) instance  小記

OS: openSUSE Leap 15
ansible: 2.7.10

之前的 Azure AKS instance 都是使用 az aks create 指令建立的

但是久了有的時候真的會一時忘記 az aks 指令要下哪些 …..
所以今天就參考官方網站用 ansible 寫了 playbook 來建立以及移除 AKS instance

建立 AKS instance:

我的 playbook 如下, 檔案名稱 azure_create_aks_instance.yml

---
# Azure AKS 相關測試
# edit by sakana 2019/5/9
- name: use when conditionals and setup module
 hosts: localhost
 connection: local
#
 vars_prompt:
   - name: "client_id"
     prompt: "Enter client_id"
     private: no

   - name: "client_secret"
     prompt: "Enter client_secret"
     private: no

   - name: "resource_group"
     prompt: "Enter resource group name"
     private: no
     default: sakanaK8s

   - name: "aks_instance_name"
     prompt: "Enter aks instance name"
     private: no
     default: test01

   - name: "aks_location"
     prompt: "Enter aks location"
     private: no
     default: eastus

   - name: "dns_prefix"
     prompt: "Enter aks dns_prefix"
     private: no
     default: sakanamax

   - name: "admin_username"
     prompt: "Enter admin user's name"
     private: no
     default: sakana

   - name: "aks_ssh_key"
     prompt: "Enter aks ssh public key"
     private: no

   - name: "aks_pool_name"
     prompt: "Enter aks pool name"
     private: no
     default: testsakana

   - name: "aks_count"
     prompt: "Enter how many node do you want to create?"
     private: no
     default: 1

   - name: "vm_size"
     prompt: "Enter vm size for each node"
     private: no
     default: Standard_B2s

 tasks:
  - name: Create AKS instance
    azure_rm_aks:
      name: "{{ aks_instance_name }}"
      resource_group: "{{ resource_group }}"
      dns_prefix: "{{ dns_prefix }}"
      linux_profile:
        admin_username: "{{ admin_username }}"
        ssh_key: "{{ aks_ssh_key }}"
      service_principal:
        client_id:     "{{ client_id }}"
        client_secret: "{{ client_secret }}"
      agent_pool_profiles:
        - name: "{{ aks_pool_name }}"
          count: "{{ aks_count }}"
          vm_size: "{{ vm_size }}"

建立方式

使用 ansible-playbook 指令建立

> ansible-playbook  azure_create_aks_instance.yml

依照詢問輸入相關資料就可以方便建立

建立完成之後我還是用 az ask 指令取得認證資訊 ( 從 web console 複製 )
> az  aks  get-credentials --resource-group  sakanaK8s --name  test01


接下來實驗

移除 AKS instance:
我的 playbook 如下, 檔案名稱 azure_remove_aks_instance.yml

---
# Azure AKS 相關測試
# edit by sakana 2019/5/9
- name: use when conditionals and setup module
 hosts: localhost
 connection: local
#
 vars_prompt:
   - name: "aks_instance_name"
     prompt: "Enter aks instance name you want to REMOVE"
     private: no
     default: test01

   - name: "resource_group"
     prompt: "Enter resource group name"
     private: no
     default: sakanaK8s

 tasks:
  - name: Remove AKS instance
    azure_rm_aks:
      name: "{{ aks_instance_name }}"
      resource_group: "{{ resource_group }}"
      state: absent


移除的時候一樣用 ansible-playbook 指令
> ansible-playbook  azure_remove_aks_instance.yml


這樣以後建立 AKS instance 就相對方便了

~ enjoy it
:)

Reference:

the avatar of Michal Čihař

Weblate blog moved

I've been publishing updates about Weblate on my blog for past seven years. Now the project has grown up enough to deserve own space to publish posts. Please update your bookmarks and RSS readers to new location directly on Weblate website.

The Weblate website will receive another updates in upcoming weeks, I'm really looking forward to these.

New address for Weblate blog is https://weblate.org/news/.

New address for the RSS feed is https://weblate.org/feed/.

Filed under: Debian English SUSE Weblate

the avatar of FreeAptitude
the avatar of Santiago Zarate

Table to json with jq and awk

The problem

Say you have a table that looks like this:

AGGREGATE_NEEDED    1
ARCH    x86_64
BASE_TEST_ISSUES    NUMBER
BUILD   :NUMBER:PACKAGE
DISTRI  DISTRIBUTION
FLAVOR  Server-DVD-Incidents-Install
INCIDENT_ID 99999

It’s just that it contains about 78 or more entries. Of course for a very skilled engineer or a person with a lot of tricks under the hood, this might be a very trivial task in vim or something like this, I guess that with a couple of replaces here and there, you’d get somewhere; but I’m not skilled, other than at eating.

The Solution

So I took my Key Value table saved it to a file and after googling a bit, now I’m more versed into awk :D:

    cat FILE.txt | \ 
    awk 'BEGIN { print "{" } \ 
        { printf "\"%s\":\"%s\",", $1,$2} \ 
        END { print "\"MANUALLY_GENERATED_ISO_POST\":1 }" }'
        | jq > x86_64-ready.json'"}'

I guess this could have been done easier and prettier, but fits my need and might save you too at some point. Just make sure you have jq installed ok?

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

EasyTAG: Organize your music with openSUSE

Audio files in formats such as MP3, AAC, and Ogg Vorbis have made music ubiquitous and portable. With the explosive growth of storage capacity, you can store huge libraries of music. But how do you keep all that music organized? Just tag your music. Then you can access it easily locally and in the cloud. EasyTAG is a great choice for tagging music and is available in openSUSE.

Many audio file types support tagging, including:

  • MP4, MP3, MP3, MP2
  • Ogg Speex, Ogg Vorbis, Ogg Opus
  • FLAC
  • MusePack
  • Monkey Audio

Installing EasyTAG

EasyTAG is easy to install from openSUSE repositories:

Or use Zypper in a terminal as Root:

# zypper install easytag

Then launch the program from the Software tool or the application menu for your desktop. EasyTAG’s straightforward interface works well in most desktop environments.

Tagging music

Select a folder where you have music you want to tag. By default, EasyTAG will also load subfolders. You can select each file and add tag information such as the artist, title, year, and so on. You can also add images to a file in JPG or PNG format, which most players understand.

Files you have altered appear in bold in the file listing. To save each, press Ctrl+S. You can also select the entire list and use Ctrl+Shift+S to save all the files at once.

One of the most powerful features of EasyTAG is the file scanner. The scanner recognizes patterns based on a template you provide. Once you provide the right template and scan files, EasyTAG automatically tags all of them for you. Then you can save them in bulk. This saves a lot of time and frustration when dealing with large libraries.

When you upload your tagged files to a cloud service, your tags allow you to quickly find and play the music you want anytime.

This article is an adaption of EasyTAG: Organize your music on Fedora under Creative Commons License.