End-Fed-40m setup – part2

Hello to all,

In last article i’ve installed a wire antenna for ham radio called « end-fed 40m», i purpose here an improvement, after the last storm,
(Louis in France) destroyed coaxial line of the end-fed. So i decide to update it, with new balun 64:1 (from BH7JYR change 150 to 400w model).

I don’t change the wire part, simply exchange the balun. I’ve also improved the coaxial line by adding a « ferrite » with 10 turns of coax on it (with ~60cm distance).
I also improved the line by adding a support for the ferrites and the coaxial cable which supports the weight of the assembly which avoids pulling on the coaxial cable.

The last improvement is a « new » system that i’ve discoved is to use a « delta loop » configuration to replace single wire system (4% of 80m band here),
it really improved the antenna system (voir photo).

Here is the results table :

Here is a small photo :

73 to all,

Mise à jour Drupal 8.9.17 vers 10.2.3.

 

 

Bonjour à tous,

Utilisant DRUPAL pour un de mes projets (CRX-RADIO-CLOUD), j’ai été déjà amené à faire des mises à jour. Pour ce faire j’ai toujours utilisé COMPOSER, un outil que j’aime bien, cependant je dois dire que là j’en ai « bavé » à chercher des solutions à différentes erreurs/bugs et versions de librairies, je partage ici mes notes de cette mise à jour « massive ».

A savoir que DRUPAL utilise différentes version de PHP suivant la version ici 8, 9 puis 10, J’ai donc du suivre aussi la mise à jour de PHP (7.4,8.0,8.1). Heureusement j’avais à disposition toutes les versions et modules APACHE donc pas de soucis ici pour le prérequis PHP du serveur utilisé pour faire la mise à jour :

Voici mon « upgrade path » ici : 

8.9.17 à 9.0
9.0 à 9.1.0
9.1.0 à 9.2.21
9.2.1 à 9.2.4
9.2.4 à 9.4.15
9.4.15 à 9.5.0
9.5.0 à 10.2.3
10.2.3 à 10.2.4

=> A savoir que mettre à jour DRUPAL via COMPOSER prend énormément de mémoire, je dois donc ajouter une SWAP sur mon serveur pour absorber la charge mémoire : ( >=4G )

# mkdir -p /var/_swap
# cd /var/_swap
# fallocate -l 4G swapfile
# chmod 600 swapfile
# mkswap swapfile
# swapon swapfile


Tableau des commandes COMPOSER ‘utiles’ ici :

#affiche les infos de versions : 
composer outdated "drupal/*"

#enlève une lib au composer.json (+ --no-update): 
composer remove 'lib/lib:^x.x'                              

#ajout une lib au composer.json  (+ --no-update): 
composer require 'lib/lib:^x.x.x'       

#mise à jour std, après avoir modifier le composer.json en conséquence :

composer require drupal/core-recommended:[VERSION] \
drupal/core-composer-scaffold:[VERSION] \
drupal/core-project-message:[VERSION] \
--update-with-all-dependencies


Mise à jour DRUPAL 8.9.17 à 9.0 :

Pour commencer, je suis donc parti d’un PHP7.3 que j’ai du passé en 7.4 (partie CLI), puis une bascule du module PHP/APACHE.

Après un DUMP complet de la base et un SNAPSHOT des données, je peux démarrer cette mise à jour :

#bascule du PHP/CLI en v7.4, préalablement installé : 

# update-alternatives --display php
# update-alternatives --set php /usr/bin/php7.4


Lancement de la mise à jour :

# composer require 'drupal/core-recommended:^9' 'drupal/core-composer-scaffold:^9' 'drupal/core-project-message:^9' --update-with-dependencies --no-update
# composer require 'drupal/core-dev:^9' --dev --update-with-dependencies --no-update
# composer require "drupal/core:9.0.0 as 8.9.17" --no-update && composer update

A la suite d’une erreur PHP ‘fatal error: require(): failed opening required vendor/composer/../symfony/polyfill-intl-normalizer/bootstrap.php’
=> je renomme le dossier vendor en vendor_, pour forcer sa mise à jour complète en réinstallant toutes les librairies :

# mv vendor vendor_

Je peux alors lancer la mise à jour, l’option ‘no-update‘ permet de préparer le fichier composer.json,
avec l’ajout des versions de libs qui va être utilisé par le gestionnaire de paquets COMPOSER :

# composer require 'drupal/core-recommended:^9' 'drupal/core-composer-scaffold:^9' 'drupal/core-project-message:^9' --update-with-dependencies --no-update

# composer require 'drupal/core-dev:^9' --dev --update-with-dependencies --no-update

# composer require "drupal/core:9.0.0 as 8.9.17" --no-update && composer update

Une fois exécuté, je passe au lancement du script en HTTPS : /update.php  qui permet le passage des mises à jour sur la base de données.
Ce script est très important car il remonte aussi les soucis de d’extensions ou thèmes non compatibles, c’est aussi pour ca que je préfère ne pas utiliser DRUSH qui lui gère cela automatiquement.


Mise à jour DRUPAL de 9.0 à 9.1.0 :

Je viens modifier la version de 9.0 à 9.1.0 dans le composer.json :

Modification du composer json : 

    "require": {
        "composer/installers": "^1.0.24",
        "drupal/core": "9.1.0",
        "drupal/codesnippet": "^1.6",
        "drupal/colorbox": "^1.4",
        "drupal/bootstrap": "^3.15",
        "drupal/bootstrap_library": "^1.11",
        "egulias/email-validator": "^2.0",
        "drupal/core-recommended": "9.1.0",
        "drupal/core-composer-scaffold": "9.1.0",
        "drupal/core-project-message": "9.1.0",

+ rm -f composer.lock

Ensuite je passe le COMPOSER de la version 1 à 2 puis le PHP CLI de la version 7.4 à 8.0 + du module APACHE  :

Passage de COMPOSER en Version 2 : 

# composer self-update --2     ( peux etre rollback via :  composer self-update --rollback     ). 

Patch important pour passer en 9.1 : 

composer config --unset scripts.post-package-install
composer config --unset scripts.post-package-update
composer require drupal/core-vendor-hardening:^9


Use the `composer fund` command to find out more!
Scaffolding files for drupal/core:
  - Copy [web-root]/.htaccess from assets/scaffold/files/htaccess
  - Copy [web-root]/INSTALL.txt from assets/scaffold/files/drupal.INSTALL.txt
  - Copy [web-root]/README.txt from assets/scaffold/files/drupal.README.txt
  - Copy [web-root]/robots.txt from assets/scaffold/files/robots.txt
  - Copy [web-root]/update.php from assets/scaffold/files/update.php

In Filesystem.php line 288:

  Could not delete /dataglusterfs_mount/project.crx.cloud/html/sites/default/default.services.yml:


root@crx-webng03 mods-enabled # a2dismod php7.4
Module php7.4 disabled.
To activate the new configuration, you need to run:
  systemctl restart apache2


root@crx-webng03 mods-enabled # a2enmod php8.0
Considering dependency mpm_prefork for php8.0:
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Module mpm_prefork already enabled
Considering conflict php5 for php8.0:
Module php8.0 already enabled


+ PHP CLI : 
# update-alternatives --display php
# update-alternatives --set php /usr/bin/php[VERSION]


Mise à jour DRUPAL de 9.1.0 à 9.2.21 :

Rien de particulier si ce n’est que j’installe en + drupal/upgrade_status qui va me permettre de récupérer un status de la mise à jour sous forme de rapport :

composer require drupal/upgrade_status

Création d'un report : 
root@crx-webng03 html # composer require drupal/upgrade_status --with-all-dependencies



Modification :  ^9.1  : 

cat composer.json
{
    "name": "drupal/drupal",
    "description": "Drupal is an open source content management platform powering millions of websites and applications.",
    "type": "project",
    "license": "GPL-2.0-or-later",
    "require": {
        "composer/installers": "^1.0.24",
        "drupal/core": "^9.1",
        "drupal/codesnippet": "^1.6",
        "drupal/colorbox": "^1.4",
        "drupal/bootstrap": "^3.15",
        "drupal/bootstrap_library": "^1.11",
        "egulias/email-validator": "^2.0",
        "drupal/core-recommended": "^9.1",
        "drupal/core-composer-scaffold": "^9.1",
        "drupal/core-project-message": "^9.1",
        "drupal/remove_meta_info": "^1.0",
        "drupal/core-vendor-hardening": "^9",
        "drupal/upgrade_status": "^4.1"

composer update

composer require drupal/core-recommended:9.2.21 drupal/core-composer-scaffold:9.2.21 drupal/core-project-message:9.2.21 --update-with-all-dependencies

Je lance ensuite cette commande très pratique qui va m’afficher ce qui reste à mettre à jour :

root@crx-webng03 html # composer outdated "drupal/*"
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Legend:
! patch or minor release available - update recommended
~ major release available - update possible

Direct dependencies required in composer.json:
drupal/bootstrap              3.24.0 ! 3.26.0 Built to use Bootstrap, a sleek, intuitive, and powerful front-end framework for faster and easier web development.
drupal/bootstrap_library      1.15.0 ~ 2.0.2  Provides Bootstrap Integration.
drupal/colorbox               1.10.0 ~ 2.0.1  A light-weight, customizable lightbox plugin for jQuery.
drupal/core                   9.2.21 ! 9.5.11 Drupal is an open source content management platform powering millions of websites and applications.
drupal/core-composer-scaffold 9.2.21 ~ 10.2.3 A flexible Composer project scaffold builder.
drupal/core-dev               9.1.0  ~ 10.2.3 require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.
drupal/core-project-message   9.2.21 ~ 10.2.3 Adds a message after Composer installation.
drupal/core-recommended       9.2.21 ~ 10.2.3 Locked core dependencies; require this project INSTEAD OF drupal/core.
drupal/core-vendor-hardening  9.5.11 ~ 10.2.3 Hardens the vendor directory for when it's in the docroot.

Transitive dependencies not required in composer.json:
Everything up to date


Mise à jour DRUPAL de 9.2.1 à 9.2.4 :

root@crx-webng03 html # composer require drupal/core-recommended:^9.2.4 drupal/core-composer-scaffold:^9.2.4 --update-with-dependencies
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
./composer.json has been updated
Running composer update drupal/core-recommended drupal/core-composer-scaffold --with-dependencies
Loading composer repositories with package information
Dependency drupal/core is also a root requirement. Package has not been listed as an update argument, so keeping locked at old version. Use --with-all-dependencies (-W) to include root dependencies.
Dependency egulias/email-validator is also a root requirement. Package has not been listed as an update argument, so keeping locked at old version. Use --with-all-dependencies (-W) to include root dependencies.
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals
  - Upgrading drupal/core-composer-scaffold (9.2.21 => 9.5.11)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
  - Upgrading drupal/core-composer-scaffold (9.2.21 => 9.5.11): Extracting archive
Package doctrine/reflection is abandoned, you should avoid using it. Use roave/better-reflection instead.
Package laminas/laminas-zendframework-bridge is abandoned, you should avoid using it. No replacement was suggested.
Package symfony/debug is abandoned, you should avoid using it. Use symfony/error-handler instead.
Package behat/mink-goutte-driver is abandoned, you should avoid using it. Use behat/mink-browserkit-driver instead.
Package fabpot/goutte is abandoned, you should avoid using it. Use symfony/browser-kit instead.
Generating autoload files
> Drupal\Core\Composer\Composer::preAutoloadDump
Hardening vendor directory with .htaccess and web.config files.
> Drupal\Core\Composer\Composer::ensureHtaccess
87 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Cleaning installed packages.
Found 25 security vulnerability advisories affecting 6 packages.
Run "composer audit" for a full list of advisories.
root@crx-webng03 html #

 

Mise à jour DRUPAL de 9.2.4 à 9.5.0 (en passant par la 9.4.15) :

 ^9.5
 root@crx-webng03 html # 
 composer require drupal/core-recommended:9.5.0 drupal/core-composer-scaffold:9.5.0 drupal/core-project-message:9.5.0 --update-with-all-dependencies

  Problem 1
    - drupal/codesnippet is locked to version 1.9.0 and an update of this package was not requested.
    - drupal/codesnippet 1.9.0 requires drupal/ckeditor * -> found drupal/ckeditor[dev-1.0.x, 1.0.0-rc1, ..., 1.0.x-dev (alias of dev-1.0.x)] but these were not loaded, likely because it conflicts with another require.

FAILED composer require drupal/core-recommended:9.5.0 drupal/core-composer-scaffold:9.5.0 drupal/core-project-message:9.5.0 -W

=> Désinstallation de drupal/codesnippet. 

=> Relance : 

root@crx-webng03 html # composer require drupal/core-recommended:9.5.0 drupal/core-composer-scaffold:9.5.0 drupal/core-project-message:9.5.0 --update-with-all-dependencies

#note : j'ai activé ckeditor5 (pour ne plus utiliser la V4 dans DRUPAL). 

=> Au final je dois rollback en 9.2.4, je décide alors de passer par la 9.4.15 (intermédiaire ici avance la 9.5) :

root@crx-webng03 html # cat composer.json
{
    "name": "drupal/drupal",
    "description": "Drupal is an open source content management platform powering millions of websites and applications.",
    "type": "project",
    "license": "GPL-2.0-or-later",
    "require": {
        "composer/installers": "^1.0.24",
        "drupal/core": "9.4.15",
        "drupal/colorbox": "^1.4",
        "drupal/bootstrap": "^3.15",
        "drupal/bootstrap_library": "^1.11",
        "egulias/email-validator": "^3.2",
        "drupal/core-recommended": "9.4.15",
        "drupal/core-composer-scaffold": "9.4.15",
        "drupal/core-project-message": "9.4.15",
        "drupal/remove_meta_info": "^1.0",
        "drupal/core-vendor-hardening": "^9",
        "drupal/upgrade_status": "^4.1",
        "drupal/highlightjs_input_filter": "^1.1",
   
...
 1280  composer require drupal/core-recommended:9.4.15 drupal/core-composer-scaffold:9.4.15 drupal/core-project-message:9.4.15 --update-with-all-dependencies

root@crx-webng03 html # composer require 'drupal/addtoany:^2.0'


Bootstrap (Thème)	8.x-3.24	8.x-3.30 (Notes de version)
Requires Drupal core: 9.5.0 to 10.2.4

...


Mise à jour DRUPAL 9.4.15 à 9.5.0 : 

root@crx-webng03 html # cat composer.json
{
    "name": "drupal/drupal",
    "description": "Drupal is an open source content management platform powering millions of websites and applications.",
    "type": "project",
    "license": "GPL-2.0-or-later",
    "require": {
        "composer/installers": "^1.0.24",
        "drupal/core": "9.5.0",
        "drupal/colorbox": "^2.0",
        "drupal/bootstrap": "^3.30",
        "drupal/bootstrap_library": "^2.0",
        "egulias/email-validator": "^3.2",
        "drupal/core-recommended": "9.5.0",
        "drupal/core-composer-scaffold": "9.5.0",
        "drupal/core-project-message": "9.5.0",
        "drupal/remove_meta_info": "^1.0",
        "drupal/core-vendor-hardening": "^9",
        "drupal/upgrade_status": "^4.1",
        "drupal/highlightjs_input_filter": "^1.1",
        "drupal/addtoany": "^2.0"
    },

 1317  composer require drupal/core-recommended:9.5.0 drupal/core-composer-scaffold:9.5.0 drupal/core-project-message:9.5.0 --update-with-all-dependencies



=> composer require 'drupal/bootstrap:^3.30'

Scaffolding files for drupal/core:
  - Copy [project-root]/.gitattributes from assets/scaffold/files/gitattributes
  - Copy [web-root]/.htaccess from assets/scaffold/files/htaccess
  - Copy [web-root]/robots.txt from assets/scaffold/files/robots.txt
  - Copy [web-root]/web.config from assets/scaffold/files/web.config
  - Copy [web-root]/sites/example.settings.local.php from assets/scaffold/files/example.settings.local.php


...
87 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Scaffolding files for drupal/core:

In Filesystem.php line 288:

  Could not delete /dataglusterfs_mount/project.crx.cloud/html/sites/default/default.services.yml:


Mise à jour DRUPAL 9.5.0 à 10.2.3 puis 10.2.4 : 

Surement l’étape la plus difficile ici car le changement de version majeure implique l’obsolescence de pas mal de lib/thèmes côté DRUPAL :

root@crx-glust01 html # cat composer.json
{
    "name": "drupal/drupal",
    "description": "Drupal is an open source content management platform powering millions of websites and applications.",
    "type": "project",
    "license": "GPL-2.0-or-later",
    "require": {
        "composer/installers": "^1.0.24",
        "drupal/core": "10.2.4",
        "drupal/colorbox": "^2.0",
        "drupal/bootstrap": "^3.30",
        "drupal/bootstrap_library": "^2.0",
      "egulias/email-validator": "~4.0.2",
        "drupal/core-recommended": "10.2.4",
        "drupal/core-composer-scaffold": "10.2.4",
        "drupal/core-project-message": "10.2.4",
        "drupal/remove_meta_info": "^1.0",
        "drupal/core-vendor-hardening": "^9",
        "drupal/upgrade_status": "^4.1",
        "drupal/highlightjs_input_filter": "^1.1",
        "drupal/addtoany": "^2.0",
        "symfony/console": "^6.4",
        "guzzlehttp/guzzle": "^7.5",
        "drupal/classy": "*",
        "drupal/bartik": "^1.0",
        "drupal/seven": "^1.0",
        "drupal/bartik-bartik": "^1.0",
        "drupal/rdf": "^2.1",
        "drupal/quickedit": "^1.0",
        "drupal/color": "^1.0",
        "drupal/ckeditor": "*"
    },

...

composer require 'egulias/email-validator:^3.2.1' --update-with-dependencies --no-update
=> egulias/email-validator ~3.2.1

composer require 'symfony/console:^6.4' --update-with-dependencies --no-update
composer require 'egulias/email-validator:^4.0.2' --update-with-dependencies --no-update
 
=> egulias/email-validator[4.0.2]
=> drupal/addtoany 2.0.5
=> symfony/console ^6.4

composer remove 'drupal/core-dev:9.1.0'
composer require 'guzzlehttp/guzzle:^7.8.1' --update-with-dependencies --no-update
=> guzzlehttp/guzzle ~7.8.1

root@crx-webng03 html # composer prohibits drupal/core 10.2.3
root@crx-webng03 html # composer require drupal/core-recommended:10.2.3 drupal/core-composer-scaffold:10.2.3 drupal/core-project-message:10.2.3 --update-with-all-dependencies

composer require symfony/console:6.4 --no-update 

root@crx-webng03 html # composer require drupal/core-recommended:10.2.3 drupal/core-composer-scaffold:10.2.3 drupal/core-project-message:10.2.3 --update-with-all-dependencies
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
./composer.json has been updated
Running composer update drupal/core-recommended drupal/core-composer-scaffold drupal/core-project-message --with-all-dependencies
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires symfony/console ^6, found symfony/console[v6.0.0-BETA1, ..., 6.4.x-dev] but these were not loaded, likely because it conflicts with another require.
  Problem 2
    - Root composer.json requires drupal/core 10.2.3 -> satisfiable by drupal/core[10.2.3].
    - drupal/core 10.2.3 requires symfony/console ^6.4 -> found symfony/console[v6.4.0-BETA1, ..., 6.4.x-dev] but these were not loaded, likely because it conflicts with another require.
  Problem 3
    - Root composer.json requires drupal/core-recommended 10.2.3 -> satisfiable by drupal/core-recommended[10.2.3].
    - drupal/core-recommended 10.2.3 requires guzzlehttp/guzzle ~7.8.1 -> found guzzlehttp/guzzle[7.8.1, 7.8.x-dev] but these were not loaded, likely because it conflicts with another require.
  Problem 4
    - drupal/core 10.2.3 requires symfony/console ^6.4 -> found symfony/console[v6.4.0-BETA1, ..., 6.4.x-dev] but these were not loaded, likely because it conflicts with another require.
    - drupal/addtoany 2.0.5 requires drupal/core ^9.4 || ^10.0 -> satisfiable by drupal/core[10.2.3].
    - drupal/addtoany is locked to version 2.0.5 and an update of this package was not requested.

root@crx-webng03 html # composer require symfony/console:6.4.4 --no-update
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
./composer.json has been updated

composer prohibits drupal/core 10.2.3

composer require symfony/*:6.4 --no-update

--------

root@crx-webng03 html # composer prohibits drupal/core 10.2.3
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
drupal/drupal           -      requires         drupal/core (9.5.0)
drupal/core-recommended 9.5.0  requires         drupal/core (9.5.0)
drupal/core             10.2.3 requires         symfony/console (^6.4)
drupal/drupal           -      requires         symfony/console (4.4.49)
drupal/core             10.2.3 requires         symfony/dependency-injection (^6.4)
drupal/drupal           -      does not require symfony/dependency-injection (but v4.4.49 is installed)
drupal/core             10.2.3 requires         symfony/event-dispatcher (^6.4)
drupal/drupal           -      does not require symfony/event-dispatcher (but v4.4.44 is installed)
drupal/core             10.2.3 requires         symfony/filesystem (^6.4)
drupal/drupal           -      does not require symfony/filesystem (but v4.4.42 is installed)
drupal/core             10.2.3 requires         symfony/finder (^6.4)
drupal/drupal           -      does not require symfony/finder (but v4.4.44 is installed)
drupal/core             10.2.3 requires         symfony/http-foundation (^6.4)
drupal/drupal           -      does not require symfony/http-foundation (but v4.4.49 is installed)
drupal/core             10.2.3 requires         symfony/http-kernel (^6.4)
drupal/drupal           -      does not require symfony/http-kernel (but v4.4.51 is installed)
drupal/core             10.2.3 requires         symfony/mime (^6.4)
drupal/drupal           -      does not require symfony/mime (but v5.4.13 is installed)
drupal/core             10.2.3 requires         symfony/routing (^6.4)
drupal/drupal           -      does not require symfony/routing (but v4.4.44 is installed)
drupal/core             10.2.3 requires         symfony/serializer (^6.4)
drupal/drupal           -      does not require symfony/serializer (but v4.4.47 is installed)
drupal/core             10.2.3 requires         symfony/validator (^6.4)
drupal/drupal           -      does not require symfony/validator (but v4.4.48 is installed)
drupal/core             10.2.3 requires         symfony/process (^6.4)
drupal/drupal           -      does not require symfony/process (but v4.4.44 is installed)
drupal/core             10.2.3 requires         symfony/yaml (^6.4)
drupal/drupal           -      does not require symfony/yaml (but v4.4.45 is installed)
drupal/core             10.2.3 requires         twig/twig (^3.5.0)
drupal/drupal           -      does not require twig/twig (but v2.15.6 is installed)
drupal/core             10.2.3 requires         doctrine/annotations (^1.14)
drupal/drupal           -      does not require doctrine/annotations (but 1.13.3 is installed)
drupal/core             10.2.3 requires         guzzlehttp/guzzle (^7.5)
drupal/drupal           -      requires         guzzlehttp/guzzle (6.5.8)
drupal/core             10.2.3 requires         guzzlehttp/psr7 (^2.4.5)
drupal/drupal           -      does not require guzzlehttp/psr7 (but 1.9.1 is installed)
drupal/core             10.2.3 requires         asm89/stack-cors (^2.1)
drupal/drupal           -      does not require asm89/stack-cors (but 1.3.0 is installed)
drupal/core             10.2.3 requires         psr/log (^3.0)
drupal/drupal           -      does not require psr/log (but 1.1.4 is installed)
Not finding what you were looking for? Try calling `composer require "drupal/core:10.2.3" --dry-run` to get another view on the problem.
root@crx-webng03 html #


?? asm89/stack-cors
core_version_requirement: ^8 || ^9

Notes :

=> (à moi même)   C’est mal de lancer COMPOSER en root (   ajout d’un shell temporaire sur le www-data c’est mieux )       🙂

=> j’ai du désinstaller des thèmes/modules qui n’étaient plus valables en v10, pour le reste, j’ai du ajouter ce tag (sur les fichiers info.yml) :
‘  core_version_requirement: ^8 || ^9  ‘

=> j’ai aussi du réinstaller certaines >LIB en V10 pour ensuite les désactivées depuis l’interface d’administration :  ( messages remontés via update.php ) :

 1432  composer require drupal/core-recommended:10.2.3 drupal/core-composer-scaffold:10.2.3 drupal/core-project-message:10.2.3 --update-with-all-dependencies --no-update
 1461  composer require drupal/classy
 1463  composer require 'drupal/bartik:^1.0'
 1464  composer require 'drupal/seven:^1.0'
 1470  composer require 'drupal/bartik-bartik:^1.0'
 1472  composer require 'drupal/rdf:^2.1'
 1473  composer require 'drupal/quickedit:^1.0'
 1474  composer require 'drupal/color:^1.0'
 1495  composer require drupal/ckeditor
 1504  composer require drupal/core-recommended:10.2.4 drupal/core-composer-scaffold:10.2.4 drupal/core-project-message:10.2.4 --update-with-all-dependencies

Bon courage à vous pour vos mises à jour DRUPAL !

Voir aussi : https://bastien.barbe.pw/mise-a-jour-drupal-8-5-5-vers-8-5-6/

Update GITLAB-CE

Hello to all,

Hosting a GITLAB-CE solution (DEBIAN12 OS), I had to perform an update 14 to 16.
This is relatively long because you have to update in stages.

Fortunately the official site offers a tool to generate all the versions to use,
to arrive at the target version.

After migrate to DEBIAN12 i lost all gitlab repo, and finnaly i’ve done this update manually
version after version. Here is the process :

I retreive my gitlab version  here 14.2.1 and target to 16.9.1 :

# dpkg -l | grep gitlab 

Then i go to this site, to build my upgrade path :   ( 10 steps !!! )
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=14.2.1&edition=ce

Basically after updating Debian 11 to 12, we have the GIT package which is ‘orphaned’,
we can see it via this command:

apt-show-versions | grep -i "no available version"

I go to this link to retreive all of packages needed :

https://packages.gitlab.com/app/gitlab/gitlab-ce/search?dist=debian&filter=all&page=1&q=

let’s go :

apt-get install gitlab-ce=14.3.6-ce.0
--------------------------------------	
	=> root@crx-git01 sources # wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/buster/gitlab-ce_14.3.6-ce.0_amd64.deb/download.deb
		
		mv download.deb gitlab-ce_14.3.6-ce.0_amd64.deb
		dpkg -i gitlab-ce_14.3.6-ce.0_amd64.deb

		...
		Keeping all older configuration backups
		Unpacking gitlab-ce (14.3.6-ce.0) over (14.2.1-ce.0) ...
		...
		...
		1709459914_2024_03_03_14.2.1_gitlab_backup.tar
		...

	Upgrade complete! If your GitLab server is misbehaving try running
		sudo gitlab-ctl restart

		root@crx-git01 sources # dpkg -l | grep git
		ii  gitlab-ce                      14.3.6-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)


apt-get install gitlab-ce=14.9.5-ce.0
--------------------------------------
   => https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/buster/gitlab-ce_14.9.5-ce.0_amd64.deb

	root@crx-git01 sources # wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/buster/gitlab-ce_14.9.5-ce.0_amd64.deb/download.deb
		
	root@crx-git01 sources # wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/buster/gitlab-ce_14.9.5-ce.0_amd64.deb/download.deb
	--2024-03-03 11:08:46--  https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/buster/gitlab-ce_14.9.5-ce.0_amd64.deb/download.deb
	Resolving packages.gitlab.com (packages.gitlab.com)... 104.18.39.11, 172.64.148.245, 2606:4700:4400::6812:270b, ...
	Connecting to packages.gitlab.com (packages.gitlab.com)|104.18.39.11|:443... connected.
	HTTP request sent, awaiting response... 302 Found
	Location: https://d20rj4el6vkp4c.cloudfront.net/7/8/debian/package_files/127567.deb?t=1709460826_348df00b8ce7a24a8a77d0cd338f45a39ee4bba5 [following]
	--2024-03-03 11:08:46--  https://d20rj4el6vkp4c.cloudfront.net/7/8/debian/package_files/127567.deb?t=1709460826_348df00b8ce7a24a8a77d0cd338f45a39ee4bba5
	Resolving d20rj4el6vkp4c.cloudfront.net (d20rj4el6vkp4c.cloudfront.net)... 52.222.153.188, 52.222.153.182, 52.222.153.31, ...
	Connecting to d20rj4el6vkp4c.cloudfront.net (d20rj4el6vkp4c.cloudfront.net)|52.222.153.188|:443... connected.
	HTTP request sent, awaiting response... 200 OK
	Length: 1034232620 (986M) [application/x-debian-package]
	Saving to: 'download.deb'

	download.deb                                      100%[==========================================================================================================>] 986.32M  10.5MB/s    in 90s

	2024-03-03 11:10:17 (10.9 MB/s) - 'download.deb' saved [1034232620/1034232620]

	root@crx-git01 sources #  ll
	total 1010000
	-rw-r--r-- 1 root root 1034232620 Jun  1  2022 download.deb
	root@crx-git01 sources # dpkg -i download.deb
		
	root@crx-git01 sources # dpkg -l |grep git
	ii  gitlab-ce                      14.9.5-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)

apt-get install gitlab-ce=14.10.5-ce.0
--------------------------------------
Running configuration backup
Creating configuration backup archive: gitlab_config_1709462867_2024_03_03.tar
/etc/gitlab/
/etc/gitlab/trusted-certs/
/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb
Configuration backup archive complete: /etc/gitlab/config_backup/gitlab_config_1709462867_2024_03_03.tar
Keeping all older configuration backups
Unpacking gitlab-ce (14.10.5-ce.0) over (14.9.5-ce.0) ...


root@crx-git01 sources # dpkg -l |grep git

iU  gitlab-ce                      14.10.5-ce.0                   amd64        GitLab Community Edition (including NGINX, Postgres, Redis)

apt-get install gitlab-ce=15.0.5-ce.0
--------------------------------------
...
root@crx-git01 sources # dpkg -l |grep git
ii  gitlab-ce                      15.0.5-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)

apt-get install gitlab-ce=15.4.6-ce.0
--------------------------------------
...
root@crx-git01 sources # dpkg -l |grep git
ii  gitlab-ce                      15.4.6-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)
...

apt-get install gitlab-ce=15.11.13-ce.0
--------------------------------------
root@crx-git01 sources # dpkg -l |grep git
iU  gitlab-ce                      15.11.13-ce.0                  amd64        GitLab Community Edition (including NGINX, Postgres, Redis)
...

apt-get install gitlab-ce=16.1.6-ce.0
--------------------------------------
root@crx-git01 sources # dpkg -l |grep git
iU  gitlab-ce                      16.1.6-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)

...

apt-get install gitlab-ce=16.3.7-ce.0
--------------------------------------
root@crx-git01 sources # dpkg -l |grep git
ii  gitlab-ce                      16.3.7-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)
...

apt-get install gitlab-ce=16.7.6-ce.0
--------------------------------------
...
root@crx-git01 sources # dpkg -l |grep git
ii  gitlab-ce                      16.7.6-ce.0                    amd64        GitLab Community Edition (including NGINX, Postgres, Redis)


apt-get install gitlab-ce=16.9.1-ce.0
--------------------------------------
...

 

Have fun with your gitlab updates !

USB Control and triggerhappy on LINUX for HAMRADIO

In the past, i was using a « multimedia controller knob USB »  (on Windows OS with AUTOHOTKEY script to map SYSCALL of sound to special key),
This system can control my RADIO TRANSCEIVER (FT897).

For exemple i can use one RASPBERRYPI for TRX/TCP-IP control with CRX-COM and another RASPBERRYPI from my remote for USB BUTTON control,
here i’m using the same RASPBERRY device for TRX CAT, CRX-COM and USB Control.

I’ve found a new system based on LINUX now to do that, AHK equivalent system is call « TRIGGERHAPPY » on LINUX.
I’m using a RASPBERRY PI4 + an USB « Cooidea USB Multimedia Control« .

In my case on RPI4, TRIGGERHAPPY is already install / natif.

The advantage of this solution is :
– i did’t have to use my PC/tablet here, only  RASPBERRYPI4 + USB CAT SYSTEM + USB MEDIA CONTROLLER.
– Can work via INTERNET/NETWORK.

For HAM radio, use « TRIGGERHAPPY » is very usefull, you can map key/button to call a specific command,
exemples : control relay by press a key/device button, change frequency, turn antenna (key press/relay map).

Here is a photo of the test system RASPBERRYPI4+USB MULTIMEDIA Button, on the bottom right :

1. First step identify KEY mapping with USB device : 

Simply connect a device (keyboard/media controller) to your raspberry.
For exemple here i connect the USB device, i launch a « dmesg » command to have information :

[ 6143.609009] usb 1-1.4: new full-speed USB device number 6 using xhci_hcd
[ 6146.029045] usb 1-1.4: new full-speed USB device number 7 using xhci_hcd
[ 6146.166273] usb 1-1.4: New USB device found, idVendor=0483, idProduct=5756, bcdDevice= 2.00
[ 6146.166290] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6146.166303] usb 1-1.4: Product: USB Multimedia Control
[ 6146.166314] usb 1-1.4: Manufacturer: Cooidea
[ 6146.166326] usb 1-1.4: SerialNumber: 205435345950
[ 6146.175278] input: Cooidea USB Multimedia Control Keyboard as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:0483:5756.0003/input/input3
[ 6146.240139] input: Cooidea USB Multimedia Control Consumer Control as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:0483:5756.0003/input/input4
[ 6146.240454] hid-generic 0003:0483:5756.0003: input,hidraw1: USB HID v1.11 Keyboard [Cooidea USB Multimedia Control] on usb-0000:01:00.0-1.4/input0

Now let make a small test, we have a command to debug the « TRIGGERHAPPY » process it’s the THD command,
So after plug the USB device, i simply turn up/down the volume button and press on it to call « mute » option :

root@rmtrpi-56-f4eyq bastien # thd --dump /dev/input/event*
EV_KEY  KEY_VOLUMEUP    1       /dev/input/event2
# KEY_VOLUMEUP  1       command
EV_KEY  KEY_VOLUMEUP    0       /dev/input/event2
# KEY_VOLUMEUP  0       command
EV_KEY  KEY_VOLUMEDOWN  1       /dev/input/event2
# KEY_VOLUMEDOWN        1       command
EV_KEY  KEY_VOLUMEDOWN  0       /dev/input/event2
# KEY_VOLUMEDOWN        0       command

root@rmtrpi-56-f4eyq bastien # thd --dump /dev/input/event*
EV_KEY  KEY_MUTE        1       /dev/input/event2
# KEY_MUTE      1       command
EV_KEY  KEY_MUTE        0       /dev/input/event2
# KEY_MUTE      0       command

2. Create the TRIGGERHAPPY configuration : 

I can create the button configuration for EVENTS mapping :

root@rmtrpi-56-f4eyq crx-com # cat /etc/triggerhappy/triggers.d/volumectrl.conf
#change band:
KEY_MUTE            1       /opt/crx/crx-com/qrg_whell.php mute
#frequency up:
KEY_VOLUMEUP        1       /opt/crx/crx-com/qrg_whell.php up

#frequency down:
KEY_VOLUMEDOWN      1       /opt/crx/crx-com/qrg_whell.php down

I’ve create a PHP script to map KEYPAM to WEBSOCKET command here is the script :

I can call it with 3 commands for the moment, UP/DOWN and BAND UP (in future i will probably move to an USB system with more buttons, like STEP/MODE changing).

root@rmtrpi-56-f4eyq crx-com # /opt/crx/crx-com/qrg_whell.php mute
@DEBUG:n: 15m , 21000
@DEBUG, SET payload:0210000001
root@rmtrpi-56-f4eyq crx-com # /opt/crx/crx-com/qrg_whell.php up
@DEBUG, SET payload:0210010001
root@rmtrpi-56-f4eyq crx-com # /opt/crx/crx-com/qrg_whell.php down
C:21001
N:21000
@DEBUG, SET payload:0210000001
root@rmtrpi-56-f4eyq crx-com # /opt/crx/crx-com/qrg_whell.php up
@DEBUG, SET payload:0210010001
root@rmtrpi-56-f4eyq crx-com #

To create the script, i’ve first made this test (send a WEBSOCKET cmd via CLI with WEBSOCAT),
here CRX-COM program talk with JSON :

<?php

$cmd='echo \'{"protocol":"yaesu1","setQrg":"0071200001","readbuff":0}\' | /usr/local/bin/websocat -t --ws-c-uri=wss://192.168.1.167:5209/ - ws-c:cmd:\'socat - ssl:192.168.1.167:5209,verify=0\'';
$e=shell_exec($cmd);

?>

After succefully send QRG / change BAND,
i’ve create this script :  /opt/crx/crx-com/qrg_whell.php

#!/usr/bin/php
<?php
/*
 *	crx-com/qrg_whell.php	
 *	A CLI client for crx-com WEBSOCKET (remote station/crx-radio-cloud).
 *	(c) f4eyq@crx.cloud - 2024
 *	date: 27/02/2024
 *	up:   27/02/2024
 *	version: 0.1b
 * 
 *	Events mapping call this TRIGGERHAPPY script with args{mute,up,down} : 
 *	KEY_MUTE	1	/opt/crx/crx-com/qrg_whell.php mute	
 *	KEY_VOLUMEUP	1	/opt/crx/crx-com/qrg_whell.php up	
 *	KEY_VOLUMEDOWN	1	/opt/crx/crx-com/qrg_whell.php down
 *	See /etc/triggerhappy/triggers.d/volumectrl.conf	
 * */
require_once('/opt/crx/crx-com/qrg_whell.qrg.php');
$GTRX_conf			=	array(
	'crx-com-hostname'	=>	'192.168.1.167',
	'crx-com-port'		=>	'5209',
	'crx-com-protocol'	=>	'yaesu1'	
);
$GREG_file_crxcomqrgwhell	=	'/tmp/REG_file_crxcomqrgwhell';
$GDEF_QRG			=	'7000';
$GDEF_BAND			=	'40m';
$inputAction			=	'init';
if(isset($argv[1])){
	if($argv[1]=='up'){$inputAction='qrgup';}
	if($argv[1]=='down'){$inputAction='qrgdown';}
	if($argv[1]=='mute'){$inputAction='bandup';}
}
#echo "@DEBUG:".$inputAction."\n";
initRegistry();
$reg=getRegistry();
if($inputAction=='qrgup' && isset($reg['current_qrg'])){
	#echo "C:".$reg['current_qrg']."\n";
	$reg['current_qrg'] = $reg['current_qrg'] + 1;
	#echo "N:".$reg['current_qrg']."\n";
	saveRegistry($reg);
	setQrgTrx($reg);
	exit(0);
}
if($inputAction=='qrgdown' && isset($reg['current_qrg'])){
	#echo "C:".$reg['current_qrg']."\n";
	$reg['current_qrg'] = $reg['current_qrg'] - 1;
	#echo "N:".$reg['current_qrg']."\n";
	saveRegistry($reg);
	setQrgTrx($reg);
	exit(0);
}
if($inputAction=='bandup' && isset($reg['current_band'])){
	$current_band	=	$reg['current_band'];
	$fd=0;
	$next=$nextb=$nextq='';
	foreach($frequency_default as $vbd=>$vqrg){
                if($fd){//put the next band:
			$nextb=$vbd;
			$nextq=$vqrg;
                 break;
                }
		if($vbd==$current_band && $fd==0){
			$fd++;		
		}			
	}
	if($nextb=='' && $nextq==''){
		foreach($frequency_default as $vbd=>$vqrg){//put the first.
                        $nextb=$vbd;
			$nextq=$vqrg;
			break;
		}
	}
	#echo "@DEBUG:n: $nextb , $nextq  \n";
	$reg['current_band'] = $nextb;
        $reg['current_qrg']  = $nextq;
	saveRegistry($reg);
	setQrgTrx($reg);
}
function getQrgPayload($qrg,$protocol){
	//@TODO: implement all CRX-COM protocol
	//At this time only yaesu1 is supported (FT817,818,857,897)
	// input QRG exemple :  7006Khz
	$inm=$qrg/1000; //Convert KHZ to MHZ : 
	$qrgmhz=explode('.',$inm);//create array 0=> 7,  1=> 006 (floating part is part [1] of this array.
	// FA    P1  P1  P1  P1  P1  P1  P1  P1  => yaesu1 (ft817,897 etc... into crx-com).
	$part1=$qrgmhz[0];// 7
	$part1=str_pad($part1,3, "0", STR_PAD_LEFT);// 007
	if(!isset($qrgmhz[1]))$qrgmhz[1]='00';
	$part2=$qrgmhz[1];// 006
	$part2=str_pad($part2,5, "0", STR_PAD_RIGHT);// 006 0000 , => len 7
	$pl = ''.$part1.''.$part2.'01';
	return $pl;
}
function setQrgTrx($reg){
	global $GTRX_conf;
	if(!isset($reg['current_qrg']))return false;
	$qrg=$reg['current_qrg'];//QRG in KHZ
	$pl	=	getQrgPayload($qrg,$GTRX_conf['crx-com-protocol']);
	#echo "@DEBUG, SET payload:".$pl."\n";

    $cmd='echo \'{"protocol":"'.$GTRX_conf['crx-com-protocol'].'","setQrg":"'.$pl.'",';
	$cmd.='"readbuff":0}\' | /usr/local/bin/websocat -t --ws-c-uri=wss://'.$GTRX_conf['crx-com-hostname'].':'.$GTRX_conf['crx-com-port'];
	$cmd.='/ - ws-c:cmd:\'socat - ssl:'.$GTRX_conf['crx-com-hostname'].':'.$GTRX_conf['crx-com-port'].',verify=0\'';

	$e=shell_exec($cmd);
	return true;
}
function saveRegistry($ireg){
       global  $GREG_file_crxcomqrgwhell;
       $reg=serialize($ireg);
       file_put_contents($GREG_file_crxcomqrgwhell,$reg);
}
function initRegistry(){
	global	$GREG_file_crxcomqrgwhell;
	global	$GDEF_QRG;
	global	$GDEF_BAND;
	if(!file_exists($GREG_file_crxcomqrgwhell)){
		$r=touch($GREG_file_crxcomqrgwhell);
		if(!$r){
			die('cannot create :'.$GREG_file_crxcomqrgwhell.' ,please check right on file');			
		}
		else{
			echo "init reg file for TRX control : ".$GREG_file_crxcomqrgwhell." \n\n";
			$arr=array(
				'current_band'	=>	$GDEF_BAND,
				'current_qrg'	=>	$GDEF_QRG
			);
			$reg=serialize($arr);			
			file_put_contents($GREG_file_crxcomqrgwhell,$reg);
		}
	}
}
function getRegistry(){
	global  $GREG_file_crxcomqrgwhell;
	$rs=file_get_contents($GREG_file_crxcomqrgwhell);
	if($rs && $rs<>''){
		$reg=unserialize($rs);
		if(!$reg)return array();
		return $reg;
	}
	return array();
}
?>

Frequency configuration is a simple script :     /opt/crx/crx-com/qrg_whell.qrg.php

<?php
$frequency_default = array();
$frequency_default["136khz"]="135";
$frequency_default["500khz"]="493";
$frequency_default["160m"]="1855";
$frequency_default["80m"]="3672";
$frequency_default["60m"]="5353";
$frequency_default["40m"]="7090";
$frequency_default["30m"]="10120";
$frequency_default["20m"]="14057";
$frequency_default["17m"]="18068";
$frequency_default["15m"]="21250";
$frequency_default["12m"]="24890";
$frequency_default["10m"]="28090";
$frequency_default["6m"]="50315";
$frequency_default["4m"]="70000";
$frequency_default["2m"]="144300";
$frequency_default["70cm"]="430000";
?>

The setup of WEBSOCAT here is very simple here :

#wget : https://github.com/vi/websocat/releases/download/v1.2.0/websocat_nossl_arm-linux-static

root@rmtrpi-56-f4eyq websocat-master # whereis websocat
websocat: /usr/local/bin/websocat
root@rmtrpi-56-f4eyq websocat-master # ll /usr/local/bin/websocat
lrwxrwxrwx 1 root root 50 Feb 27 10:16 /usr/local/bin/websocat -> /opt/websocat-master/websocat_1.2.0_nossl_arm_mini

73 to all,

See :
CRX-COM/QRG-WHELL : https://git.crx.cloud/f4eyq/crx-com/-/tree/master/QRG-WHELL
TRIGGERHAPPY : https://github.com/wertarbyte/triggerhappy/
WEBSOCAT : https://github.com/vi/websocat
CRX-COM :
https://project.crx.cloud/Remote_ham_radio_station_setup_guide
https://project.crx.cloud/crx-com

VFO-USB :
https://bastien.barbe.pw/ham-un-bouton-vfo-usb-pour-son-catsystem/

USB DEVICE can be use, type « multimedia controller knob USB »
on ALIEXPRESS  /   AMAZON :

See also :

=> Test Windows10 +MCHF WINDOWS10PC +TRX-MCHF (FT817 protocol) : https://bastien.barbe.pw/webcontrol-radio-transceiver/
=> Test Mobile Phone / Mumble / m.crx.cloud / CRX-COM (01/10/2021) : https://bastien.barbe.pw/ham-remote-station-on-mobile-phone/
=> Test WIFI/RASPBERRY/FT817 (04/04/2020) : https://bastien.barbe.pw/cat-system-en-wifi/
=> Test FT817+CRX-COM (15/06/2019) :  https://project.crx.cloud/crx-com-rasb-ft817

Coupe du REF 2024 Phonie

Bonjour à tous,

Voici un petit CR de ma coupe du REF 2024 avec mon arrivée dans le département 79, étant dans l’apprentissage du morse,
je n’ai participé qu’à la partie phonie. Cette année j’ai décidé de faire la coupe du REF en QRP sans assistance (cluster/internet),
une première en QRP pour moi.

A la suite de la tempête un arbre s’étant abattu sur mon End-Fed40m j’ai du dans l’urgence intervenir la veille du concours
pour tout remonter, Le voisin est venu pour abattre l’arbre au final plus de peur que de mal.
cdref

Au petit matin je vais pour démarrer et là pb de retour HF/ROS sur l’antenne (uniquement 40/80),
après contrôle, le boitier du balun doit présenter un court circuit ou un faux contact,

Je passe l’antenne au MFJ la descend de quelques mètres / révise les contacts du balun à la frontale.
J’arrive à démarrer enfin !

Du fait de mon changement de département 44/79 beaucoup d’OMs galèrent quand je passe le groupe de contrôle,
surtout en QRP. Je dois dire que c’est ce qui m’a fait perdre le plus de temps cette année (environ 20% du temps/QSO je dirai).

Dans certains cas j’ai même eu un OM qui a tout simplement fait mine de ne plus m’entendre car il ne s’avait/voulait pas corriger son LOG  :/

A part ces petits désagréments de QTH, j’ai pu avancer dans le concours,  les heures s’enchainent à ma plus grande surprise je contact Michel FK8IK
depuis Nouméa, j’avais eu déjà l’occasion de l’entendre sur 20m mais j’avais jamais contacté ce QTH avant !

Je dois dire que le fait de ne pas avoir Internet pendant le concours (donc pas de spots) ne m’a pas beaucoup dérangé, j’ai changé de bandes,
plus à l’instinct qu’à la machine et j’ai trouvé ca très sympa et +intéressant de chasser les QTH à la main et d’écouter plus !

Au final j’ai lancé appel que 2 fois, je me suis rendu compte que face aux stations QRO c’était pas possible d’appeler en QRP.
Donc je n’ai fait que de la chasse tout le long du concours.

Le LIVE-SCORE sur un écran m’a bien motivé, c’est Gérard F6EEQ qui m’a servi de lièvre (pour un opérateur CW principalement je lui tire mon chapeau),
j’ai bataillé tout du long pour passer devant lui, Au final c’est le dimanche en fin d’après midi que j’ai réussi à passer devant,

Du coup j’ai mis le paquet jusqu’à la fin pour terminer à 411 QSOs et j’ai légèrement dépassé du coup car c’est limité à 28H en mono-opérateur,
avec 8H d’arrêt consécutives et j’ai du faire ~37H de trafic avec 6H d’arrêt seulement ( ! note pour l’année prochaine ).

Il me manque au final les départements : 4,5,6 9, 10, 12, 20, 26, 42, 55, 61, 65, 68, 70, 75, FG, FJ, FH, FM, FO, FP, FR, FT,FW.
Je ferai mieux l’année prochaine (surtout pour le nombre QSOs 10/15m ou je n’ai pas fait grand chose).

73 à tous et à l’année prochaine,

 

CDREF 3

CDREF 1 CDREF 2  CDREF 4 CDREF 5

 

 

 

 

 

 

 

End fed 40m setup

Hello to all,

During the month of December I carried out tests around the End-Fed antenna EFHW (made by BH7JYR / 4 bands design by K4EDF improved by BD5IK),
the antenna is made with 2.5mm square wire and is approximately 40m long.

Initially I was able to test the 20m version with a spool for 80m but having the 40m garden,
I switched to the 40m version (8 bands).

Here is the last test :
– I improved the height of the antenna +80cm to 1.5m on all wire (V-shaped configuration, balun at 4.2m, 5.4m – 10m further, the end at 5m).
– I was able to reduce the coaxial from 30m to 23m.
– 10,11,12m are improved (better resonnances and bandwidth).
– Reactance increase a little bit with higher setup here.

Test with two FT240-43 ferrites (one ferrite is placed at the transmitter and the other ~60cm from the balun),
During this test, I was able to achieve agreement over 60m which is improbable for this type of antenna,
you still have to deactivate the counterweight to achieve this (see table on the right) :

– the addition of ferrites reduces the reactance of the antenna (except 80m but the width of the band increases a little).

Initial test (no ferrites) :

Conclusion: I am very happy with this antenna, it is a good compromise between the 8 bands covered and the general efficiency
of the antenna, I still need to improve the ground of the antenna, put a real stake and retouch the counterweight a little.

Here is some photos :
– note that I attached the ferrite to the counterweight to reduce the load on the coaxial cable.

73 to all,

PHP code profiling (debian12/php8.2 + WinCacheGrind).

Hello to all,

Here is my setup for php code profiling for developpement, this is very useful for identifying code calls that take time to load the page,
for example a forgotten memory cache or an SQL query to optimize.

First of all you need the PHP module, here i’m using XDEBUG 3.2.1 debian package for PHP 8.2.
The setup is very simple :

aptitude install php8.2-xdebug

vim /etc/php/8.2/mods-available/xdebug.ini

zend_extension=xdebug.so

xdebug.profiler_enable_trigger = 1
xdebug.output_dir = /your/tmp/
xdebug.start_with_request = trigger
xdebug.mode = profile
xdebug.profiler_output_name = cachegrind.out.%p

/etc/init.d/apache2 restart

To optain the cachegrind file, simple call your URL by adding « XDEBUG_PROFILE=1 » :
http://yoururl/?XDEBUG_PROFILE=1

Then open it into your XDEBUG client, here i’m using the old « WinCacheGrind » program you will optain something like that :
You can now sort all your code by function and loading time :

Good luck for debug session 😉

 

Webcontrol radio transceiver !

Hello to all,

CRX-COM is now in version 1.0.4 release 5. I’ve migrate the server.js to node v16, serialport v10. Docker file is also update.

For info, the program can be run :
– with manual nodejs setup (v16) with the bin.js file.
– with LINUX/WINDOWS/MAC via the binary files (via pkg).
– with Docker.
I’ve test it here with Windows 10, MCHF/RS-918 and related transceiver (ft817 protocol)
and Google Chrome.     73 to all,

Contacts radioamateurs via le relais Vendéen du Mont des Alouettes.

Depuis mon arrivée sur mon nouveau QTH des Deux-Sèvres, je n’avais pas eu l’occasion d’entendre le relais du Mont des Alouettes,
C’est maintenant chose faite, étant à l’écoute du relais du Mont des Alouettes ce matin ( https://fr.aprs.fi/info/a/F6ZCU ),

j’ai eu l’occasion de contacter quelques copains en VHF (avec mon VX-8 et mes 5W dans la maison) :
F6HCC
F4JON
F6GNP/M
F5OKL/M

Pour ceux qui ne connaissent pas déjà ce site pour afficher la propagation VHF : https://vhf.dxview.org/
Ici j’utilise ce relais depuis plusieurs années ( sur le 56, 44 et maintenant sur mon QTH du 79).

73 à tous,

PS: attention il faut une tonalité en 1750 Hz
pour le déclenchement + un CTCSS à 103.5Hz.

(c) Photo aérienne du Mont c’est ici : https://www.facebook.com/360144350773412/posts/1943866005734564/

 

Security hardening in WordPress

Here I suggest you see how to increase the level of security of your WordPress instance. Here I use an APACHE service with NGINX in front for the SSL part and VARNISH for the cache.
From a software point of view there are WP extensions like « WP Hardening » to secure the software part but that’s not all, the application server / reverse proxy part is also very important.


APACHE Configuration  : 

Here we block the call of readme.txt / html from plugins folder, the all of xmlrpc.php for pingback attack and we also block the access of « .git » folder & configuration (yml and gitignore).
We also protect the WP instance from user enumeration attack (via the wp v2 users API call) :

#############################################
# Vhost security
#
# WordPress REST API
# WP REST API block json requests to users and comments
# Block/Forbid Requests to : /wp-json/wp/v2/users and wp-json/wp/v2/comments
# WP REST API request methods : GET, POST, PUT, PATCH, DELETE

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC]
RewriteCond %{REQUEST_URI} ^.*wp-json/wp/v2/(users|comments) [NC]
RewriteRule ^(.*)$ - [F]
#
# WordPress XML-RPC Pingback Abuse
#
<Files xmlrpc.php>
    Order deny,allow
    Deny from all
</Files>

#protect access to txt/html readme :
<files readme.txt>
order allow,deny
deny from all
</files>
<files readme.html>
order allow,deny
deny from all
</files>


#
# Dont expose .git folder
#
<Directory /www_root/yoursite/html/.git>
    Order deny,allow
    Deny from all
   <Files "*">
    Order deny,allow
    Deny from all
   </Files>
</Directory>
#
# Dont expose  .gitignore file.
#
<Files .gitignore>
    Order deny,allow
    Deny from all
</Files>
#
# Dont expose  .gitlab-ci.yml file.
#
<Files .gitlab-ci.yml>
    Order deny,allow
    Deny from all
</Files>
#############################################


Access rights on the WP file system :

Another point which is however basic but quite often neglected remains the access rights to WP files/folders.
Here is the setting up of rights (here my user and group are the same, namely www-data):

find /www_root/yoursite/html/ -type f -exec chmod 0644 {} \;
find /www_root/yoursite/html/ -type d -exec chmod 0755 {} \;
find /www_root/yoursite/html/wp-content -type d -exec chmod 0775 {} \;
find /www_root/yoursite/html/wp-content -type f -exec chmod 0664 {} \;
chown -R www-data:www-data /www_root/yoursite/html/


NGINX Configuration :

Here it is the NGINX / VARNISH services that provide the « front/reverse proxy » part,
I add control of the wp-admin URL & access to wp-login.php, with IP filtering.

        location ~ ^/(wp-admin|wp-login\.php) {
                allow [MY IP ADDRESS];
                deny all;
                proxy_set_header Host $host;
                proxy_pass   http://[VARNISH IP]:8090;
                proxy_set_header      X-Real-IP       $remote_addr;
                proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header      X-Forwarded-Proto https;
                proxy_set_header      X-Forwarded-Port 443;
         }

Another important point is to secure the HTTP headers returned by NGINX:

add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header 'Referrer-Policy' 'origin';
add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
etag off;

Don’t forget to check the correct configuration via this site: https://securityheaders.com/

Finally a last point concerns the SSL configuration, here I propose a very effective « generic » configuration,
I use it here via an « include » in my VHOST NGINX :      ( DH param is generate via : openssl dhparam -out dhparams.pem 4096 )

#https://ssl-config.mozilla.org
#ssl on;
listen 443 ssl;
listen 80;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_dhparam "/etc/pki/nginx/dhparams.pem";
ssl_session_cache shared:MozSSL:10m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_tickets off;

For the SSL check, the site https://www.ssllabs.com/ssltest/ is available,
note that to generate an up-to-date configuration the site https://ssl-config.mozilla.org/ is the ideal tool.

For those who want to go even further, I also recommend blocking/filtering user agents via this project:
https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/tree/master/conf. d

And also IP filtering with automatic blocking/or by reputation (fail2ban, crowdsec, ipset list etc…).