İçeriğe geç

Güncelleme

Sunucu daha yeni bir sürümü günde bir kez kendisi öğrenir. Onu kurmak ise her zaman bir kişinin kararıdır: tek sunucuda Ayarlar → Sunucu Ayarları → Sunucu güncellemesi kartından, kümede elle.

Tek sunucu, güncelleme başlatıcısıyla başlıyorTek sunucu, inscada.jar olarak başlıyorKüme
NasılSunucu güncellemesi kartıBir kez elle, sonra güncelleme düğmesine geçirilirElle, küme sırasıyla

Sunucu günde bir kez (ilki açılıştan bir dakika sonra) genel sürüm kaynağına, inscada-releases’a, çalışandan daha yeni bir sürüm olup olmadığını sorar. Denetimin kendisi hiçbir şey indirmez ve kurmaz; isteği, sunucunun çalıştırdığı sürüm hakkında hiçbir şey söylemez.

Daha yeni bir sürüm, kenar çubuğunda sürümün altında Güncelleme var: … olarak, sürüm sayfasına bağlantıyla görünür. Bunu yalnızca kurulum yöneticisi görür; başka kimse görmez. Aynı bildirim, sürümün lisans bakımınızın kapsamında olup olmadığını da söyler. İnterneti olmayan bir sunucu, kaynağa ulaşılamadığını bir kez loga yazar ve çalışmaya devam eder.

Denetim varsayılan olarak açıktır. İnternete çıkmaması gereken bir saha (air-gapped, OT ağları) onu kapatır; o zaman hiç istek yapılmaz. Şunlardan herhangi biri yeter:

  • Ayarlar → Sunucu Ayarları → Genel → Güncelleme denetimi kapalı ve bir yeniden başlatma. Windows kurulumcusunun servisinde yol budur.
  • Servisin ortamında INS_UPDATE_ENABLED=false ya da komut satırında -Dins.update.enabled=false. İkisi de sayfanın önüne geçer; sayfa anahtarı kilitli gösterir.

Denetim kapalıyken kart indirme de sunamaz; sürümü elle kopyalayın (aşağıda).

  • Ayna sunucu. Kaynağın adresi sayfada yoktur. Servisin ortamındaki INS_UPDATE_URL ya da config/application.yml içindeki ins.update.url, kaynakla aynı JSON’u veren bir iç aynayı gösterebilir. Kartın indirmesi sürümün dosyalarını aynı kaynaktan alır; bu yüzden indirme sunacak bir ayna, GitHub gibi, app-<rev>.jar ve app-<rev>.jar.sig dosyalarını https üzerinden, her dosyanın size değeri ve jar’ın digest değeriyle sunar; bunlar yoksa sürüm gösterilir ama indirme için sunulmaz.
  • HTTP proxy. Denetim ve indirme, ancak JVM’e söylenirse proxy’den geçer: servisin komut satırına -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port> ekleyin (proxy’den geçmemesi gereken adresler için -Dhttp.nonProxyHosts=<hostlar>). Kullanıcı adı ve parola isteyen bir proxy desteklenmez; orada denetimi kapatın ya da ağın içinde bir ayna kullanın. Bunlar JVM seçenekleri olduğundan Ayarlar → Sunucu Ayarları onları ayarlayamaz.
Resmî sürümNightly
Kaynaktaki adıinSCADA 20261108-11inSCADA nightly … (not for production), bir pre-release
Dosyalarapp-<rev>.jar, app-<rev>.jar.sig, inscada-launcher-<rev>.zipyalnızca jar
İmzalıEvet, 20261108-11’den itibarenHayır
Güncelleme düğmesiyleEvetAsla: başlatıcı imzası olmayan jar’ı reddeder, kart da bir pre-release’i indirme için sunmaz

Güncelleme başlatıcısı bir jar’ı yalnızca sürümün imzasını doğrularsa uygular. Nightly, kurulacaksa elle kurulur.

Ayarlar → Sunucu Ayarları → Sunucu güncellemesi, güncelleme başlatıcısıyla başlayan tek bir sunucuyu günceller. Kartı açmak VIEW_SERVER_SETTINGS ister; indirmek, güncellemek ve iptal etmek UPDATE_SERVER_SETTINGS ister. İkinci yetkisi olmayan kişi sürümü, denetimleri ve ilerlemeyi görür, düğmeleri görmez.

Sunucu kendini güncelleyemiyorsa kart bunun yerine nedenini söyler — örneğin “Bu sunucu kendini bu sayfadan güncelleyemez.” Kart ancak üçü birden sağlanınca sunulur: ürün güncelleme başlatıcısıyla başlatılmış, servis yöneticisinin onu yeniden başlattığı kanıtlanmış (Şimdi yeniden başlat ile aynı denetim) ve sunucu bir küme düğümü değil.

1. Sürümü güncelleme klasörüne koyun

Section titled “1. Sürümü güncelleme klasörüne koyun”

Sürüm, kurulumun update\pending klasöründe olmalıdır (Windows’ta C:\Program Files\inSCADA\update\pending, Linux’ta /opt/inscada/update/pending). İki yolu var:

  • İndirmek. 20261108-11’den sonraki sürümlerde, günlük denetim daha yeni bir sürüm bulmuşsa ve update\pending boşsa, kart Daha yeni sürüm satırını (sürüm ve boyut) ve <sürüm> sürümünü indir düğmesini gösterir. İndirme bir neden (ve gerekiyorsa imzanızı) ister, ilerlemesini gösterir ve İndirmeyi iptal et ile durdurulabilir. Hiçbir şey kurmaz: dosyalar update\pending’e gelir, güncelleme ardından aynı karttan başlatılır. Başarısız olan ya da iptal edilen bir indirme geride hiçbir şey bırakmaz: “İndirme durdu; güncelleme klasörüne hiçbir şey konmadı.”
  • Kopyalamak. Sürüm sayfasından app-<rev>.jar ve app-<rev>.jar.sig dosyalarını update\pending’e kopyalayın. İnterneti olmayan sahada yol budur. .sig olmadan kopyalanan jar, yanında imza dosyası olmadığı için reddedilir; .sig’i sonradan kopyalamak yeter.

update\pending’de yalnızca bir jar olabilir.

Kart, hiçbir şey değişmeden önce her ön koşulu, karar verdiği sayılarla birlikte değerlendirir. Önceki biri tutmadığı için değerlendirilemeyen denetim Denetlenmedi gösterir.

DenetimNe zaman tutar
Güncelleme başlatıcısıyla başlatılmışServis inscada-launcher.jar’ı başlatıyor
Servis yöneticisi onu yeniden başlatırServis yöneticisinin (NSSM, systemd) servis kapanınca onu yeniden başlattığı kanıtlanmış
Küme düğümü değilSunucu bir kümenin parçası değil
Güncelleme klasöründe bekleyen tek bir sürümupdate\pending’de sürümü olan tam bir jar var
Güncelleme başlatıcısı sürümü kabul ediyorBaşlatıcının kendi kararı: güvenilen bir anahtarla imzalı, bir inSCADA jar’ı, çalışan sürümden yeni
Bakım sürümü kapsıyorSürüm, lisans bakımınızın bitişinde ya da öncesinde derlenmiş
Yeniden başlatma bekleyen kayıtlı bir ayar yokSunucu Ayarları’nda kaydedilip hâlâ bekleyen bir şey yok
Yedek için yerupdate\backups altındaki boş yer ≥ veritabanının iki katı, büyük olan jar’ın iki katı ve 1 GB
PostgreSQL yedekleme araçlarıSunucunun PostgreSQL sürümünden eski olmayan bir pg_dump bulunuyor (önce kurulumun kendi pgsql\bin’i)
Süren başka bir güncelleme yokSüren bir güncelleme ya da indirme yok ve son güncelleme hazır olduğunu bildirmiş

Güncelleme başlatıcısının kararı başlatıcının cevabını tam olarak gösterir: nedeniyle birlikte Kabul edildi ya da Reddedildi, çalışan sürüm ve sürümü kimin imzaladığı. “Güncelleme, her denetim geçtiğinde başlayabilir.”

Güncelle ve yeniden başlat bir neden ister — denetim izi onu, güncellemeyi kimin istediğiyle birlikte kaydeder — ve kurulum gerektiriyorsa imzanızı. Her güncellemenin (ve her indirmenin) imzalı olmasını isteyen kurulum, Ayarlar → Sunucu Ayarları’ndaki İmza gerektiren işlemler’e APPLICATION_UPDATE ekler.

Ardından olanlar:

  1. SCADA çalışmaya devam ederken veritabanının yedeği alınır. Kart Yedek için veritabanının anlık görüntüsü açılıyor, Veritabanının yedeği alınıyor (ne kadarının yazıldığıyla), Yedek, denetlemek için geri okunuyor gösterir. Buraya kadar Güncellemeyi iptal et onu durdurur ve hiçbir şey değişmez.
  2. Sunucu yeniden başlar. “Sunucu … sürümünü kurmak için yeniden başlıyor.” Güncelleme başlatıcısı sürümü yeniden denetler ve ürün açılmadan önce inscada.jar’ın yerine koyar; önceki jar update\kept’e gider, yedek update\backups’ta kalır.
  3. Yeni sürüm başlar ve hazır olduğunu bildirir. Sayfa yeniden bağlanır ve “Yeni sürüm çalışıyor. Önceki jar ve veritabanı yedeği … sunucuda saklanıyor.” der.

Değişiklik kayda geçer: denetim izinde istek (neden ve varsa imzayla) ve sonucu, olay logunda “This installation was updated from X to Y.” satırı bulunur.

Yedek alınırken hiçbir şey durmaz: SCADA, cihaz haberleşmesi ve kullanıcılar devam eder. SCADA yeniden başlatmadan yeni sürüm ayağa kalkana kadar kesilir: bir servis açılışı, artı yeni sürümün veritabanı geçişleri — büyük bir historian’da bunlar dakikalar sürebilir. Kart, sunucunun cevap vermediğini söylemeden önce 15 dakika bekler; bu da tek başına bir hata değildir. Güncellemeyi kısa bir durmanın kabul edilebildiği bir zamana planlayın.

Kart ne derNe olduNe yapılır
“Güncelleme durdu; hiçbir şey değişmedi.”Yedek başarısız oldu ya da iptal edildi; SCADA hiç durmadıNedeni okuyun, düzeltin (disk, pg_dump), yeniden deneyin
“Güncelleme başlatıcısı … tarihinde güncellemeyi reddetti ve önceki sürüm çalışmaya devam etti.”Yeniden başlatmada başlatıcı sürümü uygulamadıÖnceki sürüm çalışıyor; nedeni okuyun. Kendisi yüzünden (imza, sürüm) reddedilen jar bir daha alınmaz
”…, … tarihindeki güncellemeden sonra başlamadı.”Yeni sürüm üç açılışta hazır olduğunu bildirmedi. Hiçbir şey geri alınmadıKarar verin: nedeni düzeltin ya da geri alın (aşağıda)
“Sunucu, güncelleme için yeniden başladığından beri 15 dakikadır cevap vermiyor.”Hâlâ açılıyor, belki geçişleri çalıştırıyor, ya da açılmıyorSunucunun loguna bakın; ancak ayağa kalkmıyorsa geri alın

Kendiliğinden geri alma yoktur; kararı bir kişi verir.

Geri alma bu sunucuyu önceki jar’a ve o güncellemenin aldığı veritabanı yedeğine döndürür. Komutu, ayağa kalkmayan bir güncellemede kartta (“Önceki sürüme dönmek için bunu sunucuda yönetici olarak (Linux’ta root) çalıştırın:”), sunucunun logunda UPDATE FAILED satırında ve UpdateTool status çıktısında gösterilir. Windows’ta yönetici komut isteminde:

"C:\Program Files\inSCADA\graalvm-jdk-21\bin\java.exe" -cp "C:\Program Files\inSCADA\inscada-launcher.jar" com.inscada.launcher.tool.UpdateTool rollback

Önce her şeyi denetler, ne yapacağını söyler ve ancak yes yazarsanız devam eder. Hiçbir şey silinmez: başarısız sürümün çalıştığı veritabanı yeniden adlandırılıp saklanır.

Mevcut bir kurulumu güncelleme düğmesine geçirmek

Section titled “Mevcut bir kurulumu güncelleme düğmesine geçirmek”

Güncelleme başlatıcısından önce yapılmış bir kurulum inscada.jar’ı doğrudan başlatır ve kart onu güncelleyemez. Geçiş bir kez, Windows’ta, bu sırayla yapılır. Kurulumcuyu yeniden çalıştırmak gerekmez.

Güncelleme kartı 20261108-11’den itibaren vardır; bu yüzden ürün, her şeyden önce en az o sürümde olmalıdır.

  1. Sürümün app-<rev>.jar dosyasını sürüm sayfasından indirin.
  2. inSCADA servisini durdurun.
  3. C:\Program Files\inSCADA içindeki inscada.jar’ı yeni jar ile değiştirin; adı inscada.jar olsun.
  4. Servisi başlatın.

inscada-launcher.jar, aynı sürüm sayfasındaki inscada-launcher-<rev>.zip’in içindedir. Onu jar ile aynı sürümden alın ve zip’i açın; zip yalnızca bu dosyayı içerir.

Sunucuda tek bir klasöre — masaüstü olur — kopyalayın:

  • inscada-launcher.jar (2. adım);
  • enable-updates.bat ve enable-updates.ps1, inSCADA Setup ile gelen iki betik.

4. enable-updates.bat’ı yönetici olarak çalıştırın

Section titled “4. enable-updates.bat’ı yönetici olarak çalıştırın”

enable-updates.bat üzerinde sağ tık → Yönetici olarak çalıştır.

Önce denetler; şunlar sağlanmıyorsa nedenini söyleyip reddeder ve hiçbir şeyi değiştirmez: yönetici olarak çalışıyor; servis (inSCADA) var ve NSSM ile çalışıyor; komutu inscada.jar’ı servisin kendi klasöründen başlatıyor; inscada-launcher.jar betiğin yanında; servisin kendi Java’sı başlatıcıyı çalıştırabiliyor. Servis zaten başlatıcıyı başlatıyorsa already enabled der ve hiçbir şey değiştirmez.

Sonra ne bulduğunu ve neyi değiştireceğini gösterir ve:

  • /undo için servis komutunu olduğu gibi saklar (config\enable-updates.saved);
  • inscada-launcher.jar’ı inscada.jar’ın yanına kopyalar;
  • update\pending, update\backups, update\kept ve update\state klasörlerini oluşturur;
  • servis LocalSystem yerine adlandırılmış bir hesapla çalışıyorsa (OPC DA, DCOM için birini gerektirir), o hesaba yalnızca başlatıcının ihtiyaç duyduğu hakları verir;
  • servis komutunun yalnızca -jar hedefini inscada.jar’dan inscada-launcher.jar’a çevirir. Komutun geri kalanı aynı kalır.

Ardından sorar:

Restart the inSCADA service now, so that it starts through the launcher?

Yeniden başlatma süresince SCADA kullanılamaz. Yeniden başlatmak için y (ya da e) yanıtını verin: ardından ürün gerçekten başlatıcı üzerinden ayağa kalkana — önce başlatıcının açılış satırı, sonra ürünün kendi açıldı satırı — kadar bekler ve bunu söyler. Başlatıcı iki dakikada, ürün beş dakikada başlamamışsa ya da servis daha önce durursa, bunu servisin durumuyla birlikte söyler ve önceki komutu geri koyup yeniden başlatıp başlatmayacağını sorar. Başka her yanıt servisi olduğu gibi çalışır bırakır; servis bir sonraki yeniden başlatmada başlatıcı üzerinden açılır.

Pencere kapanmadan önce Enter ister. Söylediği her şey logs\enable-updates.log’a da yazılır.

inscada.jar’a, veritabanına, yapılandırma dosyalarına ve sürüme dokunmaz: hiçbir şeyi güncellemez, yalnızca güncelleme düğmesini mümkün kılar.

enable-updates.bat /undo

saklanan servis komutunu geri koyar; servis yeniden inscada.jar’ı başlatır. inscada-launcher.jar’ı ve update\ klasörlerini (veritabanı yedekleri tutabilirler) bırakır ve bunu söyler. Hem /undo hem etkinleştirme /restart (sormadan yeniden başlat) ve /norestart (soru yok, yeniden başlatma yok) alır; /service <ad> adı inSCADA olmayan servisi belirtir. İkisini de iki kez çalıştırmak hiçbir şeyi değiştirmez ve bunu söyler.

Bundan sonra kart çalışır, sonraki sürümler düğmeyle gelir.

Linux’ta systemd birimi ürün yerine başlatıcıyı, aynı JVM seçenekleri ve argümanlarla başlatır — Restart=on-failure ile ExecStart=/usr/bin/java … -jar /opt/inscada/inscada-launcher.jar … — ve /opt/inscada, servis kullanıcısına ait olarak inscada.jar, inscada-launcher.jar ve update/{pending,backups,kept,state} içerir. ExecStart bir betiği değil, doğrudan java’yı çalıştırmalıdır.

Başlatıcıyı taşıyan bir kurulumcuyla yapılan kurulum yukarıdakilerin hiçbirine ihtiyaç duymaz: kurulumcu inscada-launcher.jar’ı inscada.jar’ın yanına koyar, update\ klasörlerini oluşturur ve servisi başlatıcıyı başlatacak şekilde kurar. Bunu yapamazsa servis eskisi gibi inscada.jar’ı başlatır ve kurulum logu güncelleme düğmesinin etkin olmadığını söyler; o zaman enable-updates.bat bunu yukarıdaki gibi yapar.

Güncelleme kartı bir küme düğümünde sunulmaz: kümeyi güncellemek, güncellenen yedeğin eski lider durana kadar beklemesini gerektirir ve bunu tek bir düğümün düğmesi düzenleyemez. Küme elle, her seferinde bir düğüm, ama asla iki sürüm yan yana çalışmadan güncellenir:

  1. İki düğüm aynı sürümde, küme tam ve liderin replikasyon kuyruğu boş.

  2. Yedeği durdurun, onun kendi PostgreSQL’ini yedekleyin, jar’ını değiştirin. Başlatmayın.

  3. Lideri durdurun. Saha burada durur.

  4. Güncellenen düğümü tek başına başlatın. Kendiliğinden lider olur.

  5. Çalıştığını görün: lider, sağlık ve bağlantılar ayakta. Değilse onu durdurun ve eski lideri değiştirmeden başlatın.

  6. Eski lideri aynı şekilde güncelleyin (yedek, jar) ve başlatın; aynı sürümde yedek olarak katılır.

  7. ve 3. adımlar arasında hiçbir yapılandırma değişikliği yapmayın. Geri dönüş aynı sırayı tersten izler.

Her resmî sürüm sayfası bir Before you upgrade listesiyle başlar: o sürümdeki, bir şeyi kaldıran ya da bir kurulumun dayandığı bir cevabı değiştiren değişiklikler. Güncelle ve yeniden başlat’a basmadan ya da jar’ı değiştirmeden önce bu listeyi yalnızca en yeni sürüm için değil, sizinkiyle yenisi arasındaki her sürüm için okuyun. Her madde kimi ilgilendirdiğini ve ne yapılacağını söyler; çoğu hiçbir şey gerektirmez.

  • Sunucu Ayarları — güncelleme denetimi anahtarı, Şimdi yeniden başlat, imzalar
  • Lisans — hangi sürümlerin kurulabileceğine karar veren bakım
  • Yedekleme — bir güncellemenin aldığının yanında kurulum yedeği