Eskiden başlayan bir profil artık bir seçenek hatasıyla başarısız oluyor ve ayrıştırıcının alıntıladığı satır ekranda tamamen makul görünüyor. Tuzak burada: bir yapılandırma dosyası fiziksel satırların listesidir, her birinde bir seçenek anahtar sözcüğü ve argümanları bulunur ve bir düzenleyicinin kaydırdığı uzun bir satır, baytlara bakana kadar iki satırla aynı görünür. Ağ, sertifika veya tünel bu hata sınıfına dahil değildir. Ekranda aynı görünen iki satır tek bir bayt farkla ayrılabilir.

Aşağıdaki kontrolleri sırayla yapın ve başarısız olan ilkinde durun. Her biri bir sonrakinden daha ucuzdur ve her biri farklı bir açıklamayı eler.

Bir satır, bir direktif

Ayrıştırıcı bir satırı okur, ilk sözcüğü seçenek olarak alır ve geri kalanını o seçeneğin argümanları olarak işler. Dolayısıyla cert server.crt port 1194 gibi bir satır art arda iki talimat değildir. Üç argümanlı tek bir cert seçeneğidir ve üçüncüsü seçeneğin kabul ettiği bir dosya adı değildir. Hatayı eksik bir satır sonu olarak okumak doğrudur; eksik bir direktif olarak okumak değildir.

# malformed: one option, three arguments
cert server.crt port 1194

# intended: two options, one argument each
cert server.crt
port 1194

O düzeltilmiş iki satır bir parçadır, yapılandırma değil. Sınırın nereye ait olduğunu göstermek için vardırlar. Bir profildeki her sıradan direktif aynı kurala uyar ve bunlardan ikisini birleştiren bir satır ya bir argüman hatası ya da seçeneğin beklemediği bir değer üretir.

Satır sonunun gerçek olduğunu kanıtlayın

Düzenleyiciler görüntüleme için kaydırır. Bazıları yapıştırırken sabit satır sonları da ekler, bazıları eklemez; bu yüzden aynı görsel sonuç iki çok farklı dosyadan gelebilir. Bir şeyi değiştirmeden önce satır sonlarını gösterin ve satırları sayın. Ölçmek bir komuta mal olur; tahmin etmek bir akşama.

cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf

İlk çıktıda her gerçek satır sonu bir $ işareti olarak görünür, yani kaydırılmış ama bölünmemiş bir satır, ekranın kaydırdığı yerde hiçbir işaret göstermez. İkinci komut numaralı satırlar yazdırır; bu, ayrıştırıcının bildirdiği ile dosyanın içerdiğini karşılaştırmanın en hızlı yoludur.

Fazladan boşluklar da bir direktif yaratmaz. Girinti kozmetiktir ve boşlukla başlayan bir satır yine aynı tek seçenektir. Hata iletisi bir satır numarasını gösteriyorsa, ait olduğu paragrafı değil tam o satırı okuyun.

Bir direktif listesi değil, bir yol tırnaklayın

Tırnaklar boşluk içeren argümanlar içindir, seçenekleri gruplamak için değildir. Boşluk içeren bir sertifika yolunun kendi tırnaklarına ihtiyacı vardır; bir tırnak çiftini paylaşan iki direktif hâlâ tek bir bozuk satırdır.

cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"

Seçenek adlarını düzenle aynı anda kontrol edin, çünkü birleştirilmiş bir satır hiç var olmamış inandırıcı görünen bir belirteç üretebilir. Bağlantı noktası direktifi port’tır; aynı fikir için başka bir şey kullanan bir profil, satır sınırları düzeltildikten sonra bile başarısız olur. Bir ad tanıdık gelmiyorsa, onu bir forum örneğiyle değil, çalıştırdığınız sürümün seçenek listesiyle karşılaştırın.

Satır içi blokları blok olarak tutun

Profiller sertifikaları ve anahtarları satır içi taşıyabilir ve bu bloklar yapılandırma değil veridir. Bir bloğun içindeki PEM satırları düzleştirilecek, yeniden girintilenecek veya birleştirilecek seçenekler değildir ve blok işaretleri kendi satırlarında kalmalıdır.

Satır içi bir bloğa opak bir bölge gibi davranın: çevresindeki seçenek satırlarını düzeltin, içeriğini bayt bayt olduğu gibi bırakın ve onu asla herkese açık bir destek başlığına yapıştırmayın. Bir biçimlendirme aracı bloğu yeniden yazdıysa, elle onarmak yerine PKI’nızdan geri yükleyin.

Şablonu değil, en küçük bölümü düzeltin

Cazip onarım, tüm dosyayı „çalışan” bir eğiticiden alınan yapılandırmayla değiştirmektir. Bu, tek bir bozuk satırı kimsenin gözden geçirmediği bir dizi politika değişikliğiyle değiştirir: farklı DH parametreleri, sıkıştırma ayarları, şifre seçimleri, yinelenen dinleyiciler. Asıl sorun küçük ve yereldir; değiştirme ise ikisi de değildir.

Profili korumalı bir çalışma dosyasına kopyalayın, bu kopyadaki satır sınırlarını düzeltin ve hizmetin normal sahibinin onu yüklemesine izin verin. Ardından örneği başlatın ve varsa ilk hatayı baştan okuyun.

openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

Ayrıştırma aşaması geçtiğinde, sonraki hata sözcük dağarcığıyla değil bir dosya, sertifika veya şifreyle ilgili olacaktır ve bu gerçek bir ilerlemedir. Çalışma kopyasını ve neyin birleştirildiğine dair tek satırlık bir notu saklayın; aynı yapıştırma aynı ekipteki başka birinin başına yeniden gelecektir.

İlgili makaleler