AK1Pro N5105

sábado, 8 de abril de 2023 Sin comentarios

Últimamente me ha dado por probar equipos MiniPC económicos con muy bajo consumo que puedan desempeñar tareas polivalentes ligeras, pero sobretodo multimedia. En este caso se trata de un equipo con un Intel N5105 de 10W y 4 núcleos con 16GB de RAM DDR4 que me costó algo menos de 190€ en Amazon. Pagar más por él no merece mucho la pena debido a los nuevos procesadores que han ido saliendo de nueva generación.

Hay que partir del hecho de que es un equipo con un procesador modesto pero bastante solvente para hacer tareas ofimáticas ligeras o para ver plataformas de streaming. Cuando lo compras suele venir con Windows 11 activado pero funciona perfectamente con Windows 10 si instalamos los drivers correspondientes (que se pueden descargar de un foro oficial bastante útil )

Hay varios factores que he podido analizar desde una live de Ubuntu y de los que dejo captura. La velocidad de la tarjeta de red (una Realtek RTL8111) ronda los 700Mbits/seg, algo lejos del Gigabit pero suficiente para la mayoría de los casos.

La CPU es un Intel N5105 que no funciona nada mal y que se mantiene a unos 55º con poca carga y cuyo ventilador sube a tope para mantenerlo a 70º cuando se le estresa. La GPU (JasperLake), en el apartado que me interesaba de decodificación de vídeo, soporta la mayoría de códecs salvo el AV1.

La memoria RAM que incorpora es un módulo SODIMM de 16GB DDR4 a 2667Mhz de Kinsotn y el M.2 2280 es un Kimtigo KT-B900 de 512GB SATA con velocidades de casi 475MB/seg. No es seguro que se le pueda conectar un M.2 de tipo NVME por lo que he leído por el foro, pero tampoco creo que le haga falta.

En cuanto a la construcción me parece más que razonable aunque se podría haber mejorado la entrada y salida de aire. Hay que tener en cuenta que permite la instalación de un SSD en la parte de abajo de la caja que se comunica con la placa base a través de un USB tipo C. Esa parte de la carcasa yo la he acabado retirando porque no necesitaba conectar un SSD y parecía mejorar un poco el paso del aire.

Algo que no se ve sin abrirlo es que en la placa base hay un conector SATA y un botón que probablemente resetea la BIOS accesible desde fuera a través de jack de audio. También indicar que el equipo emite un zumbido eléctrico muy ligero cuando está en suspensión pero ninguno cuando está apagado.

Categories: MiniPC Tags:

Rompiendo contraseñas de documentos de MS Word

sábado, 4 de marzo de 2023 Sin comentarios

Hace 15 años dejé protegidos con contraseña una serie de documentos de Microsoft Word (versión XP/2003) que impedían su apertura. Con el pasar del tiempo y la contínua renovación de contraseñas, en algún momento puntual, dejé de recordar qué contraseña usé para proteger dichos documentos.

Pensé que en la actualidad no sería difícil encontrar algún mecanismo para romper el sistema de contraseñas que usaba MS Office en 2003 (MD5 + RC4) y me puse manos a la obra en busca de algún programa que me facilitase la tarea. Había dos planteamientos:

  • Eliminando la solicitud de la contraseña.
  • Ataque por fuerza bruta para averiguar la contraseña.

En el primer caso encontré algún artículo en Internet que, mediante la edición del documento .doc con un editor hexadecimal, eliminando la zona en la que se albergaba la contraseña se deshabilitaba la solicitud de la misma, pero no encontraba los patrones con los cuales identificarla y, tras varios intentos, aquello se convirtió en un callejón sin salida. Al menos averigüe que Office 2003 sigue funcionando en Windows 10 y de forma bastante rápida.

El segundo caso me llevó algo más de tiempo porque el mercado está lleno de páginas webs milagrosas y programas en versión demo que sólo me sirvieron para saber que la contraseña tenía más de 6 caracteres y que por fuerza bruta, con un AMD 5900X de 12 núcleos, me llevaría al menos 36 horas. Pero luego descubrí que existía una combinación de software libre bastante más potente.

Primero necesitaríamos extraer el hash de la contraseña del fichero .doc. Este trabajo lo puede hacer un script que podremos descargar desde esta URL y luego utilizaremos el proyecto de HashCat para obtener nuestro objetivo.

Teniéndolo todo en un mismo directorio, los comandos a utilizar serían los siguientes:

python3 office2hashcat.py ficheroObjetivo.doc > hash.txt

./hashcat.bin -a 3 -m 9700 hash.txt

El primer comando extrae de forma inmediata el hash de la contraseña y lo almacena en un fichero de texto «hash.txt» y tendrá el siguiente aspecto:

$oldoffice$1*04477077758555626246182730342136*b1b72ff351e41a7c68f6b45c4e938bd6*0d95331895e99f73ef8b6fbc4a78ac1a

Con lo anterior y consultando la información de la wiki de HashCat sabremos que nuestro hash-mode será el 9700 (-m 9700). Además, como carecemos de diccionario de palabras o sospechamos que no sería de utilidad para encontrar la contraseña,  indicaremos que nuestro modo de ataque será por fuerza bruta (-a 3).

Como contamos con una RTX 3800, HashCat saca provecho de ello y la utiliza para empezar el ataque que nos informa que durará como máximo alrededor de 90 minutos, bastante menos que las 36 horas que nos daban algunos programas en su versión demo. Pero el asombro llega por partida doble cuando el programa termina con éxito al cabo de 15 minutos y nos provee de una contraseña que en mi vida hubiese utilizado. Esto último se debe a las posibles colisiones que existen cuando contamos con cifrados débiles, donde dos palabras diferentes pueden tener el mismo hash.

Finalmente, la contraseña obtenida nos permite abrir esos ficheros sin mayores problemas.

Conclusiones:

  • La cantidad de desinformación, de páginas web fachada y porquería inútil es cada vez mayor en Internet. Resulta dolorosamente penoso el uso de buscadores hoy en día.
  • La contraseña que crees que no vas a olvidar en tu vida no existe, el paso de los años hace estragos en la memoria.
  • Con un hardware comercial a la mano de mucha gente se pueden romper contraseñas en minutos, donde sólo la longitud de la misma y la dureza del cifrado ponen trabas.

Arranque lento en Opensuse

jueves, 19 de enero de 2023 Sin comentarios

Estaba observando que el arranque en Opensuse estaba tardando más de lo usual y utilizando los comandos:

systemd-analyze blame

systemd-analyze plot > /tmp/plot.svg

Detecté que el culpable residia en «postfix.service» principalmente. Se resolvía cambiando el fichero de configuración «/etc/postfix/main.cf» y cambiando el siguiente el valor de configuración:

inet_protocols = ipv4

Después de esto, el servicio «NetworkManager-wait-online» era el que estaba entorpeciendo el arranque. Como no tenía ninguna entrada en fstab que dependiese de la interfaz de red, apliqué los siguientes comandos:

systemctl disable NetworkManager-wait-online.service

systemctl mask NetworkManager-wait-online.service

Finalmente el sistema ahora es capaz de arrancar en poco más de 2 segundos.

Categories: OpenSuse Tags: , ,

Temas AOD en Miui

martes, 6 de diciembre de 2022 2 comentarios

En MIUI se puede escoger un tema en concreto para la función AOD de algunos terminales con animaciones e información. Si quieres fabricar el tuyo propio la documentación oficial es francamente escasa y la mayor parte en chino. Pero una vez consigues un ejemplo funcional el resto es relativamente fácil.

Según la documentación oficial, la estructura del fichero .mtz que tenemos que generar es la siguiente:

Básicamente se trata de un fichero ZIP (método de compresión deflate) al que se le ha cambiado la extensión por .MTZ que contiene un fichero «description.xml» como este:

<?xml version=’1.0′ encoding=’utf-8′ standalone=’yes’ ?>
<MIUI-Theme>
<title>Mi primer AOD</title>
<designer>Cristian</designer>
<author>Cristian</author>
<version>1.0</version>
<uiVersion>12</uiVersion>
<keywords></keywords>
</MIUI-Theme>

El fichero que aparece en el diagrama con el nombre «aod» es también un fichero ZIP (método de compresión deflate) al que se le ha quitado su extensión y que contiene una carpeta «content» y un fichero «aod_description.xml» como este:

<?xml version=’1.0′ encoding=’utf-8′ standalone=’yes’ ?>
<MIUI_Theme_Values>
<!– 类型;百变框架 maml_style –>
<theme_type>maml_style</theme_type>

<!– 是否支持显示农历开关;1 支持,0 不支持,默认为0 –>
<support_lunar_calendar>1</support_lunar_calendar>
<!– 是否支持显示电量开关 –>
<support_battery>1</support_battery>
<!– 是否支持显示通知开关 –>
<support_notification>1</support_notification>

<!– 开关初始状态:显示农历-关闭 –>
<lunar_calendar_enable>0</lunar_calendar_enable>
<!– 开关初始状态:显示电量-开启 –>
<battery_enable>1</battery_enable>
<!– 开关初始状态:显示通知-开启 –>
<notification_enable>1</notification_enable>

</MIUI_Theme_Values>

En el fichero anterior se definen ciertas opciones iniciales y capacidades de las que dispone nuestro tema.

Por otro lado, dentro de la carpeta «content» tenemos la implementación de nuestro AOD. En mi caso se ve así:

Lo interesante ocurre en el fichero «manifest.xml»:

<?xml version=»1.0″ encoding=»utf-8″?>
<Aod frameRate=»60″ screenWidth=»1080″ version=»1″ extraScales=»sw880-den440:0.8148,sw1860-den440:1″ extraResources=»sw880-den440::0.91,sw1860-den440::0.5323″>

<!– aod模块注意事项;1.动画触发放在下方 Trigger 中;2.动画时长不超过4s,超过部分将会被强制停止;3.动画仅播放一次,此后每分钟刷新一次时间 –>
<ExternalCommands>
<Trigger action=»init»>
<ExternCommand command=»animationState» strPara=»‘init'» />
</Trigger>
<Trigger action=»play»>
<AnimationCommand target=»aodAni» command=»play»/>
<AnimationCommand target=»hourAni» command=»play»/>
<AnimationCommand target=»minuteAni» command=»play»/>
</Trigger>
</ExternalCommands>

<VariableBinders>
<!– 查询通知 –>
<ContentProviderBinder name=»data» uri=»content://aod.notification/notifications» columns=»icon» countName=»hasnotifications»>
<Variable name=»notice_icon0″ type=»blob.bitmap» column=»icon» row=»0″/>
<Variable name=»notice_icon1″ type=»blob.bitmap» column=»icon» row=»1″/>
<Variable name=»notice_icon2″ type=»blob.bitmap» column=»icon» row=»2″/>
<Variable name=»notice_icon3″ type=»blob.bitmap» column=»icon» row=»3″/>
</ContentProviderBinder>
</VariableBinders>

<Var name=»aodAni»>
<VariableAnimation loop=»false» initPause=»true»>
<AniFrame value=»0″ time=»0″/>
<AniFrame value=»1″ time=»1500″/>
</VariableAnimation>
</Var>
<Var name=»hourAni»>
<VariableAnimation loop=»false» initPause=»true»>
<AniFrame value=»0″ time=»0″ />
<AniFrame value=»0″ time=»1000″ easeType=»CubicEaseOut»/>
<AniFrame value=»1″ time=»1500″/>
</VariableAnimation>
</Var>
<Var name=»minuteAni»>
<VariableAnimation name=»minuteAnimation» loop=»false» initPause=»true»>
<AniFrame value=»0″ time=»0″ />
<AniFrame value=»0″ time=»1200″ easeType=»CubicEaseOut»/>
<AniFrame value=»1″ time=»1700″/>
<Triggers>
<Trigger action=»end» condition=»#minuteAnimation.current_frame==-1″>
<!– 动画结束之后记得给系统发个命令 –>
<ExternCommand command=»animationState» strPara=»‘finish'» />
</Trigger>
</Triggers>
</VariableAnimation>
</Var>

<Image x=»540″ y=»360″ align=»center» alignV=»center» srcid=»#aodAni*12″ src=»img/num.webp» />
<Image x=»540″ y=»360″ align=»center» alignV=»center» pivotX=»18″ pivotY=»300″ rotation=»(#hourAni-1)*40+#hour12*30+#minute/2″ src=»hour.webp» alpha=»#hourAni*255″ />
<Image x=»540″ y=»360″ align=»center» alignV=»center» pivotX=»29″ pivotY=»300″ rotation=»(#minuteAni-1)*40+#minute*6″ src=»minute.webp» alpha=»#minuteAni*255″ />

<!– 时间 –>
<Group visibility=»eq(#time_format,0)» >
<DateTime x=»540″ y=»700″ format=»hh:mm» size=»110″ color=»#ffffff» align=»center» alignV=»center»/>
</Group>

<Var name=»es_week_xiaoxie» expression=»ifelse(eq(#day_of_week,1),’Domingo’,eq(#day_of_week,2),’Lunes’,eq(#day_of_week,3),’Martes’,eq(#day_of_week,4),’Miércoles’,eq(#day_of_week,5),’Jueves’,eq(#day_of_week,6),’Viernes’,’Sábado’)» type=»string»/>

<Var name=»es_month_jianxie» expression=»ifelse(eq(#month,0),’Enero’,eq(#month,1),’Febrero’,eq(#month,2),’Marzo’,eq(#month,3),’Abril’,eq(#month,4),’Mayo’,eq(#month,5),’Junio’,eq(#month,6),’Julio’,eq(#month,7),’Agosto’,eq(#month,8),’Septiembre’,eq(#month,9),’Octubre’,eq(#month,10),’Noviembre’,’Diciembre’)» type=»string»/>

<Group visibility=»eq(#time_format,1)»>
<DateTime x=»540″ y=»700″ format=»kk:mm» size=»110″ color=»#ffffff» align=»center» alignV=»center»/>
</Group>
<!– 日期、农历 –>
<Text x=»540″ y=»770″ color=»#ffffff» size=»32″ textExp=»@es_week_xiaoxie+’ ‘ +#day_of_week+’ de ‘+@es_month_jianxie+’ de ‘+#year» align=»center» bold=»true»/>
<Text x=»540″ y=»776″ color=»#ffffff» size=»32″ textExp=»@es_week_xiaoxie+’ ‘+#date+’ de ‘+@es_month_jianxie+’ de ‘ #year» align=»center» alignV=»bottom» bold=»true»/>
<!–<DateTime x=»540″ y=»776″ align=»center» alignV=»center» color=»#ffffffff» size=»40″ format=»M月d日 E» bold=»true»/>–>
<DateTime x=»540″ y=»830″ align=»center» alignV=»center» color=»#ffffffff» size=»40″ format=»YY年 N月e» bold=»true» visibility=»#lunar_calendar_enable»/>
<!– 电量 –>
<Group y=»886″ w=»1080″ h=»50″ alignV=»center» visibility=»#battery_enable»>
<Var name=»batteryColor» expression=»ifelse(#battery_state==1||#battery_state==3,’#ff4CB012′,’#ffffffff’)» type=»string» />
<Text x=»540″ y=»25″ align=»right» alignV=»center» color=»#ffffffff» size=»33″ textExp=»#battery_level+’%'» bold=»true»/>
<Rectangle x=»552″ y=»25″ w=»68″ h=»30″ alignV=»center» strokeColor=»#ffffffff» weight=»3″ strokeAlign=»inner» cornerRadius=»15″/>
<Group x=»558″ y=»25″ w=»0.56*#battery_level» h=»18″ alignV=»center» clip=»true»>
<Rectangle w=»56″ h=»18″ fillColor=»@batteryColor» cornerRadius=»9″/>
</Group>
<Image x=»558+28″ y=»25″ align=»center» alignV=»center» src=»lightning.png» visibility=»#battery_state==1||#battery_state==3″ />
</Group>

<!– 本地 预览模式 下显示几条通知;#preview_mode 是否为预览模式 –>
<Var name=»noticeCount» expression=»4″ type=»number» const=»true» />
<!– 通知 –>
<Group x=»ifelse(#preview_mode,-min(#noticeCount-1,3)*60,-min(#hasnotifications-1,3)*60)» visibility=»int(#notification_enable**#preview_mode) || #notification_enable»>
<Image name=»notice_icon0″ x=»540+120*0″ y=»990″ w=»72″ h=»72″ align=»center» alignV=»center» visibility=»#hasnotifications}=1||#noticeCount}=1″ srcExp=»ifelse(#preview_mode,’noticeIcon/contacts.png’,»)» />
<Image name=»notice_icon1″ x=»540+120*1″ y=»990″ w=»72″ h=»72″ align=»center» alignV=»center» visibility=»#hasnotifications}=2||#noticeCount}=2″ srcExp=»ifelse(#preview_mode,’noticeIcon/mms.png’,»)» />
<Image name=»notice_icon2″ x=»540+120*2″ y=»990″ w=»72″ h=»72″ align=»center» alignV=»center» visibility=»#hasnotifications}=3||#noticeCount}=3″ srcExp=»ifelse(#preview_mode,’noticeIcon/email.png’,»)» />
<Image name=»notice_icon3″ x=»540+120*3″ y=»990″ w=»72″ h=»72″ align=»center» alignV=»center» visibility=»#hasnotifications}=4||#noticeCount}=4″ srcExp=»ifelse(#preview_mode,’noticeIcon/theme.png’,»)» />
</Group>

</Aod>

Al faltar documentación esta parte es la más complicada de sacar y la vas haciendo fijándote en temas ya hechos. En principio los fotogramas de la animación están separados y se ejecutan en bucle parándose en uno en concreto, con lo cual la imagen que obtendremos en el AOD no siempre corresponderá al mismo fotograma, lo que ayuda a mantener la salud de las pantallas AMOLED.

 

Categories: Android Tags: , ,

Medir la velocidad de conexión en OPNSense

domingo, 18 de septiembre de 2022 Sin comentarios

En el caso de que estemos utilizando OPNsense como router y queramos hacer una prueba de velocidad desde el mismo para intentar aislar cualquier otro problema de nuestra red local, existe un proyecto ideal que hace uso de Speedtest.net .

Sólo tenemos que conectarnos a nuestro OPNsense mediante SSH para que nos permita lanzar algunos comandos. Lo primero será descargar el script mediante el comando «fetch» (cabe recordar que estamos en una FreeBSD):

fetch -o speedtest.py https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py

Después podremos ejecutar el script mediante el siguiente comando y veremos como nos ofrece los resultados de velocidad al terminar:

python3 speedtest.py

El script es capaz de dejarnos escoger el servidor contra el que queremos lanzar las pruebas y también nos permite seleccionar el interfaz de red que queremos utilizar para realizarlas, algo importante si en nuestro sistema disponemos de varias conexiones WAN o VPNs. Para esto último necesitaremos indicarle la IP de dicha interfaz tal que así:

python3 speedtest.py –source 90.90.90.123

Categories: OPNsense Tags: , ,

Webapps en Ubuntu (cuando los snaps lo complican todo)

viernes, 13 de mayo de 2022 Sin comentarios

Debido a cómo interactúan los snaps con el sistema, todo aquel Firefox que esté instalado de dicha forma no permite el funcionamiento de PWA. Para subsanar el inconveniente tendremos que desinstalar Firefox de la siguiente forma:

sudo snap remove firefox

Añadimos un repositorio donde tengamos disponible la versión clásica de Firefox y le damos prioridad para que se instale desde ahí:

sudo add-apt-repository ppa:mozillateam/ppa

cat << EOF | sudo tee /etc/apt/preferences.d/firefox
Package: firefox*
Pin: origin ppa.launchpadcontent.net
Pin-Priority: 600
EOF

sudo apt -y install firefox

También necesitaremos eliminarlo de la supervisión de AppArmor (el primer comando nos permitirá saber si realmente está afectado por ello o no):

sudo aa-status

sudo ln -s /etc/apparmor.d/usr.bin.firefox /etc/apparmor.d/disable

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.firefox

 

Categories: GNU/Linux, Sin categoría, Ubuntu Tags: , ,

Webapps en Gnu/Linux

lunes, 9 de mayo de 2022 Sin comentarios

Cada vez existen menos aplicaciones dedicadas de escritorio y más servicios webs que suplen las necesidades de los usuarios. Las webapps vienen a fusionar ambos mundos: convierten los servicios web en aplicaciones aparentemente independiente del navegador. Por debajo lo que hacen es utilizar el motor de un navegador (en nuestro caso Firefox) para mostrar las distintas webs que necesitamos usar a modo de aplicaciones clásicas.

Se necesitan instalar dos piezas de software que trabajan en conjunto:

  • PWAs For Firefox: se encarga de hacer el trabajo pesado. Suele estar disponible empaquetado en rpm, deb y msi para distintas plataformas.
  • Addon para Firefox: una extensión que se instala en el navegador y que nos permitirá ir agregando las páginas webs que deseemos.

Una vez instalado el primero, instalaremos la runtime con el siguiente comando:

firefoxpwa runtime install

Ahora sólo tendremos que abrir la página web desde Firefox de, por ejemplo, nuestro Airsonic local, pulsar sobre la extensión y, seguidamente, darle a «Install current site».

Para comprobar qué tal ha ido bastará utilizar este comando:

firefoxpwa profile list

Nos mostrará algo similar a lo siguiente:

========================= Default ==========================
Description: Default profile for all sites
ID: 00000000000000000000000000

Sites:
– airsonic: http://10.18.1.19:8080/ (01G3MWVNVOPZZD4N6Y4C6ZHAAG)

Y para ejecutar nuestra webapp sólo tendremos que escribir el siguiente comando:

firefoxpwa site launch 01G3MWVNVOPZZD4N6Y4C6ZHAAG

Sólo nos faltaría hacer un acceso directo acorde con su icono y ya tendríamos algo similar a una aplicación clásica.

Categories: GNU/Linux Tags: , ,

Error Django en Seafile

martes, 25 de enero de 2022 Sin comentarios

Si nos encontramos un error similar al siguiente en los log’s de Seafile (sobretodo al intentar crear un fichero «.md»):

django.db.utils.OperationalError: no such column: base_filecomment.uuid_id

Se debe a que en la migración a la versión 7.0 la base de datos no sufrió los cambios necesarios y nos toca hacerlos a mano.

En el caso de utilizar MySQL nos bastará con hacer lo siguiente después de haber eliminado la tabla «base_filecomment»:

CREATE TABLE `base_filecomment` (

`id` int(11) NOT NULL AUTO_INCREMENT,
`author` varchar(255) NOT NULL,

`comment` longtext NOT NULL,
`created_at` datetime NOT NULL,

`updated_at` datetime NOT NULL,
`uuid_id` char(32) NOT NULL,

`detail` longtext NOT NULL,
`resolved` tinyint(1) NOT NULL,

PRIMARY KEY (`id`),
KEY `base_filecomment_uuid_id_4f9a2ca2_fk_tags_fileuuidmap_uuid` (`uuid_id`),

KEY `base_filecomment_author_8a4d7e91` (`author`),

KEY `base_filecomment_resolved_e0717eca` (`resolved`),

CONSTRAINT `base_filecomment_uuid_id_4f9a2ca2_fk_tags_fileuuidmap_uuid` FOREIGN KEY (`uuid_id`) REFERENCES `tags_fileuuidmap` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Si se trata de SQLite tendremos que eliminar la tabla «base_filecomment» y recrearla con lo siguiente:

CREATE TABLE «base_filecomment» (
«id» integer NOT NULL PRIMARY KEY AUTOINCREMENT,
«author» varchar(255) NOT NULL,
«comment» text NOT NULL,
«created_at» datetime NOT NULL,
«updated_at» datetime NOT NULL,
«uuid_id» char(32) NOT NULL REFERENCES «tags_fileuuidmap» («uuid»),
«detail» text NOT NULL,
«resolved» bool NOT NULL);

Actualizando desde Opensuse Leap a Tumbleweed

sábado, 22 de enero de 2022 Sin comentarios

OpenSuse Tumbleweed es un distribución Linux de filosofía rolling-release mientras que le versión Leap es del tipo clásico. Si queremos pasar de una a otra deberemos realizar un cambio de repositorios y después actualizar desde ellos.

Primeramente realizamos una copia de seguridad de los repositorios que estamos utilizando actualmente:

mkdir /etc/zypp/repos.d/old
mv /etc/zypp/repos.d/*.repo /etc/zypp/repos.d/old

Añadimos los nuevos:

zypper ar -f -c http://download.opensuse.org/tumbleweed/repo/oss repo-oss

zypper ar -f -c http://download.opensuse.org/tumbleweed/repo/non-oss repo-non-oss

zypper ar -f -c http://download.opensuse.org/update/tumbleweed/ repo-update

zypper ar -f -c http://download.opensuse.org/tumbleweed/repo/debug repo-debug

zypper ar -f -d -c http://download.opensuse.org/tumbleweed/repo/src-oss repo-src-oss

zypper ar -f -d -c http://download.opensuse.org/tumbleweed/repo/src-non-oss repo-src-non-oss

Comprobaremos que todo está correcto con el comando «zypper lr -u» y luego actualizaremos con el comando «zypper dup».

Si todo ha ido bien, sólo tendremos que reiniciar el equipo para aplicar los cambios.

Categories: OpenSuse Tags:

Mostrar tráfico de red en un terminal

lunes, 3 de enero de 2022 Sin comentarios

Si queremos visualizar de forma remota por SSH el tráfico que está gestionando uno de nuestros servidores podemos hacer uso de «bmon«. Suele estar disponible en la mayoría de repositorios oficiales y tiene el siguiente aspecto:

Screenshot 1