Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

TDD o Test-Driven Development
immagine docker per lavorare con lazarus e free pascal
Indice
Installare lazarus su mac osx sierra
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non)
Advanced Record Syntax: un esempio pratico
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
DB concetti fondamentali e DBGrid
Advanced Record Syntax
DB concetti fondamentali e ZeosLib
DB concetti fondamentali e connessioni standard
guida all'installazione di fpc trunk da subversion in linux gentoo
Creare un server multithread
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Free Pascal e Lazarus sul Raspberry Pi
fpcup: installazioni parallele di lazarus e fpc
Ubuntu - aggiornare free pascal e lazarus
Come interfacciare periferica twain
Lazarus 1.0
Aspetto retrò (Cmd Line)
Disporre le finestre in un blocco unico (come Delphi)
Zeos ... dietro le quinte (prima parte)
Lavorare con file in formato JSON con Lazarus
Overload di operatori
Dataset virtuale
Linux + Zeos + Firebird
Pascal Script
La gestione degli errori in Lazarus
Indy 10 - Invio email con allegati
Brute force
Le permutazioni
Da DataSource a Excel
StatusBar - aggirare l'errore variabile duplicata
Visualizzare un file Html esterno
Evidenziare voci TreeView
Toolbar
Direttiva $macro
Indy gestiore server FTP lato Client
TImage su Form e Panel
PopUpMenu sotto Pulsante (TSpeedButton)
Conversione numerica
Proprietà
Funzioni a parametri variabili
Overload di funzioni
Liste e puntatori
Conferma di chiusura di un applicazione
Il file: questo sconosciuto
UIB: Unified Interbase
System Tray con Lazarus
Intercettare tasti premuti
LazReport, PDF ed immagini
Lazarus e la crittografia
Ampliare Lazarus
Generare controlli RUN-TIME
TTreeview e Menu
TTreeView
Utilizzare Unità esterne
Lavorare con le directory
Realizzare programmi multilingua
Codice di attivazione
File INI
Esempio lista in pascal
Stabilire il sistema operativo
Recuperare codice HTML da pagina web
Trascinare un file nel programma
Mandare mail con Lazarus
Welcome to Italian community of Lazarus and Free Pascal. Please login or sign up.

Recenti

How To

Utenti
Stats
  • Messaggi totali: 20.582
  • Totale discussioni: 2.471
  • Online today: 17
  • Online ever: 5.949 (Luglio 30, 2026, 09:49:59 PM)
Utenti online
  • Users: 0
  • Guests: 7
  • Total: 7
7 Visitatori, 0 Utenti

RunCommand e LXD, esecuzione bloccata

Aperto da nomorelogic, Febbraio 06, 2025, 03:24:20 PM

Discussione precedente - Discussione successiva

nomorelogic

ciao a tutti

il problema che ho riguarda RunCommand (unit process) ma si tratta di un caso particolare in quanto sto facendo delle prove con i container linux LXD.

Il mio sistema è DEVUAN:
uname -a
Linux myhost 6.1.0-30-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.124-1 (2025-01-12) x86_64 GNU/Linux


La versione di LXD:
$ lxc --version
5.0.2


Il programma è banalissimo, lo vedete sotto e, una volta compilato, deve essere lanciato da shell come utente root o con:
sudo ./testlxc

Quì sotto il codice.


program testlxc;
uses process;

const
  LXC_BIN = '/usr/bin/lxc';

var AStdOut: string;
begin

  Writeln(LXC_BIN + ' LIST ');
  RunCommand(LXC_BIN, ['list'], AStdOut);  // questo funziona
  Writeln('output: >>');
  Writeln(AStdOut);
  Writeln('<<');


  Writeln(LXC_BIN + ' INIT ');
  RunCommand(LXC_BIN, ['init', 'ubuntu:20.04', 'u1'], AStdOut);   // quì si blocca
  Writeln('output: >>');
  Writeln(AStdOut);
  Writeln('<<');

end.



La prima invocazione di RunCommand con il parametro 'list', funziona correttamente come ci si aspetta.
La seconda invocazione, con parametro 'init' invece si blocca.

Il risultato è il seguente:
$ sudo ./testlxc
/usr/bin/lxc LIST
output: >>
+------+---------+------+------+-----------+-----------+
| NAME |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------+------+-----------+-----------+
| m1   | STOPPED |      |      | CONTAINER | 0         |
+------+---------+------+------+-----------+-----------+

<<
/usr/bin/lxc INIT


Non riesco a capire dov'è il problema.
Qualche idea?

grazie
nomorelogic


Edit:
chiaramente eseguendo da terminale:
sudo lxc list
o
sudo lxc init ubuntu:20.04 u1
il tutto funziona correttamente e senza intoppi.

Edit 2:
ho postato la richiesta anche nel forum ufficiale
https://forum.lazarus.freepascal.org/index.php/topic,70123.msg546225/topicseen.html#new
Imagination is more important than knowledge (A.Einstein)

DragoRosso

A mio parere è sicuramente un problema di privilegi.

Occhio che la shell normale in Linux (così come il cmd in Windows) potrebbe agire in modo diverso se chiamata da un processo come il tuo programma oppure dal sistema (tramite il terminale).

E secondo me il debugger non ti aiuterebbe più di tanto anche se potessi lanciarlo come sudo.

Non ci sono strumenti in Linux per vedere e monitorare le attività anche come storico (tipo il log eventi di Windows) ?

O LCX non ha un proprio log ?
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

ora nel log non c'è nulla riguardo ai lanci dei singoli container
sto cercando di capire se posso aumentare il livello di log

per ora ho trovato come lanciare un monitor
e questo è quello che mi visualizza tral lancio del programma in free pascal fino al crash


# lxc monitor --type=logging --pretty
DEBUG  [2025-02-07T09:18:42+01:00] Event listener server handler started         id=0291e421-5d89-4bb2-8652-c739d874f13f local=/var/lib/lxd/unix.socket remote=@
DEBUG  [2025-02-07T09:18:46+01:00] Handling API request                          ip=@ method=GET protocol=unix url=/1.0 username=root
DEBUG  [2025-02-07T09:18:46+01:00] Handling API request                          ip=@ method=GET protocol=unix url="/1.0/instances?filter=&recursion=2" username=root
DEBUG  [2025-02-07T09:18:46+01:00] GetInstanceUsage started                      instance=m1 project=default
DEBUG  [2025-02-07T09:18:46+01:00] GetInstanceUsage finished                     instance=m1 project=default
DEBUG  [2025-02-07T09:19:05+01:00] Handling API request                          ip=@ method=GET protocol=unix url=/1.0 username=root
DEBUG  [2025-02-07T09:19:05+01:00] Handling API request                          ip=@ method=GET protocol=unix url="/1.0/instances?filter=&recursion=2" username=root
DEBUG  [2025-02-07T09:19:05+01:00] GetInstanceUsage started                      instance=m1 project=default
DEBUG  [2025-02-07T09:19:05+01:00] GetInstanceUsage finished                     instance=m1 project=default
Imagination is more important than knowledge (A.Einstein)

DragoRosso

E se lo lanci a riga di comando quali sono le differeneze ?

Penso che tu debba "carpire" qualche differenza che si palesa tra l'uno e l'altro metodo.

Anche perchè il problema sembra di capire è nella "riga di comando", quindi cosa fà Linux nei due casi.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

lanciando a riga di comando è un po' diverso...
mi sa che appena h omodo mi metto a cercare nei forum lxd...


# lxc monitor --type=logging --pretty
DEBUG  [2025-02-07T10:04:23+01:00] Event listener server handler started         id=10b3533a-8b5a-4c7d-9263-240ba7560f2b local=/var/lib/lxd/unix.socket remote=@
DEBUG  [2025-02-07T10:04:38+01:00] Handling API request                          ip=@ method=GET protocol=unix url=/1.0 username=root
DEBUG  [2025-02-07T10:04:38+01:00] Handling API request                          ip=@ method=GET protocol=unix url=/1.0/events username=root
DEBUG  [2025-02-07T10:04:38+01:00] Event listener server handler started         id=5b060cef-15ed-4846-81fc-9c3b029fea3a local=/var/lib/lxd/unix.socket remote=@
DEBUG  [2025-02-07T10:04:38+01:00] Responding to instance create               
DEBUG  [2025-02-07T10:04:38+01:00] Handling API request                          ip=@ method=POST protocol=unix url=/1.0/instances username=root
DEBUG  [2025-02-07T10:04:38+01:00] Started operation                             class=task description="Creating instance" operation=2f75a618-e686-42e7-8d02-58fb8e710b39 project=default
DEBUG  [2025-02-07T10:04:38+01:00] New operation                                 class=task description="Creating instance" operation=2f75a618-e686-42e7-8d02-58fb8e710b39 project=default
DEBUG  [2025-02-07T10:04:38+01:00] Connecting to a remote simplestreams server   URL="https://cloud-images.ubuntu.com/releases"
DEBUG  [2025-02-07T10:04:38+01:00] Handling API request                          ip=@ method=GET protocol=unix url=/1.0/operations/2f75a618-e686-42e7-8d02-58fb8e710b39 username=root
DEBUG  [2025-02-07T10:04:41+01:00] Acquiring lock for image                      fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Lock acquired for image                       fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Acquiring lock for image                      fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Image already exists in the DB                fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Lock acquired for image                       fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Instance operation lock created               action=create instance=u1 project=default reusable=false
INFO   [2025-02-07T10:04:41+01:00] Creating instance                             ephemeral=false instance=u1 instanceType=container project=default
DEBUG  [2025-02-07T10:04:41+01:00] Adding device                                 device=eth0 instance=u1 instanceType=container project=default type=nic
DEBUG  [2025-02-07T10:04:41+01:00] Adding device                                 device=root instance=u1 instanceType=container project=default type=disk
INFO   [2025-02-07T10:04:41+01:00] Created container                             ephemeral=false instance=u1 instanceType=container project=default
DEBUG  [2025-02-07T10:04:41+01:00] CreateInstanceFromImage started               instance=u1 project=default
DEBUG  [2025-02-07T10:04:41+01:00] EnsureImage started                           fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Setting image volume size                     fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773 size=
DEBUG  [2025-02-07T10:04:41+01:00] Checking image volume size                    fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] EnsureImage finished                          fingerprint=7ec2b4a12cc3835adc983d3f73883ba35e32438a027715d4c233e88bb8fe6773
DEBUG  [2025-02-07T10:04:41+01:00] Checking volume size                          instance=u1 project=default
DEBUG  [2025-02-07T10:04:41+01:00] Set new volume size                           instance=u1 project=default size=
DEBUG  [2025-02-07T10:04:41+01:00] Mounted ZFS dataset                           dev=default/containers/u1 driver=zfs path=/var/lib/lxd/storage-pools/default/containers/u1 pool=default
DEBUG  [2025-02-07T10:04:41+01:00] Unmounted ZFS dataset                         dev=default/containers/u1 driver=zfs path=/var/lib/lxd/storage-pools/default/containers/u1 pool=default volName=u1
DEBUG  [2025-02-07T10:04:41+01:00] UpdateInstanceBackupFile started              instance=u1 project=default
DEBUG  [2025-02-07T10:04:41+01:00] CreateInstanceFromImage finished              instance=u1 project=default
DEBUG  [2025-02-07T10:04:41+01:00] Mounted ZFS dataset                           dev=default/containers/u1 driver=zfs path=/var/lib/lxd/storage-pools/default/containers/u1 pool=default
DEBUG  [2025-02-07T10:04:41+01:00] UpdateInstanceBackupFile finished             instance=u1 project=default
DEBUG  [2025-02-07T10:04:41+01:00] Unmounted ZFS dataset                         dev=default/containers/u1 driver=zfs path=/var/lib/lxd/storage-pools/default/containers/u1 pool=default volName=u1
DEBUG  [2025-02-07T10:04:41+01:00] Success for operation                         class=task description="Creating instance" operation=2f75a618-e686-42e7-8d02-58fb8e710b39 project=default
DEBUG  [2025-02-07T10:04:41+01:00] Instance operation lock finished              action=create err="<nil>" instance=u1 project=default reusable=false
DEBUG  [2025-02-07T10:04:41+01:00] Handling API request                          ip=@ method=GET protocol=unix url=/1.0/instances/u1 username=root
DEBUG  [2025-02-07T10:04:41+01:00] Event listener server handler stopped         listener=5b060cef-15ed-4846-81fc-9c3b029fea3a local=/var/lib/lxd/unix.socket remote=@
Imagination is more important than knowledge (A.Einstein)

nomorelogic

comunque questo programmino i C funziona benissimo...

#include <stdlib.h>
#include <stdio.h>

int main() {
  int status = 0;

  printf("lxc LIST\n");
  printf("Output >> \n");
  status = system("/usr/bin/lxc list -f json");
  printf("<< (Status=%d)\n\n", status);

  printf("lxc INIT\n");
  printf("Output >> \n");
  status = system("/usr/bin/lxc init ubuntu:20.04 u1");
  printf("<< (Status=%d)\n");

  return 0;
}
Imagination is more important than knowledge (A.Einstein)

nomorelogic

sembra sia un bug che si verifica quando si esegue un determinato programma esterno e si vuole leggere lo standard output

il link della segnalazione
https://gitlab.com/freepascal.org/fpc/source/-/issues/41146
Imagination is more important than knowledge (A.Einstein)

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.