Upgrade from Ubuntu Precise VPS to Xenial

Su questa pagina:

Primo passo: Verificare la versione presente sul sistema

# E' importante sapere qual'e' la versione presente
lsb_release -a

# La risposta sara' di questo tipo:
#
# No LSB modules are available.
# Distributor ID: Ubuntu
# Description:    Ubuntu 12.04.5 LTS
# Release:        12.04
# Codename:       precise
#
# In questo caso e' necessario eseguire l'aggiornamento a Ubuntu 14_04 LTS.

# E' importante sapere se il sistema e' a 32 o 64 bits:
uname -i

# Potra' risultare 'i386' per i sistemi a 32 bits, altrimenti 'X86_64'<br />

Disattivazione del crontab

Prima dell'aggiornamento è necessario disabilitare l'esecuzione di uno dei cronjob, altrimenti verrà  inviata ogni minuto un'email di avviso.

Questo cronjob può essere trovato nel file '/etc/crontab'. E si deve commentare la seguente riga:

* * * * * root /opt/masonsql/bin/cronjobs /opt/demo_masonsql/etc/apache2.demo_masonsql.conf
È necessario riattivare la stessa linea, ma solo alla fine dell'aggiornamento.

Da Ubuntu 12_04 LTS (Precise Pangolin) a Ubuntu 14_04 LTS (Trustly)

Per aggiornare a Ubuntu 16_04 LTS è obbligatorio aggiornare prima alla Ubuntu 14_04 LTS.

È necessario fare il backup / snapshot prima di iniziare qualunque aggiornamento.

Si consiglia inoltre di eseguire i comandi da "screen" per evitare problemi se vi fosse una interruzione del collegamento.
# Si procede con privilegi di root.
sudo su -

# Aggiornamento dei pacchetti
apt-get update
apt-get upgrade
apt-get dist-upgrade 
apt-get autoremove

# Verra' usato il comando 'update-manager-core', quindi verificare la sua esistenza
apt-cache policy update-manager-core

# Se nell'output del comando ci sara' la riga:
# ...
# Installato: (nessuno)
# ...
# Proseguire con la sua installazione:
apt-get install update-manager-core

# Eseguire l'utility per installare automaticamente l'aggiornamento del sistema
do-release-upgrade

Problemi con do-release-upgrade

Con questo comando verrà eseguito il tentativo di aggiornare automaticamente il sistema alla versione LTS successiva, la 14.04 in questo caso.
Per questo, saranno necessarie alcune decine di minuti.

Se si verificherà un errore critico, il comando sarà interrotto mostrando una descrizione sommaria del problema. Si potranno ottenere maggiori dettagli leggendo il file di log:

/var/log/dist-upgrade/main.log

Bisognerà ricercare la riga con la scritta 'ERROR' verso la parte finale del file, e che riporta la causadell'interruzione.

# Un esempio di errore del comando *do-release-upgrade* e' riportato nella seguente riga,
# mostrando che il pacchetto postgresql-plperl-9.1 non puo' essere disinstallato
# perche' presente nella blacklist delle rimozioni:

  2017-04-03 17:54:23,100 ERROR Dist-upgrade failed: 'Il pacchetto "postgresql-plperl-9.1" e' selezionato per la rimozione, ma e' nella blacklist per la rimozione.'

# In questo caso e' necessario rimuovere il pacchetto con:
apt-get remove postgresql-plperl-9.1

# E solo alla fine dell'aggiornamento si dovra' installarlo di nuovo con:
apt-get install postgresql-plperl

Se l'errore riscontrato è relativo a non avere abbastanza spazio nel disco, è necessario provare il seguente comando per aprire lo spazio:
apt-get autoclean
Se non fosse sufficiente si dovrà temporaneamente allargare lo spazio disponibile nella VPS

Da Ubuntu 14_04 LTS (Trustly) a Ubuntu 16_04 LTS (Xenial)

È necessario fare il backup / snapshot prima di iniziare qualunque aggiornamento.

# Aggiornamento dei pacchetti
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get autoremove

# Verra' usato il comando 'update-manager-core', quindi verificare la sua esistenza
apt-cache policy update-manager-core

# Se nell'output del comando ci sara' la riga:
# ...
# Installed: (none))
# ...
# Proseguire con la sua installazione:
apt-get install update-manager-core

# Eseguire l'utility per installare automaticamente l'aggiornamento del sistema
do-release-upgrade

Vedere il paragrafo 'Problemi con do-release-upgrade' per avere una traccia sulla gestione degli eventuali errori segnalati da questo comando.

Richiesta del Reboot di sistema

Alla conclusione del comando 'do-release-upgrade', un messaggio richiederà il restart della macchina. Ma questo potrà essere fatto solo dopo le seguenti operazioni:

# Installare il sistema 'upstart' che gestisce gli script di init
apt-get install upstart-sysv upstart-bin upstart

# Nel file */etc/rc.local* e' necessario collocare le seguenti righe prima di 'exit 0'
chmod 666 /dev/null
chmod 666 /dev/random /dev/urandom

# Finalmente si potra' inizializzare la macchina
reboot

Syslog

  • Logrotate è configurato per ruotare il file mail.info che non esiste. Per evitare errori conviene crearlo, anziché modificare i file di configurazione.
touch /var/log/mail.info
chown syslog.adm /var/log/mail.info

Dopo il Reboot

# Verificare che il sistema sia veramente alla versione desiderata
lsb_release -a

# La risposta dovra' essere del tipo:
# ...
# Description:    Ubuntu 16.04.2 LTS
# Release:        16.04
# Codename:       xenial

Aggiungere "multiverse" ai repository:
sudo apt-get install software-properties-common
sudo apt-add-repository multiverse

Riattivare nel file '/etc/apt/soucers.list' e in tutti i files nella directory '/etc/apt/sources.list.d/' le righe che sono indicate come disabilitate durante l'aggiornamento e, tranne per quelle con sorgente 'webmin', modificare il nome della distribuzione in esse riportato, da 'trusty' o 'precise' a 'xenial'.

Se avrai un avviso simile a questo mentre stai usando 'apt-get' dovrai seguire questa procedura:

# Quando si tenta un 'apt-get update' l'esecuzione termina con l'avviso seguente
apt-get update
...
N: Viene ignorato il file "50unattended-upgrades.ucf-dist" nella directory "/etc/apt/apt.conf.d/" poiche' ha un'estensione non valida

# Cancellare il file che causa l'avviso:
rm /etc/apt/apt.conf.d/50unattended-upgrades.ucf-dist

Aggiornare MasonSQL

Per il corretto funzionamento con Apache 2.4 è necessario aggiornare il contenuto della directory '/opt/masonsql'.
A questo scopo si può copiare l'intera directory da un server esistente oppure aggiornare con SVN.

cd /tmp
svn co https://www.leader.it/svn/masonsql/trunk masonsql_trunk
cd masonsql_trunk
#
cp bin/cronjobs /opt/masonsql/bin/
chown root.root /opt/masonsql/bin/cronjobs
chown 700 /opt/masonsql/bin/cronjobs
#
cp etc/* /opt/masonsql/etc/
chown root.www-data /opt/masonsql/etc/apache2.masonsql.conf
chmod 640 /opt/masonsql/etc/apache2.masonsql.conf
#
cp lib/Auth_AC/*.pm  /opt/masonsql/lib/Auth_AC/
cp lib/MasonSQL/*.pm /opt/masonsql/lib/MasonSQL/
cp lib/MasonSQL/Report/Unoconv.pm /opt/masonsql/lib/MasonSQL/Report/
#
cp report/* /opt/masonsql/report/
chown root.www-data /opt/masonsql/report/*
(cd /opt/masonsql/report/; chown www-data log repmandxp.sh www-data_home_dir)
#
cp doc/* /opt/masonsql/doc/
cp -a htdocs /opt/masonsql/
chown -R root.www-data /opt/masonsql/htdocs
#
cp -a utility /opt/masonsql/
#
rm -r /opt/masonsql/perlbrew
rm -r /tmp/masonsql_trunk

Apache 2

# Per riattivare apache2 e' conveniente salvare la configurazione utilizzata
# sul vecchio sistema e re-installare il pacchetto del server
mv /etc/apache2 /etc/apache2_old
apt-get purge apache2
apt-get install apache2

# E' necessario disabilitare i site di default di apache
a2dissite 000-default
a2dissite default-ssl

# Creare i link per il site masonsql
ln -s /opt/demo_masonsql/etc/apache2.demo_masonsql.conf /etc/apache2/sites-available/demo_masonsql.conf

# e abilitare il site
a2ensite demo_masonsql

Bisogna anche attivare i moduli necessari per il funzionamento di masonsql con apache 2.4 e preparare le directory di log.
# Rimuovere e re-installare alcuni moduli, e poi attivarli
apt-get purge libapreq2-3 libapache2-mod-apreq2
apt-get install libapreq2-3 libapache2-mod-apreq2
a2enmod apreq2
apt-get purge libapache2-mod-perl2
apt-get install libapache2-mod-perl2
a2enmod perl

# Disabilitare i moduli non piu' necessari
a2dismod mpm_event
a2dismod mpm_worker

# Abilitare i moduli necessari
a2enmod auth_form
a2enmod log_forensic
a2enmod mpm_prefork
a2enmod request
a2enmod rewrite
a2enmod session
a2enmod socache_shmcb
a2enmod ssl

# Preparare le directory di log e modificare i permessi
chmod 755 /var/log/apache2
mkdir /var/log/apache2/masonsql
chown root.www-data /var/log/apache2/masonsql
chmod 770 /var/log/apache2/masonsql
ln -s /var/log/apache2/masonsql /var/log/apache2/demo_masonsql

# Ripartenza di apache2
service apache2 restart

Quando apache2 riparte, possono essere segnalati degli errori di mancato riscontro di alcuni moduli perl. In questo caso, la procedura da seguire è sempre la stessa.

# Considerando il seguente messaggio di errore come esempio
Can't locate String/Diff.pm in @INC (you may need to install the String::Diff module)

# Si desume che il modulo String::Diff deve essere installato, e quindi si ricerchera'
# l'esistenza del corrispondente pacchetto nel repository
apt-cache search string-diff

# La risposta al comando potrebbe essere
...
libstring-diff-perl - simple diff for strings
...

# Il pacchetto esiste nel repository e quindi deve essere installato da APT.
# Solo nel caso che non fosse esistito, si sarebbe installato dal CPAN
cpan -i String::Diff

Inoltre, quando si riavvia l'apache, potrebbero esserci errori di sintassi in 'Options', seguire questa procedura per ciascuna di esse.

# Considerando il seguente messaggio di errore come esempio
L'output del test di configurazione è stato:
AH00526: Errore di sintassi sulla riga 313 di /opt/masonsql/etc/apache2.masonsql.conf:
O tutte le opzioni devono iniziare con + o - oppure nessuna opzione può.
L'azione 'configtest' non è riuscita.

# Trovate il file dell'errore e la linea giusta e inserisci un segno piu' '+' prima di  'Indexes'
Options +Indexes -MultiViews

Inoltre devono essere adattate le direttive Apache per i permessi. per questo fare riferimento al documento:

Moduli e pacchetti installati o aggiornati manualmente

Seguono le 2 liste di pacchetti e moduli che durante le nostre esperienze pratiche, abbiamo avuto la necessità di installare o comunque aggiornare manulamente:

Da repository:
apt-get install libstring-diff-perl libapache2-request-perl 
apt-get install libapache-dbi-perl libstring-random-perl libdbd-pg-perl

Da CPAN:
cpan DBD::Pg
cpan Mail::Sender
cpan App::cpanminus
cpan Apache2::AuthCookie
cpan SQL::Statement
cpan HOP::Lexer
cpan SQL::Dialects::ANSI
cpan Sys::RunAlone
cpan MIME::Parser
cpan Archive::Tar::Wrapper
cpan Archive::Zip
cpan Perl6::Form
cpan HTTP::BrowserDetect
cpan IPC::Run::SafeHandles
cpan Text::Balanced
cpan Captcha::reCAPTCHA
cpan ODF::lpOD
cpan DTL::Fast
cpan Image::Info

PostgreSQL

Dopo aver rimosso tutti gli errori visualizzati durante la ripartenza di apache, probabilmente la comunicazione web non sarà ancora possibile: il database non è stato aggiornato alle condizioni richieste dal server apache 2.4.

Seguire la pagina: https://www.leader.it/bin/view/MasonSQL/DatabaseAccess per la giusta procedura di connessione al DB del server in questione attraverso il protocollo ssh + tunneling.

Per prima cosa si deve possedere le credenziali di un utente amministratore di postgresql sul server.

ATTENZIONE: Verificare che non esistano più di un server postgresql installati e funzionanti in attesa su porte differenti oltre a quella di default (porta 5432).

Eseguire i seguenti comandi SQL da pgAdmin 3 o psql:

CREATE TABLE public.session (
  id serial NOT NULL,
  id_anagrafiche integer,
  user_agent character varying,
  user_ip character varying(15),
  session character varying(32),
  session_time timestamp without time zone,
  previus_session_time timestamp without time zone,
  session_inactive_time integer,
  CONSTRAINT session_pkey PRIMARY KEY (id),
  CONSTRAINT session_id_anagrafiche FOREIGN KEY (id_anagrafiche)
      REFERENCES public.anagrafiche (id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE CASCADE
);

ALTER TABLE public.session OWNER TO postgres;
GRANT ALL ON TABLE public.session TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.session TO masonsql;
CREATE INDEX fki_session_id_anagrafiche ON public.session USING btree (id_anagrafiche);
CREATE UNIQUE INDEX session_idx ON public.session USING btree (session);
GRANT SELECT, UPDATE ON SEQUENCE public.session_id_seq TO masonsql;

ALTER TABLE public.anagrafiche ADD COLUMN concurrent_sessions boolean;

TRUNCATE public.recordset,public.recordset_rows;

ALTER TABLE public.recordset DROP COLUMN id_anagrafiche;

ALTER TABLE public.recordset ADD COLUMN id_session integer;

ALTER TABLE public.recordset ADD CONSTRAINT recordset_id_session FOREIGN KEY (id_session)
    REFERENCES public.session (id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE CASCADE;

ALTER TABLE public.funzioni ADD COLUMN menu_style character varying(200);
COMMENT ON COLUMN public.funzioni.menu_style IS 'Stile del menù (CSS)';

ALTER TABLE public.anagrafiche ADD COLUMN last_change_password timestamp without time zone;
COMMENT ON COLUMN public.anagrafiche.last_change_password IS 'Data dell''ultimo cambiamento della password';

CREATE TABLE public.odt_report_fields (
  id serial NOT NULL ,
  key character varying(100),
  function character varying(1024),
  id_odt_reports integer NOT NULL,
  format character varying(256),
  CONSTRAINT odt_report_fields_pkey PRIMARY KEY (id),
  CONSTRAINT odt_report_fields_id_odt_reports FOREIGN KEY (id_odt_reports)
      REFERENCES public.odt_reports (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.odt_report_fields OWNER TO postgres;
GRANT ALL ON TABLE public.odt_report_fields TO postgres;
GRANT SELECT ON TABLE public.odt_report_fields TO report;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.odt_report_fields TO masonsql;
GRANT SELECT, UPDATE ON SEQUENCE public.odt_report_fields_id_seq TO masonsql;

Se necessario eseguire anche:
ALTER TABLE public.anagrafiche ADD COLUMN last_change_password timestamp without time zone;
COMMENT ON COLUMN public.anagrafiche.last_change_password IS 'Data dell''ultimo cambiamento della password';
ALTER TABLE public.anagrafiche ADD COLUMN no_psw_expiration boolean;
COMMENT ON COLUMN public.anagrafiche.no_psw_expiration IS 'Account senza controllo di scadenza (account di sistema)';
ALTER TABLE public.anagrafiche ADD COLUMN no_change_password boolean;
COMMENT ON COLUMN public.anagrafiche.no_change_password IS 'Cambio password disabilitato';
ALTER TABLE public.anagrafiche ADD COLUMN cell_sms character varying(20);
UPDATE anagrafiche SET no_psw_expiration = null, last_change_password = now();
CREATE OR REPLACE FUNCTION public.change_password(
    text,
    text,
    boolean)
  RETURNS boolean AS
$BODY$
  DECLARE
    user_login ALIAS FOR $1;
    new_password ALIAS FOR $2;
    force_change_password ALIAS FOR $3;
  BEGIN
    UPDATE public.anagrafiche 
    SET "password" = md5(new_password), 
        last_change_password = CASE WHEN force_change_password THEN null ELSE now() END,
        session_time = now()
    where login = user_login;
    RETURN true;
  END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION public.change_password(text, text, boolean) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION public.change_password(text, text, boolean) TO postgres;
GRANT EXECUTE ON FUNCTION public.change_password(text, text, boolean) TO masonsql;
REVOKE ALL ON FUNCTION public.change_password(text, text, boolean) FROM public;

ODT Report

I report di tipo ODT Report vanno aggiornati, sostituendo manualmente la variabile GROUP_ID con REPORT_ID in tutte le sue occorrenze nei template presenti nel menu [Autorizzazioni]->[ODT Reports]

Inoltre delle query SQL che utilizzano GROUP_ID vanno cancellate la UNION e la corrispondente query con GROUP_ID negativo.

Demone Unoconv

Conclusione dell'aggiornamento

Eseguire il comando per cancellare fstrim, non necessario in una VPS che utilizza il filesystem del server ospitante:

rm /etc/cron.weekly/fstrim

Se l'aggiornamento prevede anche la sostituzione del motore di generazione dei report, si possono anche eliminare i file di Report Manager e rimuovere il package wine assieme ai package non più utilizzati. A questo scopo cancellare file e cartelle non necessari.
rm /opt/masonsql/report/libpq.so /opt/masonsql/report/libpq.so.5.2
rm -r /opt/masonsql/report/rpdesigner-2_9a /opt/masonsql/report/rpservercline-2_9a
rm -r /opt/masonsql/report/www-data_home_dir

apt-get purge wine wine1.4 wine1.4-amd64 wine1.4-common wine1.4-i386:i386 winetricks wine1.6
apt-get autoremove

Controllare Let's Encrypt SSL dopo l'aggiornamento

Se Let's Encrypt SSL è utilizzato nel server, devi controllare se funziona, dopo l'aggiornamento seguendo le note in: https://www.leader.it/MasonSQL/LetsencryptSSL

#Controlla Let's Encrypt SSL sta lavorando con
/opt/certbot/certbot-auto renew

# Se esiste un errore nell'esecuzione, provare la seguente procedura per generare il certificato
# E' necessario innanzitutto assicurarsi che la porta 80 del server sia aperta a Internet
rm -r /root/.local/share/letsencrypt
rm -r /opt/certbot
mkdir /opt/certbot 
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto run
# A richiesta "Inserisci nel tuo dominio" rispondi con "c"
# Prova se funziona
./certbot-auto renew

Errore dal crontab: pacchetto ttf-mscorefonts-installer

Se si presenta un errore nell'aggiornamento dei font del pacchetto ttf-mscorefonts-installer, dipende dalla mancanza del pacchetto apt-transport-https

apt-get install apt-transport-https
apt-get purge ttf-mscorefonts-installer
apt-get install ttf-mscorefonts-installer
Versione pagina: r29 - 07 Sep 2023, GuidoBrugnara
Questo sito utilizza FoswikiCopyright (©) Leader.IT - Italy P.I. IT01434390223 Informativa privacy & uso dei cookies