* * * *

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

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

Inserisci il nome utente, la password e la durata della sessione.

93 Visitatori, 0 Utenti

Autore Topic: RunCommand e LXD, esecuzione bloccata  (Letto 288 volte)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
RunCommand e LXD, esecuzione bloccata
« il: Febbraio 06, 2025, 03:24:20 pm »
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:
Codice: [Seleziona]
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:
Codice: [Seleziona]
$ 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:
Codice: [Seleziona]
sudo ./testlxc

Quì sotto il codice.

Codice: [Seleziona]
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:
Codice: [Seleziona]
$ 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:
Codice: [Seleziona]
sudo lxc list 
o
Codice: [Seleziona]
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
« Ultima modifica: Febbraio 06, 2025, 03:38:09 pm da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1503
  • Karma: +45/-0
  • Prima ascoltare, poi decidere
Re:RunCommand e LXD, esecuzione bloccata
« Risposta #1 il: Febbraio 06, 2025, 06:21:51 pm »
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

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
Re:RunCommand e LXD, esecuzione bloccata
« Risposta #2 il: Febbraio 07, 2025, 09:27:58 am »
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

Codice: [Seleziona]
# 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

  • Scrittore
  • Hero Member
  • *****
  • Post: 1503
  • Karma: +45/-0
  • Prima ascoltare, poi decidere
Re:RunCommand e LXD, esecuzione bloccata
« Risposta #3 il: Febbraio 07, 2025, 09:49:50 am »
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

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
Re:RunCommand e LXD, esecuzione bloccata
« Risposta #4 il: Febbraio 07, 2025, 10:06:57 am »
lanciando a riga di comando è un po' diverso...
mi sa che appena h omodo mi metto a cercare nei forum lxd...

Codice: [Seleziona]
# 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

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
Re:RunCommand e LXD, esecuzione bloccata
« Risposta #5 il: Febbraio 07, 2025, 04:38:38 pm »
comunque questo programmino i C funziona benissimo...

Codice: [Seleziona]
#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

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2961
  • Karma: +20/-4
Re:RunCommand e LXD, esecuzione bloccata
« Risposta #6 il: Febbraio 11, 2025, 09:10:08 am »
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)

 

Recenti

How To

Utenti
  • Utenti in totale: 809
  • Latest: angman
Stats
  • Post in totale: 19496
  • Topic in totale: 2338
  • Online Today: 141
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 93
Total: 93

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.