From a6fb84a84acacfc67a390f4b2c29415ee00e36b6 Mon Sep 17 00:00:00 2001 From: vodiylik Date: Wed, 17 Jan 2024 04:49:07 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20linuxist?= =?UTF-8?q?on/fedora-faq@d4992e247092e0719c4f5e5faff34e00aeb98c65=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .buildinfo | 2 +- _static/base-stemmer.js | 294 --------------- _static/documentation_options.js | 4 +- _static/language_data.js | 188 +++++++++- _static/russian-stemmer.js | 624 ------------------------------- _static/translations.js | 60 --- administration.html | 89 +++-- development.html | 87 +++-- generic-info.html | 67 ++-- genindex.html | 29 +- hardware.html | 75 ++-- index.html | 33 +- installation.html | 43 ++- legal-info.html | 27 +- networking.html | 51 ++- objects.inv | Bin 24014 -> 23969 bytes package-manager.html | 57 ++- search.html | 26 +- searchindex.js | 2 +- security.html | 107 +++--- tips-and-tricks.html | 73 ++-- using-applications.html | 81 ++-- using-system.html | 91 +++-- virtualization.html | 37 +- 24 files changed, 667 insertions(+), 1480 deletions(-) delete mode 100644 _static/base-stemmer.js delete mode 100644 _static/russian-stemmer.js delete mode 100644 _static/translations.js diff --git a/.buildinfo b/.buildinfo index ce6ce119..b981c6ea 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: beaed36c0a50ef0a395019c13744796b +config: 92638a5a2fb04ec09373bcbfc7f7e2ce tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_static/base-stemmer.js b/_static/base-stemmer.js deleted file mode 100644 index ca6cca15..00000000 --- a/_static/base-stemmer.js +++ /dev/null @@ -1,294 +0,0 @@ -/**@constructor*/ -BaseStemmer = function() { - this.setCurrent = function(value) { - this.current = value; - this.cursor = 0; - this.limit = this.current.length; - this.limit_backward = 0; - this.bra = this.cursor; - this.ket = this.limit; - }; - - this.getCurrent = function() { - return this.current; - }; - - this.copy_from = function(other) { - this.current = other.current; - this.cursor = other.cursor; - this.limit = other.limit; - this.limit_backward = other.limit_backward; - this.bra = other.bra; - this.ket = other.ket; - }; - - this.in_grouping = function(s, min, max) { - if (this.cursor >= this.limit) return false; - var ch = this.current.charCodeAt(this.cursor); - if (ch > max || ch < min) return false; - ch -= min; - if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; - this.cursor++; - return true; - }; - - this.in_grouping_b = function(s, min, max) { - if (this.cursor <= this.limit_backward) return false; - var ch = this.current.charCodeAt(this.cursor - 1); - if (ch > max || ch < min) return false; - ch -= min; - if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; - this.cursor--; - return true; - }; - - this.out_grouping = function(s, min, max) { - if (this.cursor >= this.limit) return false; - var ch = this.current.charCodeAt(this.cursor); - if (ch > max || ch < min) { - this.cursor++; - return true; - } - ch -= min; - if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) { - this.cursor++; - return true; - } - return false; - }; - - this.out_grouping_b = function(s, min, max) { - if (this.cursor <= this.limit_backward) return false; - var ch = this.current.charCodeAt(this.cursor - 1); - if (ch > max || ch < min) { - this.cursor--; - return true; - } - ch -= min; - if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) { - this.cursor--; - return true; - } - return false; - }; - - this.eq_s = function(s) - { - if (this.limit - this.cursor < s.length) return false; - if (this.current.slice(this.cursor, this.cursor + s.length) != s) - { - return false; - } - this.cursor += s.length; - return true; - }; - - this.eq_s_b = function(s) - { - if (this.cursor - this.limit_backward < s.length) return false; - if (this.current.slice(this.cursor - s.length, this.cursor) != s) - { - return false; - } - this.cursor -= s.length; - return true; - }; - - /** @return {number} */ this.find_among = function(v) - { - var i = 0; - var j = v.length; - - var c = this.cursor; - var l = this.limit; - - var common_i = 0; - var common_j = 0; - - var first_key_inspected = false; - - while (true) - { - var k = i + ((j - i) >>> 1); - var diff = 0; - var common = common_i < common_j ? common_i : common_j; // smaller - // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional) - var w = v[k]; - var i2; - for (i2 = common; i2 < w[0].length; i2++) - { - if (c + common == l) - { - diff = -1; - break; - } - diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2); - if (diff != 0) break; - common++; - } - if (diff < 0) - { - j = k; - common_j = common; - } - else - { - i = k; - common_i = common; - } - if (j - i <= 1) - { - if (i > 0) break; // v->s has been inspected - if (j == i) break; // only one item in v - - // - but now we need to go round once more to get - // v->s inspected. This looks messy, but is actually - // the optimal approach. - - if (first_key_inspected) break; - first_key_inspected = true; - } - } - do { - var w = v[i]; - if (common_i >= w[0].length) - { - this.cursor = c + w[0].length; - if (w.length < 4) return w[2]; - var res = w[3](this); - this.cursor = c + w[0].length; - if (res) return w[2]; - } - i = w[1]; - } while (i >= 0); - return 0; - }; - - // find_among_b is for backwards processing. Same comments apply - this.find_among_b = function(v) - { - var i = 0; - var j = v.length - - var c = this.cursor; - var lb = this.limit_backward; - - var common_i = 0; - var common_j = 0; - - var first_key_inspected = false; - - while (true) - { - var k = i + ((j - i) >> 1); - var diff = 0; - var common = common_i < common_j ? common_i : common_j; - var w = v[k]; - var i2; - for (i2 = w[0].length - 1 - common; i2 >= 0; i2--) - { - if (c - common == lb) - { - diff = -1; - break; - } - diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2); - if (diff != 0) break; - common++; - } - if (diff < 0) - { - j = k; - common_j = common; - } - else - { - i = k; - common_i = common; - } - if (j - i <= 1) - { - if (i > 0) break; - if (j == i) break; - if (first_key_inspected) break; - first_key_inspected = true; - } - } - do { - var w = v[i]; - if (common_i >= w[0].length) - { - this.cursor = c - w[0].length; - if (w.length < 4) return w[2]; - var res = w[3](this); - this.cursor = c - w[0].length; - if (res) return w[2]; - } - i = w[1]; - } while (i >= 0); - return 0; - }; - - /* to replace chars between c_bra and c_ket in this.current by the - * chars in s. - */ - this.replace_s = function(c_bra, c_ket, s) - { - var adjustment = s.length - (c_ket - c_bra); - this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket); - this.limit += adjustment; - if (this.cursor >= c_ket) this.cursor += adjustment; - else if (this.cursor > c_bra) this.cursor = c_bra; - return adjustment; - }; - - this.slice_check = function() - { - if (this.bra < 0 || - this.bra > this.ket || - this.ket > this.limit || - this.limit > this.current.length) - { - return false; - } - return true; - }; - - this.slice_from = function(s) - { - var result = false; - if (this.slice_check()) - { - this.replace_s(this.bra, this.ket, s); - result = true; - } - return result; - }; - - this.slice_del = function() - { - return this.slice_from(""); - }; - - this.insert = function(c_bra, c_ket, s) - { - var adjustment = this.replace_s(c_bra, c_ket, s); - if (c_bra <= this.bra) this.bra += adjustment; - if (c_bra <= this.ket) this.ket += adjustment; - }; - - this.slice_to = function() - { - var result = ''; - if (this.slice_check()) - { - result = this.current.slice(this.bra, this.ket); - } - return result; - }; - - this.assign_to = function() - { - return this.current.slice(0, this.limit); - }; -}; diff --git a/_static/documentation_options.js b/_static/documentation_options.js index ef6a4a1b..cb4c191b 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,6 +1,6 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '2024.01.16', - LANGUAGE: 'ru', + VERSION: '2024.01.17', + LANGUAGE: 'uz', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', diff --git a/_static/language_data.js b/_static/language_data.js index 10107e5c..250f5665 100644 --- a/_static/language_data.js +++ b/_static/language_data.js @@ -10,10 +10,190 @@ * */ -var stopwords = ["\u0430", "\u0431\u0435\u0437", "\u0431\u043e\u043b\u0435\u0435", "\u0431\u043e\u043b\u044c\u0448\u0435", "\u0431\u0443\u0434\u0435\u0442", "\u0431\u0443\u0434\u0442\u043e", "\u0431\u044b", "\u0431\u044b\u043b", "\u0431\u044b\u043b\u0430", "\u0431\u044b\u043b\u0438", "\u0431\u044b\u043b\u043e", "\u0431\u044b\u0442\u044c", "\u0432", "\u0432\u0430\u043c", "\u0432\u0430\u0441", "\u0432\u0434\u0440\u0443\u0433", "\u0432\u0435\u0434\u044c", "\u0432\u043e", "\u0432\u043e\u0442", "\u0432\u043f\u0440\u043e\u0447\u0435\u043c", "\u0432\u0441\u0435", "\u0432\u0441\u0435\u0433\u0434\u0430", "\u0432\u0441\u0435\u0433\u043e", "\u0432\u0441\u0435\u0445", "\u0432\u0441\u044e", "\u0432\u044b", "\u0433\u0434\u0435", "\u0433\u043e\u0432\u043e\u0440\u0438\u043b", "\u0434\u0430", "\u0434\u0430\u0436\u0435", "\u0434\u0432\u0430", "\u0434\u043b\u044f", "\u0434\u043e", "\u0434\u0440\u0443\u0433\u043e\u0439", "\u0435\u0433\u043e", "\u0435\u0435", "\u0435\u0439", "\u0435\u043c\u0443", "\u0435\u0441\u043b\u0438", "\u0435\u0441\u0442\u044c", "\u0435\u0449\u0435", "\u0436", "\u0436\u0435", "\u0436\u0438\u0437\u043d\u044c", "\u0437\u0430", "\u0437\u0430\u0447\u0435\u043c", "\u0437\u0434\u0435\u0441\u044c", "\u0438", "\u0438\u0437", "\u0438\u043b\u0438", "\u0438\u043c", "\u0438\u043d\u043e\u0433\u0434\u0430", "\u0438\u0445", "\u043a", "\u043a\u0430\u0436\u0435\u0442\u0441\u044f", "\u043a\u0430\u043a", "\u043a\u0430\u043a\u0430\u044f", "\u043a\u0430\u043a\u043e\u0439", "\u043a\u043e\u0433\u0434\u0430", "\u043a\u043e\u043d\u0435\u0447\u043d\u043e", "\u043a\u0442\u043e", "\u043a\u0443\u0434\u0430", "\u043b\u0438", "\u043b\u0443\u0447\u0448\u0435", "\u043c\u0435\u0436\u0434\u0443", "\u043c\u0435\u043d\u044f", "\u043c\u043d\u0435", "\u043c\u043d\u043e\u0433\u043e", "\u043c\u043e\u0436\u0435\u0442", "\u043c\u043e\u0436\u043d\u043e", "\u043c\u043e\u0439", "\u043c\u043e\u044f", "\u043c\u044b", "\u043d\u0430", "\u043d\u0430\u0434", "\u043d\u0430\u0434\u043e", "\u043d\u0430\u043a\u043e\u043d\u0435\u0446", "\u043d\u0430\u0441", "\u043d\u0435", "\u043d\u0435\u0433\u043e", "\u043d\u0435\u0435", "\u043d\u0435\u0439", "\u043d\u0435\u043b\u044c\u0437\u044f", "\u043d\u0435\u0442", "\u043d\u0438", "\u043d\u0438\u0431\u0443\u0434\u044c", "\u043d\u0438\u043a\u043e\u0433\u0434\u0430", "\u043d\u0438\u043c", "\u043d\u0438\u0445", "\u043d\u0438\u0447\u0435\u0433\u043e", "\u043d\u043e", "\u043d\u0443", "\u043e", "\u043e\u0431", "\u043e\u0434\u0438\u043d", "\u043e\u043d", "\u043e\u043d\u0430", "\u043e\u043d\u0438", "\u043e\u043f\u044f\u0442\u044c", "\u043e\u0442", "\u043f\u0435\u0440\u0435\u0434", "\u043f\u043e", "\u043f\u043e\u0434", "\u043f\u043e\u0441\u043b\u0435", "\u043f\u043e\u0442\u043e\u043c", "\u043f\u043e\u0442\u043e\u043c\u0443", "\u043f\u043e\u0447\u0442\u0438", "\u043f\u0440\u0438", "\u043f\u0440\u043e", "\u0440\u0430\u0437", "\u0440\u0430\u0437\u0432\u0435", "\u0441", "\u0441\u0430\u043c", "\u0441\u0432\u043e\u044e", "\u0441\u0435\u0431\u0435", "\u0441\u0435\u0431\u044f", "\u0441\u0435\u0433\u043e\u0434\u043d\u044f", "\u0441\u0435\u0439\u0447\u0430\u0441", "\u0441\u043a\u0430\u0437\u0430\u043b", "\u0441\u043a\u0430\u0437\u0430\u043b\u0430", "\u0441\u043a\u0430\u0437\u0430\u0442\u044c", "\u0441\u043e", "\u0441\u043e\u0432\u0441\u0435\u043c", "\u0442\u0430\u043a", "\u0442\u0430\u043a\u043e\u0439", "\u0442\u0430\u043c", "\u0442\u0435\u0431\u044f", "\u0442\u0435\u043c", "\u0442\u0435\u043f\u0435\u0440\u044c", "\u0442\u043e", "\u0442\u043e\u0433\u0434\u0430", "\u0442\u043e\u0433\u043e", "\u0442\u043e\u0436\u0435", "\u0442\u043e\u043b\u044c\u043a\u043e", "\u0442\u043e\u043c", "\u0442\u043e\u0442", "\u0442\u0440\u0438", "\u0442\u0443\u0442", "\u0442\u044b", "\u0443", "\u0443\u0436", "\u0443\u0436\u0435", "\u0445\u043e\u0440\u043e\u0448\u043e", "\u0445\u043e\u0442\u044c", "\u0447\u0435\u0433\u043e", "\u0447\u0435\u043b\u043e\u0432\u0435\u043a", "\u0447\u0435\u043c", "\u0447\u0435\u0440\u0435\u0437", "\u0447\u0442\u043e", "\u0447\u0442\u043e\u0431", "\u0447\u0442\u043e\u0431\u044b", "\u0447\u0443\u0442\u044c", "\u044d\u0442\u0438", "\u044d\u0442\u043e\u0433\u043e", "\u044d\u0442\u043e\u0439", "\u044d\u0442\u043e\u043c", "\u044d\u0442\u043e\u0442", "\u044d\u0442\u0443", "\u044f"]; +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; /* Non-minified version is copied as a separate JS file, is available */ -BaseStemmer=function(){this.setCurrent=function(r){this.current=r;this.cursor=0;this.limit=this.current.length;this.limit_backward=0;this.bra=this.cursor;this.ket=this.limit};this.getCurrent=function(){return this.current};this.copy_from=function(r){this.current=r.current;this.cursor=r.cursor;this.limit=r.limit;this.limit_backward=r.limit_backward;this.bra=r.bra;this.ket=r.ket};this.in_grouping=function(r,t,i){if(this.cursor>=this.limit)return false;var s=this.current.charCodeAt(this.cursor);if(s>i||s>>3]&1<<(s&7))==0)return false;this.cursor++;return true};this.in_grouping_b=function(r,t,i){if(this.cursor<=this.limit_backward)return false;var s=this.current.charCodeAt(this.cursor-1);if(s>i||s>>3]&1<<(s&7))==0)return false;this.cursor--;return true};this.out_grouping=function(r,t,i){if(this.cursor>=this.limit)return false;var s=this.current.charCodeAt(this.cursor);if(s>i||s>>3]&1<<(s&7))==0){this.cursor++;return true}return false};this.out_grouping_b=function(r,t,i){if(this.cursor<=this.limit_backward)return false;var s=this.current.charCodeAt(this.cursor-1);if(s>i||s>>3]&1<<(s&7))==0){this.cursor--;return true}return false};this.eq_s=function(r){if(this.limit-this.cursor>>1);var a=0;var f=h0)break;if(i==t)break;if(n)break;n=true}}do{var l=r[t];if(h>=l[0].length){this.cursor=s+l[0].length;if(l.length<4)return l[2];var v=l[3](this);this.cursor=s+l[0].length;if(v)return l[2]}t=l[1]}while(t>=0);return 0};this.find_among_b=function(r){var t=0;var i=r.length;var s=this.cursor;var e=this.limit_backward;var h=0;var u=0;var n=false;while(true){var c=t+(i-t>>1);var a=0;var f=h=0;o--){if(s-f==e){a=-1;break}a=this.current.charCodeAt(s-1-f)-l[0].charCodeAt(o);if(a!=0)break;f++}if(a<0){i=c;u=f}else{t=c;h=f}if(i-t<=1){if(t>0)break;if(i==t)break;if(n)break;n=true}}do{var l=r[t];if(h>=l[0].length){this.cursor=s-l[0].length;if(l.length<4)return l[2];var v=l[3](this);this.cursor=s-l[0].length;if(v)return l[2]}t=l[1]}while(t>=0);return 0};this.replace_s=function(r,t,i){var s=i.length-(t-r);this.current=this.current.slice(0,r)+i+this.current.slice(t);this.limit+=s;if(this.cursor>=t)this.cursor+=s;else if(this.cursor>r)this.cursor=r;return s};this.slice_check=function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length){return false}return true};this.slice_from=function(r){var t=false;if(this.slice_check()){this.replace_s(this.bra,this.ket,r);t=true}return t};this.slice_del=function(){return this.slice_from("")};this.insert=function(r,t,i){var s=this.replace_s(r,t,i);if(r<=this.bra)this.bra+=s;if(r<=this.ket)this.ket+=s};this.slice_to=function(){var r="";if(this.slice_check()){r=this.current.slice(this.bra,this.ket)}return r};this.assign_to=function(){return this.current.slice(0,this.limit)}}; -RussianStemmer=function(){var r=new BaseStemmer;var e=[["в",-1,1],["ив",0,2],["ыв",0,2],["вши",-1,1],["ивши",3,2],["ывши",3,2],["вшись",-1,1],["ившись",6,2],["ывшись",6,2]];var i=[["ее",-1,1],["ие",-1,1],["ое",-1,1],["ые",-1,1],["ими",-1,1],["ыми",-1,1],["ей",-1,1],["ий",-1,1],["ой",-1,1],["ый",-1,1],["ем",-1,1],["им",-1,1],["ом",-1,1],["ым",-1,1],["его",-1,1],["ого",-1,1],["ему",-1,1],["ому",-1,1],["их",-1,1],["ых",-1,1],["ею",-1,1],["ою",-1,1],["ую",-1,1],["юю",-1,1],["ая",-1,1],["яя",-1,1]];var u=[["ем",-1,1],["нн",-1,1],["вш",-1,1],["ивш",2,2],["ывш",2,2],["щ",-1,1],["ющ",5,1],["ующ",6,2]];var s=[["сь",-1,1],["ся",-1,1]];var a=[["ла",-1,1],["ила",0,2],["ыла",0,2],["на",-1,1],["ена",3,2],["ете",-1,1],["ите",-1,2],["йте",-1,1],["ейте",7,2],["уйте",7,2],["ли",-1,1],["или",10,2],["ыли",10,2],["й",-1,1],["ей",13,2],["уй",13,2],["л",-1,1],["ил",16,2],["ыл",16,2],["ем",-1,1],["им",-1,2],["ым",-1,2],["н",-1,1],["ен",22,2],["ло",-1,1],["ило",24,2],["ыло",24,2],["но",-1,1],["ено",27,2],["нно",27,1],["ет",-1,1],["ует",30,2],["ит",-1,2],["ыт",-1,2],["ют",-1,1],["уют",34,2],["ят",-1,2],["ны",-1,1],["ены",37,2],["ть",-1,1],["ить",39,2],["ыть",39,2],["ешь",-1,1],["ишь",-1,2],["ю",-1,2],["ую",44,2]];var t=[["а",-1,1],["ев",-1,1],["ов",-1,1],["е",-1,1],["ие",3,1],["ье",3,1],["и",-1,1],["еи",6,1],["ии",6,1],["ами",6,1],["ями",6,1],["иями",10,1],["й",-1,1],["ей",12,1],["ией",13,1],["ий",12,1],["ой",12,1],["ам",-1,1],["ем",-1,1],["ием",18,1],["ом",-1,1],["ям",-1,1],["иям",21,1],["о",-1,1],["у",-1,1],["ах",-1,1],["ях",-1,1],["иях",26,1],["ы",-1,1],["ь",-1,1],["ю",-1,1],["ию",30,1],["ью",30,1],["я",-1,1],["ия",33,1],["ья",33,1]];var c=[["ост",-1,1],["ость",-1,1]];var f=[["ейше",-1,1],["н",-1,2],["ейш",-1,1],["ь",-1,3]];var l=[33,65,8,232];var o=0;var n=0;function b(){n=r.limit;o=r.limit;var e=r.cursor;r:{e:while(true){i:{if(!r.in_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}n=r.cursor;e:while(true){i:{if(!r.out_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.in_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}e:while(true){i:{if(!r.out_grouping(l,1072,1103)){break i}break e}if(r.cursor>=r.limit){break r}r.cursor++}o=r.cursor}r.cursor=e;return true}function _(){if(!(o<=r.cursor)){return false}return true}function k(){var i;r.ket=r.cursor;i=r.find_among_b(e);if(i==0){return false}r.bra=r.cursor;switch(i){case 1:r:{var u=r.limit-r.cursor;e:{if(!r.eq_s_b("а")){break e}break r}r.cursor=r.limit-u;if(!r.eq_s_b("я")){return false}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}return true}function m(){r.ket=r.cursor;if(r.find_among_b(i)==0){return false}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function v(){var e;if(!m()){return false}var i=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(u);if(e==0){r.cursor=r.limit-i;break r}r.bra=r.cursor;switch(e){case 1:e:{var s=r.limit-r.cursor;i:{if(!r.eq_s_b("а")){break i}break e}r.cursor=r.limit-s;if(!r.eq_s_b("я")){r.cursor=r.limit-i;break r}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}}return true}function d(){r.ket=r.cursor;if(r.find_among_b(s)==0){return false}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function g(){var e;r.ket=r.cursor;e=r.find_among_b(a);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:r:{var i=r.limit-r.cursor;e:{if(!r.eq_s_b("а")){break e}break r}r.cursor=r.limit-i;if(!r.eq_s_b("я")){return false}}if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}break}return true}function w(){r.ket=r.cursor;if(r.find_among_b(t)==0){return false}r.bra=r.cursor;if(!r.slice_del()){return false}return true}function h(){r.ket=r.cursor;if(r.find_among_b(c)==0){return false}r.bra=r.cursor;if(!_()){return false}if(!r.slice_del()){return false}return true}function q(){var e;r.ket=r.cursor;e=r.find_among_b(f);if(e==0){return false}r.bra=r.cursor;switch(e){case 1:if(!r.slice_del()){return false}r.ket=r.cursor;if(!r.eq_s_b("н")){return false}r.bra=r.cursor;if(!r.eq_s_b("н")){return false}if(!r.slice_del()){return false}break;case 2:if(!r.eq_s_b("н")){return false}if(!r.slice_del()){return false}break;case 3:if(!r.slice_del()){return false}break}return true}this.stem=function(){var e=r.cursor;r:{while(true){var i=r.cursor;e:{i:while(true){var u=r.cursor;u:{r.bra=r.cursor;if(!r.eq_s("ё")){break u}r.ket=r.cursor;r.cursor=u;break i}r.cursor=u;if(r.cursor>=r.limit){break e}r.cursor++}if(!r.slice_from("е")){return false}continue}r.cursor=i;break}}r.cursor=e;b();r.limit_backward=r.cursor;r.cursor=r.limit;if(r.cursor0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/russian-stemmer.js b/_static/russian-stemmer.js deleted file mode 100644 index 28ded5fc..00000000 --- a/_static/russian-stemmer.js +++ /dev/null @@ -1,624 +0,0 @@ -// Generated by Snowball 2.1.0 - https://snowballstem.org/ - -/**@constructor*/ -RussianStemmer = function() { - var base = new BaseStemmer(); - /** @const */ var a_0 = [ - ["\u0432", -1, 1], - ["\u0438\u0432", 0, 2], - ["\u044B\u0432", 0, 2], - ["\u0432\u0448\u0438", -1, 1], - ["\u0438\u0432\u0448\u0438", 3, 2], - ["\u044B\u0432\u0448\u0438", 3, 2], - ["\u0432\u0448\u0438\u0441\u044C", -1, 1], - ["\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2], - ["\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2] - ]; - - /** @const */ var a_1 = [ - ["\u0435\u0435", -1, 1], - ["\u0438\u0435", -1, 1], - ["\u043E\u0435", -1, 1], - ["\u044B\u0435", -1, 1], - ["\u0438\u043C\u0438", -1, 1], - ["\u044B\u043C\u0438", -1, 1], - ["\u0435\u0439", -1, 1], - ["\u0438\u0439", -1, 1], - ["\u043E\u0439", -1, 1], - ["\u044B\u0439", -1, 1], - ["\u0435\u043C", -1, 1], - ["\u0438\u043C", -1, 1], - ["\u043E\u043C", -1, 1], - ["\u044B\u043C", -1, 1], - ["\u0435\u0433\u043E", -1, 1], - ["\u043E\u0433\u043E", -1, 1], - ["\u0435\u043C\u0443", -1, 1], - ["\u043E\u043C\u0443", -1, 1], - ["\u0438\u0445", -1, 1], - ["\u044B\u0445", -1, 1], - ["\u0435\u044E", -1, 1], - ["\u043E\u044E", -1, 1], - ["\u0443\u044E", -1, 1], - ["\u044E\u044E", -1, 1], - ["\u0430\u044F", -1, 1], - ["\u044F\u044F", -1, 1] - ]; - - /** @const */ var a_2 = [ - ["\u0435\u043C", -1, 1], - ["\u043D\u043D", -1, 1], - ["\u0432\u0448", -1, 1], - ["\u0438\u0432\u0448", 2, 2], - ["\u044B\u0432\u0448", 2, 2], - ["\u0449", -1, 1], - ["\u044E\u0449", 5, 1], - ["\u0443\u044E\u0449", 6, 2] - ]; - - /** @const */ var a_3 = [ - ["\u0441\u044C", -1, 1], - ["\u0441\u044F", -1, 1] - ]; - - /** @const */ var a_4 = [ - ["\u043B\u0430", -1, 1], - ["\u0438\u043B\u0430", 0, 2], - ["\u044B\u043B\u0430", 0, 2], - ["\u043D\u0430", -1, 1], - ["\u0435\u043D\u0430", 3, 2], - ["\u0435\u0442\u0435", -1, 1], - ["\u0438\u0442\u0435", -1, 2], - ["\u0439\u0442\u0435", -1, 1], - ["\u0435\u0439\u0442\u0435", 7, 2], - ["\u0443\u0439\u0442\u0435", 7, 2], - ["\u043B\u0438", -1, 1], - ["\u0438\u043B\u0438", 10, 2], - ["\u044B\u043B\u0438", 10, 2], - ["\u0439", -1, 1], - ["\u0435\u0439", 13, 2], - ["\u0443\u0439", 13, 2], - ["\u043B", -1, 1], - ["\u0438\u043B", 16, 2], - ["\u044B\u043B", 16, 2], - ["\u0435\u043C", -1, 1], - ["\u0438\u043C", -1, 2], - ["\u044B\u043C", -1, 2], - ["\u043D", -1, 1], - ["\u0435\u043D", 22, 2], - ["\u043B\u043E", -1, 1], - ["\u0438\u043B\u043E", 24, 2], - ["\u044B\u043B\u043E", 24, 2], - ["\u043D\u043E", -1, 1], - ["\u0435\u043D\u043E", 27, 2], - ["\u043D\u043D\u043E", 27, 1], - ["\u0435\u0442", -1, 1], - ["\u0443\u0435\u0442", 30, 2], - ["\u0438\u0442", -1, 2], - ["\u044B\u0442", -1, 2], - ["\u044E\u0442", -1, 1], - ["\u0443\u044E\u0442", 34, 2], - ["\u044F\u0442", -1, 2], - ["\u043D\u044B", -1, 1], - ["\u0435\u043D\u044B", 37, 2], - ["\u0442\u044C", -1, 1], - ["\u0438\u0442\u044C", 39, 2], - ["\u044B\u0442\u044C", 39, 2], - ["\u0435\u0448\u044C", -1, 1], - ["\u0438\u0448\u044C", -1, 2], - ["\u044E", -1, 2], - ["\u0443\u044E", 44, 2] - ]; - - /** @const */ var a_5 = [ - ["\u0430", -1, 1], - ["\u0435\u0432", -1, 1], - ["\u043E\u0432", -1, 1], - ["\u0435", -1, 1], - ["\u0438\u0435", 3, 1], - ["\u044C\u0435", 3, 1], - ["\u0438", -1, 1], - ["\u0435\u0438", 6, 1], - ["\u0438\u0438", 6, 1], - ["\u0430\u043C\u0438", 6, 1], - ["\u044F\u043C\u0438", 6, 1], - ["\u0438\u044F\u043C\u0438", 10, 1], - ["\u0439", -1, 1], - ["\u0435\u0439", 12, 1], - ["\u0438\u0435\u0439", 13, 1], - ["\u0438\u0439", 12, 1], - ["\u043E\u0439", 12, 1], - ["\u0430\u043C", -1, 1], - ["\u0435\u043C", -1, 1], - ["\u0438\u0435\u043C", 18, 1], - ["\u043E\u043C", -1, 1], - ["\u044F\u043C", -1, 1], - ["\u0438\u044F\u043C", 21, 1], - ["\u043E", -1, 1], - ["\u0443", -1, 1], - ["\u0430\u0445", -1, 1], - ["\u044F\u0445", -1, 1], - ["\u0438\u044F\u0445", 26, 1], - ["\u044B", -1, 1], - ["\u044C", -1, 1], - ["\u044E", -1, 1], - ["\u0438\u044E", 30, 1], - ["\u044C\u044E", 30, 1], - ["\u044F", -1, 1], - ["\u0438\u044F", 33, 1], - ["\u044C\u044F", 33, 1] - ]; - - /** @const */ var a_6 = [ - ["\u043E\u0441\u0442", -1, 1], - ["\u043E\u0441\u0442\u044C", -1, 1] - ]; - - /** @const */ var a_7 = [ - ["\u0435\u0439\u0448\u0435", -1, 1], - ["\u043D", -1, 2], - ["\u0435\u0439\u0448", -1, 1], - ["\u044C", -1, 3] - ]; - - /** @const */ var /** Array */ g_v = [33, 65, 8, 232]; - - var /** number */ I_p2 = 0; - var /** number */ I_pV = 0; - - - /** @return {boolean} */ - function r_mark_regions() { - I_pV = base.limit; - I_p2 = base.limit; - var /** number */ v_1 = base.cursor; - lab0: { - golab1: while(true) - { - lab2: { - if (!(base.in_grouping(g_v, 1072, 1103))) - { - break lab2; - } - break golab1; - } - if (base.cursor >= base.limit) - { - break lab0; - } - base.cursor++; - } - I_pV = base.cursor; - golab3: while(true) - { - lab4: { - if (!(base.out_grouping(g_v, 1072, 1103))) - { - break lab4; - } - break golab3; - } - if (base.cursor >= base.limit) - { - break lab0; - } - base.cursor++; - } - golab5: while(true) - { - lab6: { - if (!(base.in_grouping(g_v, 1072, 1103))) - { - break lab6; - } - break golab5; - } - if (base.cursor >= base.limit) - { - break lab0; - } - base.cursor++; - } - golab7: while(true) - { - lab8: { - if (!(base.out_grouping(g_v, 1072, 1103))) - { - break lab8; - } - break golab7; - } - if (base.cursor >= base.limit) - { - break lab0; - } - base.cursor++; - } - I_p2 = base.cursor; - } - base.cursor = v_1; - return true; - }; - - /** @return {boolean} */ - function r_R2() { - if (!(I_p2 <= base.cursor)) - { - return false; - } - return true; - }; - - /** @return {boolean} */ - function r_perfective_gerund() { - var /** number */ among_var; - base.ket = base.cursor; - among_var = base.find_among_b(a_0); - if (among_var == 0) - { - return false; - } - base.bra = base.cursor; - switch (among_var) { - case 1: - lab0: { - var /** number */ v_1 = base.limit - base.cursor; - lab1: { - if (!(base.eq_s_b("\u0430"))) - { - break lab1; - } - break lab0; - } - base.cursor = base.limit - v_1; - if (!(base.eq_s_b("\u044F"))) - { - return false; - } - } - if (!base.slice_del()) - { - return false; - } - break; - case 2: - if (!base.slice_del()) - { - return false; - } - break; - } - return true; - }; - - /** @return {boolean} */ - function r_adjective() { - base.ket = base.cursor; - if (base.find_among_b(a_1) == 0) - { - return false; - } - base.bra = base.cursor; - if (!base.slice_del()) - { - return false; - } - return true; - }; - - /** @return {boolean} */ - function r_adjectival() { - var /** number */ among_var; - if (!r_adjective()) - { - return false; - } - var /** number */ v_1 = base.limit - base.cursor; - lab0: { - base.ket = base.cursor; - among_var = base.find_among_b(a_2); - if (among_var == 0) - { - base.cursor = base.limit - v_1; - break lab0; - } - base.bra = base.cursor; - switch (among_var) { - case 1: - lab1: { - var /** number */ v_2 = base.limit - base.cursor; - lab2: { - if (!(base.eq_s_b("\u0430"))) - { - break lab2; - } - break lab1; - } - base.cursor = base.limit - v_2; - if (!(base.eq_s_b("\u044F"))) - { - base.cursor = base.limit - v_1; - break lab0; - } - } - if (!base.slice_del()) - { - return false; - } - break; - case 2: - if (!base.slice_del()) - { - return false; - } - break; - } - } - return true; - }; - - /** @return {boolean} */ - function r_reflexive() { - base.ket = base.cursor; - if (base.find_among_b(a_3) == 0) - { - return false; - } - base.bra = base.cursor; - if (!base.slice_del()) - { - return false; - } - return true; - }; - - /** @return {boolean} */ - function r_verb() { - var /** number */ among_var; - base.ket = base.cursor; - among_var = base.find_among_b(a_4); - if (among_var == 0) - { - return false; - } - base.bra = base.cursor; - switch (among_var) { - case 1: - lab0: { - var /** number */ v_1 = base.limit - base.cursor; - lab1: { - if (!(base.eq_s_b("\u0430"))) - { - break lab1; - } - break lab0; - } - base.cursor = base.limit - v_1; - if (!(base.eq_s_b("\u044F"))) - { - return false; - } - } - if (!base.slice_del()) - { - return false; - } - break; - case 2: - if (!base.slice_del()) - { - return false; - } - break; - } - return true; - }; - - /** @return {boolean} */ - function r_noun() { - base.ket = base.cursor; - if (base.find_among_b(a_5) == 0) - { - return false; - } - base.bra = base.cursor; - if (!base.slice_del()) - { - return false; - } - return true; - }; - - /** @return {boolean} */ - function r_derivational() { - base.ket = base.cursor; - if (base.find_among_b(a_6) == 0) - { - return false; - } - base.bra = base.cursor; - if (!r_R2()) - { - return false; - } - if (!base.slice_del()) - { - return false; - } - return true; - }; - - /** @return {boolean} */ - function r_tidy_up() { - var /** number */ among_var; - base.ket = base.cursor; - among_var = base.find_among_b(a_7); - if (among_var == 0) - { - return false; - } - base.bra = base.cursor; - switch (among_var) { - case 1: - if (!base.slice_del()) - { - return false; - } - base.ket = base.cursor; - if (!(base.eq_s_b("\u043D"))) - { - return false; - } - base.bra = base.cursor; - if (!(base.eq_s_b("\u043D"))) - { - return false; - } - if (!base.slice_del()) - { - return false; - } - break; - case 2: - if (!(base.eq_s_b("\u043D"))) - { - return false; - } - if (!base.slice_del()) - { - return false; - } - break; - case 3: - if (!base.slice_del()) - { - return false; - } - break; - } - return true; - }; - - this.stem = /** @return {boolean} */ function() { - var /** number */ v_1 = base.cursor; - lab0: { - while(true) - { - var /** number */ v_2 = base.cursor; - lab1: { - golab2: while(true) - { - var /** number */ v_3 = base.cursor; - lab3: { - base.bra = base.cursor; - if (!(base.eq_s("\u0451"))) - { - break lab3; - } - base.ket = base.cursor; - base.cursor = v_3; - break golab2; - } - base.cursor = v_3; - if (base.cursor >= base.limit) - { - break lab1; - } - base.cursor++; - } - if (!base.slice_from("\u0435")) - { - return false; - } - continue; - } - base.cursor = v_2; - break; - } - } - base.cursor = v_1; - r_mark_regions(); - base.limit_backward = base.cursor; base.cursor = base.limit; - if (base.cursor < I_pV) - { - return false; - } - var /** number */ v_6 = base.limit_backward; - base.limit_backward = I_pV; - var /** number */ v_7 = base.limit - base.cursor; - lab4: { - lab5: { - var /** number */ v_8 = base.limit - base.cursor; - lab6: { - if (!r_perfective_gerund()) - { - break lab6; - } - break lab5; - } - base.cursor = base.limit - v_8; - var /** number */ v_9 = base.limit - base.cursor; - lab7: { - if (!r_reflexive()) - { - base.cursor = base.limit - v_9; - break lab7; - } - } - lab8: { - var /** number */ v_10 = base.limit - base.cursor; - lab9: { - if (!r_adjectival()) - { - break lab9; - } - break lab8; - } - base.cursor = base.limit - v_10; - lab10: { - if (!r_verb()) - { - break lab10; - } - break lab8; - } - base.cursor = base.limit - v_10; - if (!r_noun()) - { - break lab4; - } - } - } - } - base.cursor = base.limit - v_7; - var /** number */ v_11 = base.limit - base.cursor; - lab11: { - base.ket = base.cursor; - if (!(base.eq_s_b("\u0438"))) - { - base.cursor = base.limit - v_11; - break lab11; - } - base.bra = base.cursor; - if (!base.slice_del()) - { - return false; - } - } - var /** number */ v_12 = base.limit - base.cursor; - r_derivational(); - base.cursor = base.limit - v_12; - var /** number */ v_13 = base.limit - base.cursor; - r_tidy_up(); - base.cursor = base.limit - v_13; - base.limit_backward = v_6; - base.cursor = base.limit_backward; - return true; - }; - - /**@return{string}*/ - this['stemWord'] = function(/**string*/word) { - base.setCurrent(word); - this.stem(); - return base.getCurrent(); - }; -}; diff --git a/_static/translations.js b/_static/translations.js deleted file mode 100644 index 4bf2ff70..00000000 --- a/_static/translations.js +++ /dev/null @@ -1,60 +0,0 @@ -Documentation.addTranslations({ - "locale": "ru", - "messages": { - "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", - "© %(copyright_prefix)s %(copyright)s.": "", - ", in ": ", \u0432", - "About these documents": "\u041e\u0431 \u044d\u0442\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445", - "Automatically generated list of changes in version %(version)s": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s", - "C API changes": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 API C", - "Changes in Version %(version)s — %(docstitle)s": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s — %(docstitle)s", - "Collapse sidebar": "\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c", - "Complete Table of Contents": "\u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435", - "Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", - "Copyright": "\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430", - "Created using Sphinx %(sphinx_version)s.": "", - "Expand sidebar": "\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c", - "Full index on one page": "\u041f\u043e\u043b\u043d\u044b\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435", - "General Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c", - "Global Module Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439", - "Go": "\u0418\u0441\u043a\u0430\u0442\u044c", - "Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", - "Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c", - "Index – %(key)s": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c – %(key)s", - "Index pages by letter": "\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043f\u043e \u0431\u0443\u043a\u0432\u0430\u043c \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430", - "Indices and tables:": "\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438:", - "Last updated on %(last_updated)s.": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e: %(last_updated)s.", - "Library changes": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435", - "Navigation": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f", - "Next topic": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b", - "Other changes": "\u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f", - "Overview": "\u041e\u0431\u0437\u043e\u0440", - "Please activate JavaScript to enable the search\n functionality.": "\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 JavaScript \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", - "Preparing search...": "\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u043e\u0438\u0441\u043a\u0430\u2026", - "Previous topic": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b", - "Quick search": "\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a", - "Search": "\u041f\u043e\u0438\u0441\u043a", - "Search Page": "\u041f\u043e\u0438\u0441\u043a", - "Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430", - "Search finished, found ${resultCount} page(s) matching the search query.": "", - "Search within %(docstitle)s": "\u041f\u043e\u0438\u0441\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u00ab%(docstitle)s\u00bb", - "Searching": "\u0418\u0434\u0451\u0442 \u043f\u043e\u0438\u0441\u043a", - "Searching for multiple words only shows matches that contain\n all words.": "", - "Show Source": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442", - "Table of Contents": "\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435", - "This Page": "\u042d\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430", - "Welcome! This is": "\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e", - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0443 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u0447\u0442\u043e \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.", - "all functions, classes, terms": "\u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043b\u0430\u0441\u0441\u044b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b", - "can be huge": "\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c", - "last updated": "\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435", - "lists all sections and subsections": "\u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432", - "next chapter": "\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430", - "previous chapter": "\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430", - "quick access to all modules": "\u0441\u0432\u043e\u0434\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439", - "search": "\u0438\u0441\u043a\u0430\u0442\u044c", - "search this documentation": "\u043f\u043e\u0438\u0441\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438", - "the documentation for": "\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f" - }, - "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3)" -}); \ No newline at end of file diff --git a/administration.html b/administration.html index 429a832b..e0cd6d1d 100644 --- a/administration.html +++ b/administration.html @@ -1,23 +1,22 @@ - + - Системное администрирование — Неофициальный FAQ по Fedora (версия 2024.01.16) + Системное администрирование — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -100,7 +99,7 @@
modinfo foo-bar
 
-

Здесь foo-bar – имя модуля, информацию о котором требуется вывести.

+

Здесь foo-bar -- имя модуля, информацию о котором требуется вывести.

Как определить список загружаемых ОС в меню UEFI Boot из Fedora?

@@ -116,7 +115,7 @@
sudo efibootmgr -o 0000,0002,0003,0001
 
-

Здесь 0000 и прочие – результат предыдущего вывода утилиты. Ведущие нули указывать не обязательно.

+

Здесь 0000 и прочие -- результат предыдущего вывода утилиты. Ведущие нули указывать не обязательно.

Изменения вступают в силу немедленно.

@@ -181,7 +180,7 @@
sudo mount -t ext4 /dev/sda3 /media/fedora
 
-

Здесь /dev/sda3 – раздел, на котором установлена ОС, а ext4 – его файловая система. Внесём соответствующие правки если это не так.

+

Здесь /dev/sda3 -- раздел, на котором установлена ОС, а ext4 -- его файловая система. Внесём соответствующие правки если это не так.

Переходим в каталог с корневой ФС и монтируем ряд необходимых для работы окружения виртуальных ФС:

cd /media/fedora
 sudo mount -t proc /proc proc
@@ -243,8 +242,8 @@
 

Как перевести системные часы в UTC или localtime и наоборот?

-

Localtime – это хранение в UEFI BIOS компьютера времени с учётом установленного в системе часового пояса. При определённых условиях это может вызывать проблемы с синхронизацией времени, а также работой нескольких операционных систем на одном компьютере.

-

UTC – это хранение в UEFI BIOS компьютера всемирного координированного времени по Гринвичу без учёта часовых поясов. Часовыми поясами управляет операционная система, что позволяет каждому пользователю в системе, а также приложениям использовать индивидуальные настройки.

+

Localtime -- это хранение в UEFI BIOS компьютера времени с учётом установленного в системе часового пояса. При определённых условиях это может вызывать проблемы с синхронизацией времени, а также работой нескольких операционных систем на одном компьютере.

+

UTC -- это хранение в UEFI BIOS компьютера всемирного координированного времени по Гринвичу без учёта часовых поясов. Часовыми поясами управляет операционная система, что позволяет каждому пользователю в системе, а также приложениям использовать индивидуальные настройки.

Переключение аппаратных часов компьютера в UTC из localtime:

sudo timedatectl set-local-rtc no
 
@@ -334,7 +333,7 @@

Как восстановить данные с повреждённого раздела с BTRFS?

Существует несколько способов восстановления данных на повреждённом разделе с файловой системой BTRFS. Они подразделяются на безопасные, небезопасные и деструктивные.

Небезопасные и деструктивные могут привести к полной потере всех данных на накопителе, поэтому прибегать к ним следует лишь при крайней необходимости, если безопасные не помогли. Работать лучше всего с точной посекторной копией вместо реального устройства.

-

Здесь /dev/sda2 – блочное устройство раздела, данные с которого мы будем пытаться восстановить, а /media/btrfs – временная точка для его монтирования.

+

Здесь /dev/sda2 -- блочное устройство раздела, данные с которого мы будем пытаться восстановить, а /media/btrfs -- временная точка для его монтирования.

Восстановление будем производить посредством загрузки с Fedora LiveUSB, после чего сразу же запустим эмулятор терминала.

Более подробную информацию можно найти в openSUSE Support Database (на английском языке).

@@ -429,7 +428,7 @@

Деструктивные способы восстановления
sudo sysctl -w foo.bar=X
 

-

Здесь foo.bar имя параметра, а X – его значение. Изменения вступят в силу немедленно и сохранятся до перезагрузки системы.

+

Здесь foo.bar имя параметра, а X -- его значение. Изменения вступят в силу немедленно и сохранятся до перезагрузки системы.

Как задать и сохранить параметр ядра при помощи sysctl?

@@ -438,7 +437,7 @@

Деструктивные способы восстановления -

Каждый параметр должен быть указан с новой строки. Здесь foo.bar имя параметра, а X – его значение.

+

Каждый параметр должен быть указан с новой строки. Здесь foo.bar имя параметра, а X -- его значение.

Для вступления изменений в силу требуется перезагрузка:

Как переключить запуск системы в текстовый режим и обратно?

@@ -528,7 +527,7 @@

Деструктивные способы восстановления
sudo xfs_admin -L "NewLabel" /dev/sda1
 
-

Здесь /dev/sda1 – раздел, на котором требуется изменить метку.

+

Здесь /dev/sda1 -- раздел, на котором требуется изменить метку.

Как получить UUID всех смонтированных разделов?

@@ -540,7 +539,7 @@

Деструктивные способы восстановления
sudo blkid /dev/sda1
 
-

Здесь /dev/sda1 – раздел, для которого требуется вывести UUID.

+

Здесь /dev/sda1 -- раздел, для которого требуется вывести UUID.

Как изменить UUID раздела?

@@ -552,7 +551,7 @@

Деструктивные способы восстановления
sudo xfs_admin -U generate /dev/sda1
 
-

Здесь /dev/sda1 – раздел, на котором требуется изменить UUID.

+

Здесь /dev/sda1 -- раздел, на котором требуется изменить UUID.

Как получить PID запущенного процесса?

@@ -578,7 +577,7 @@

Деструктивные способы восстановления
kill -15 XXXX
 
-

Здесь XXXX – PID нужного процесса.

+

Здесь XXXX -- PID нужного процесса.

Вместо явного указания PID процесса существует возможность завершить работу процесса с указанным именем посредством killall:

-

Здесь XXXX – PID нужного процесса.

+

Здесь XXXX -- PID нужного процесса.

Вместо явного указания PID процесса существует возможность завершить работу процесса с указанным именем посредством killall:

-

Здесь X – маска процессора (CPU affinity), который будет обрабатывать данное прерывание, а Y – номер прерывания (указан в левом столбце таблицы прерываний).

+

Здесь X -- маска процессора (CPU affinity), который будет обрабатывать данное прерывание, а Y -- номер прерывания (указан в левом столбце таблицы прерываний).

Чтобы вычислить маску следует возвести число 2 в степень, равную порядкому номеру процессора, и результат перевести в шестнадцатиричную систему счисления.

@@ -721,7 +720,7 @@

Деструктивные способы восстановления

Чем отличается Effective UID процесса от Real UID?

В мире UNIX считается нормальным, когда один процесс запускается от одного пользователя, но при этом получает права совсем другого (чаще всего это суперпользователь root).

-

В качестве простого примера рассмтрим ситуацию, когда пользователь user1 запускает бинарник с установленным suid-битом /usr/bin/foo-bar. Таким образом, у процесса foo-bar в качестве Real user ID будет установлен user1, а Effective user IDroot. Это сделано для того, чтобы приложение могло самостоятельно отказаться от повышенных прав, либо переключаться между ними при помощи соответствующего системного вызова.

+

В качестве простого примера рассмтрим ситуацию, когда пользователь user1 запускает бинарник с установленным suid-битом /usr/bin/foo-bar. Таким образом, у процесса foo-bar в качестве Real user ID будет установлен user1, а Effective user ID -- root. Это сделано для того, чтобы приложение могло самостоятельно отказаться от повышенных прав, либо переключаться между ними при помощи соответствующего системного вызова.

Как скопировать данные с одного раздела на другой?

@@ -793,7 +792,7 @@

Деструктивные способы восстановления -

Здесь foo и bar – имена сокращений (алиасов), которые будут использоваться для подключения. Для каждого могут быть указаны индивидуальные настройки, включая различные SSH ключи при помощи директивы IdentityFile.

+

Здесь foo и bar -- имена сокращений (алиасов), которые будут использоваться для подключения. Для каждого могут быть указаны индивидуальные настройки, включая различные SSH ключи при помощи директивы IdentityFile.

Подключимся к первому серверу:

ssh foo
 
@@ -805,7 +804,7 @@

Деструктивные способы восстановления

Что такое FUSE?

-

FUSE (file system in userspace) – это модуль ядра и набор утилит для работы с ним, предназначенные для запуска различных файловых систем в пользовательском пространстве.

+

FUSE (file system in userspace) -- это модуль ядра и набор утилит для работы с ним, предназначенные для запуска различных файловых систем в пользовательском пространстве.

Благодаря FUSE в Fedora могут использоваться файловые системы, которые по какой-либо причине не могут войти напрямую в состав ядра Linux из-за лицензионных проблем, либо патентов.

Некоторые примеры подобных реализаций:

@@ -835,7 +834,7 @@

Деструктивные способы восстановления
kinit foo-bar@FEDORAPROJECT.ORG
 

-

Здесь foo-bar – логин на удалённой системе, а FEDORAPROJECT.ORG – имя домена (должно быть указано строго в верхнем регистре).

+

Здесь foo-bar -- логин на удалённой системе, а FEDORAPROJECT.ORG -- имя домена (должно быть указано строго в верхнем регистре).

В случае ввода верных авторизационных данных процесс должен пройти в штатном режиме.

@@ -849,7 +848,7 @@

Деструктивные способы восстановления
kinit -R foo-bar@FEDORAPROJECT.ORG
 
-

Здесь foo-bar – логин на удалённой системе, а FEDORAPROJECT.ORG – имя домена (должно быть указано строго в верхнем регистре).

+

Здесь foo-bar -- логин на удалённой системе, а FEDORAPROJECT.ORG -- имя домена (должно быть указано строго в верхнем регистре).

В каталоге появился файл с некорректным именем, который не удаётся удалить. Что делать?

@@ -867,7 +866,7 @@

Деструктивные способы восстановления
find . -maxdepth 1 -type f -inum XXXXXXX -delete
 
-

Здесь XXXXXXX – номер I-узла некорректного файла.

+

Здесь XXXXXXX -- номер I-узла некорректного файла.

Нужно ли выполнять дефрагментацию для разделов с ФС ext4?

@@ -895,7 +894,7 @@

Деструктивные способы восстановления
sudo fsck -t ext4 -fn /dev/sda2
 
-

Здесь /dev/sda2 – раздел, на котором следует провести процесс дефрагментации. Операция займёт достаточно много времени (в зависимости от размера диска). Прерывать её не следует, т.к. это может привести к полной потере данных.

+

Здесь /dev/sda2 -- раздел, на котором следует провести процесс дефрагментации. Операция займёт достаточно много времени (в зависимости от размера диска). Прерывать её не следует, т.к. это может привести к полной потере данных.

Как определить количество доступных процессоров или ядер?

@@ -960,7 +959,7 @@

Деструктивные способы восстановления

Что такое coredump и почему systemd сохраняет их?

-

Coredump – это дамп закрытой памяти процесса, создаваемый в момент возникновения в нём внештатной ситуации, приводящей к аварийному завершению. Эти дампы используются всевозможными системами анализа и необходимы для создания правильных баг-репортов.

+

Coredump -- это дамп закрытой памяти процесса, создаваемый в момент возникновения в нём внештатной ситуации, приводящей к аварийному завершению. Эти дампы используются всевозможными системами анализа и необходимы для создания правильных баг-репортов.

По умолчанию systemd при падениях любых процессов (как системных, так и пользовательских), сохраняет дампы их закрытой памяти в каталоге /var/lib/systemd/coredump, поэтому он может занимать десятки гигабайт.

Возможно их ограничить, либо полностью отключить.

@@ -1005,7 +1004,7 @@

Деструктивные способы восстановления

При загрузке модуля ядра через modprobe я получаю ошибку. Как исправить?

-

Если при попытке загрузки модуля ядра при помощи modprobe с правами суперпользователя воникает ошибка modprobe: ERROR: could not insert „XXXXXXX“: Operation not permitted, значит включён режим UEFI Secure Boot, а данный модуль не имеет цифровой подписи.

+

Если при попытке загрузки модуля ядра при помощи modprobe с правами суперпользователя воникает ошибка modprobe: ERROR: could not insert 'XXXXXXX': Operation not permitted, значит включён режим UEFI Secure Boot, а данный модуль не имеет цифровой подписи.

Необходимо либо отключить Secure Boot в настройках UEFI компьютера, либо подписать его действительной цифровой подписью.

@@ -1016,7 +1015,7 @@

Деструктивные способы восстановления

Почему моё приложение не может использовать порт ниже 1024?

Диапазон портов 1-1023 зарезервирован для суперпользователя, а также приложений, наделённых его правами.

Стандартная схема использования: сервис запускается с правами root, начинает прослушивать необходимый ему порт, а затем сбрасывает повышенные права. Так поступают большинство популярных серверных приложений (apache, nginx и т.д.).

-

Существует и альтернативный вариант – запуск при помощи особого юнита systemd.

+

Существует и альтернативный вариант -- запуск при помощи особого юнита systemd.

Как запустить приложение на порту ниже 1024 при помощи systemd?

@@ -1098,7 +1097,7 @@

Деструктивные способы восстановления
sudo tune2fs -m 0 /dev/sdX1
 
-

Здесь 0 – процентное соотношение зарезервированных блоков к обычным (отсутствуют), а /dev/sdX1 – раздел диска, на котором будут произведены изменения.

+

Здесь 0 -- процентное соотношение зарезервированных блоков к обычным (отсутствуют), а /dev/sdX1 -- раздел диска, на котором будут произведены изменения.

Как включить поддержку zswap в Fedora?

@@ -1187,7 +1186,7 @@

Деструктивные способы восстановления -

Здесь /dev/sdX2 – накопитель с файловой системой BTRFS.

+

Здесь /dev/sdX2 -- накопитель с файловой системой BTRFS.

Как включить сжатие данных на разделе с BTRFS?

@@ -1201,7 +1200,7 @@

Деструктивные способы восстановления
UUID=XXXXX-XXXXX /   btrfs   compress=zstd:1,subvol=fedora   0 0
 
-

Здесь XXXXX-XXXXXUUID раздела.

+

Здесь XXXXX-XXXXX -- UUID раздела.

Сохраним изменения и произведём перезагрузку системы:

- + Fork me on GitHub diff --git a/development.html b/development.html index d40b9048..e7058d24 100644 --- a/development.html +++ b/development.html @@ -1,23 +1,22 @@ - + - Разработка и сборка пакетов — Неофициальный FAQ по Fedora (версия 2024.01.16) + Разработка и сборка пакетов — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -55,7 +54,7 @@

Что такое Koji?

-

Fedora Koji – это автоматизированная среда для сборки пакетов для Fedora.

+

Fedora Koji -- это автоматизированная среда для сборки пакетов для Fedora.

Хочу внести свои правки в пакет и пересобрать его для личных нужд. Как проще это сделать?

@@ -67,7 +66,7 @@
fedpkg clone -a foo-bar
 
-

Перейдём в каталог с загруженными исходниками и переключимся на ветку для конкретной версии Fedora (если нужна версия из Rawhide – следует использовать master):

+

Перейдём в каталог с загруженными исходниками и переключимся на ветку для конкретной версии Fedora (если нужна версия из Rawhide -- следует использовать master):

cd foo-bar
 fedpkg switch-branch f38
 
@@ -93,7 +92,7 @@
git archive --format=tar --prefix=foo-bar-1.0.0/ HEAD | gzip > ~/rpmbuild/SOURCES/foo-bar-1.0.0.tar.gz
 
-

Здесь HEAD – указатель на актуальный коммит (вместо этого можно использовать SHA1 хеш любого коммита, а также имя тега или ветки), foo-bar – название проекта, а 1.0.0 – его версия.

+

Здесь HEAD -- указатель на актуальный коммит (вместо этого можно использовать SHA1 хеш любого коммита, а также имя тега или ветки), foo-bar -- название проекта, а 1.0.0 -- его версия.

Как переопределить пакет в Koji репозитория RPM Fusion?

@@ -123,7 +122,7 @@
  1. включить двухфакторную аутентификацию в настройках Google аккаунта;

  2. -
  3. в настройках безопасности почтового ящика Gmail разрешить использование «небезопасных приложений» (под небезопасными Google понимает любые, не поддерживающие OAuth2);

  4. +
  5. в настройках безопасности почтового ящика Gmail разрешить использование "небезопасных приложений" (под небезопасными Google понимает любые, не поддерживающие OAuth2);

  6. там же включить доступ к почте посредством POP3 или IMAP (это активирует также и необходимый для нас протокол SMTP);

  7. в настройках безопасности сгенерировать новый пароль для приложения;

  8. указать в файле ~/.gitconfig параметры почтового сервиса;

  9. @@ -166,7 +165,7 @@
    cat /proc/$PID/environ
     
    -

    Здесь $PIDPID процесса, информацию о котором необходимо получить.

    +

    Здесь $PID -- PID процесса, информацию о котором необходимо получить.

Как задать переменную окружения?

@@ -274,7 +273,7 @@
g++ $(rpm -E %{optflags}) -fPIC helloworld.cpp -o helloworld $(rpm -E %{build_ldflags}) -lstdc++
 
-

Здесь g++ – запускающий файл файл компилятора, helloworld.cpp – файл с исходным кодом (если их несколько, то разделяются пробелом), helloworld – имя результирующего бинарника, -lstdc++ – указание компоновщику на необходимость линковки со стандартной библиотекой C++.

+

Здесь g++ -- запускающий файл файл компилятора, helloworld.cpp -- файл с исходным кодом (если их несколько, то разделяются пробелом), helloworld -- имя результирующего бинарника, -lstdc++ -- указание компоновщику на необходимость линковки со стандартной библиотекой C++.

Корректные флаги компиляции и компоновки вставляются автоматически из соответствующих макросов RPM.

Запустим результат сборки:

./helloworld
@@ -440,8 +439,8 @@
 

Если приложение было собрано со старой версией библиотеки foo-bar, которой уже нет в репозиториях и его требуется запустить, существует два способа:

    -
  1. LD_PRELOAD – небезопасный – библиотека (или библиотеки) напрямую инъектируется в процесс средствами интерпретатора динамических библиотек LD до его непосредственного запуска;

  2. -
  3. LD_LIBRARY_PATH – более безопасный – список каталогов, в которых интерпретатор динамических библиотек LD ищет соответствующие so, расширяется на указанные пользователем значения.

  4. +
  5. LD_PRELOAD -- небезопасный -- библиотека (или библиотеки) напрямую инъектируется в процесс средствами интерпретатора динамических библиотек LD до его непосредственного запуска;

  6. +
  7. LD_LIBRARY_PATH -- более безопасный -- список каталогов, в которых интерпретатор динамических библиотек LD ищет соответствующие so, расширяется на указанные пользователем значения.

Рассмотрим второй способ с переопределением переменной окружения LD_LIBRARY_PATH.

@@ -452,7 +451,7 @@ /path/to/binary/foo
-

Здесь foo – имя бинарника, который требуется запустить, а /path/to/binary – каталог, в котором он находится. В качестве разделителя путей LD_LIBRARY_PATH применяется двоеточие. Закрывающий слэш не ставится.

+

Здесь foo -- имя бинарника, который требуется запустить, а /path/to/binary -- каталог, в котором он находится. В качестве разделителя путей LD_LIBRARY_PATH применяется двоеточие. Закрывающий слэш не ставится.

Установим скрипту разрешение не запуск и запустим его:

chmod +x run-foo.sh
 ./run-foo.sh
@@ -486,7 +485,7 @@
 

В Qt Creator отсутствует документация. Как исправить?

-

Если Qt Creator при попытке загрузить документацию выдаёт ошибку Error loading: qthelp://org.qt-project.qtcreator.472/doc/index.html, выберем пункт меню ToolsOptionsHelpDocumentationAdd, затем вручную добавим следующие файлы:

+

Если Qt Creator при попытке загрузить документацию выдаёт ошибку Error loading: qthelp://org.qt-project.qtcreator.472/doc/index.html, выберем пункт меню Tools -- Options -- Help -- Documentation -- Add, затем вручную добавим следующие файлы:

/usr/share/doc/qt5/qmake.qch
 /usr/share/doc/qt5/qtconcurrent.qch
 /usr/share/doc/qt5/qtcore.qch
@@ -511,7 +510,7 @@
 

В Qt Creator отсутствуют компиляторы. Как исправить?

Если Qt Creator не смог самостоятельно обнаружить установленный в системе фреймворк Qt, а также компилятор, то необходимо добавить их самостоятельно.

-

Для этого войдём в настройки IDE, затем сначала добавим компилятор GCC /usr/bin/gcc, а затем тулчейн Qt – /usr/bin/qmake-qt5. После этого на вкладке Kits создадим новый набор из данных компонентов.

+

Для этого войдём в настройки IDE, затем сначала добавим компилятор GCC /usr/bin/gcc, а затем тулчейн Qt -- /usr/bin/qmake-qt5. После этого на вкладке Kits создадим новый набор из данных компонентов.

Сохраним изменения в настройках и добавим созданный Kit к своему проекту.

@@ -617,7 +616,7 @@ sudo restorecon -Rv /media/foo-bar/mock/lib
-

Здесь /media/foo-bar – точка монтирования нового накопителя, на котором будут располагаться кэши mock.

+

Здесь /media/foo-bar -- точка монтирования нового накопителя, на котором будут располагаться кэши mock.

Внимание! Раздел назначения должен использовать флаги монтирования по умолчанию defaults. В противном случае не будут выполнены скриптлеты и сборка не завершится успешно.

@@ -684,7 +683,7 @@
git diff CCC > result.patch
 
-

Здесь AAA, BBB и CCC – хеши коммитов в Git репозитории.

+

Здесь AAA, BBB и CCC -- хеши коммитов в Git репозитории.

Как экспортировать Git коммит для отправки по электронной почте?

@@ -704,7 +703,7 @@
kinit foo-bar@FEDORAPROJECT.ORG
 
-

Здесь foo-bar – логин в FAS. Имя домена должно быть указано строго в верхнем регистре.

+

Здесь foo-bar -- логин в FAS. Имя домена должно быть указано строго в верхнем регистре.

Также для некоторых операций необходимо загрузить публичный ключ SSH в FAS аккаунт.

@@ -719,7 +718,7 @@

Когда сервер запросит ввод Enter OTP Token Value:, укажем свой пароль и текущий код из OTP-аутентификатора по схеме парольКОД без пробелов и прочих знаков.

-

Здесь foo-bar – логин в FAS. Имя домена должно быть указано строго в верхнем регистре.

+

Здесь foo-bar -- логин в FAS. Имя домена должно быть указано строго в верхнем регистре.

Как запросить создание пакета в репозитории?

@@ -728,7 +727,7 @@
sudo dnf install fedpkg
 
-

Получим новый токен в Pagure, который будет использоваться утилитой fedpkg для создания заявки. Для этого перейдём в раздел SettingsAPI KeysCreate new key, затем в списке доступных разрешений (ACLs) установим флажок только около опции Create a new ticket и нажмём кнопку Add.

+

Получим новый токен в Pagure, который будет использоваться утилитой fedpkg для создания заявки. Для этого перейдём в раздел Settings -- API Keys -- Create new key, затем в списке доступных разрешений (ACLs) установим флажок только около опции Create a new ticket и нажмём кнопку Add.

Создадим файл конфигурации fedpkg:

mkdir -p ~/.config/rpkg
 touch ~/.config/rpkg/fedpkg.conf
@@ -739,13 +738,13 @@
 token = XXXXXXXXXX
 
-

Здесь XXXXXXXXXX – полученный от Pagure токен.

+

Здесь XXXXXXXXXX -- полученный от Pagure токен.

Запросим создание нового пакета в репозитории, а также веток для всех поддерживаемых релизов Fedora:

fedpkg request-repo --namespace rpms --monitor monitoring foo-bar YYYYYY
 fedpkg request-branch --namespace rpms --repo foo-bar --all-releases
 
-

Здесь foo-bar – имя пакета, а YYYYYY – номер заявки в Red Hat BugZilla с успешно завершённым package review.

+

Здесь foo-bar -- имя пакета, а YYYYYY -- номер заявки в Red Hat BugZilla с успешно завершённым package review.

Как загрузить файлы с исходными кодами пакета в систему сборки?

@@ -854,7 +853,7 @@
%_topdir /media/foo-bar/rpmbuild
 
-

Здесь /media/foo-bar – новый каталог размещения базовой иерархии rpmbuild.

+

Здесь /media/foo-bar -- новый каталог размещения базовой иерархии rpmbuild.

Сохраним изменения, которые вступят в силу немеденно.

@@ -867,7 +866,7 @@
licensecheck --recursive --merge-licenses --no-verbose /path/to/foo-bar > ~/results.txt
 
-

Здесь /path/to/foo-bar – путь к распакованным исходникам проекта, а ~/results.txt – имя файла, в котором будут сохранены результаты проверки.

+

Здесь /path/to/foo-bar -- путь к распакованным исходникам проекта, а ~/results.txt -- имя файла, в котором будут сохранены результаты проверки.

Как загрузить в gdb отладчик coredump падения?

@@ -884,7 +883,7 @@
gdb /usr/bin/foo-bar /path/to/coredump 2>&1 | tee ~/backtrace.log
 
-

Здесь /usr/bin/foo-bar – путь к отлаживаемому приложению, /path/to/coredump – coredump падения (версия приложения и дампа, снятого с него, должны обязательно совпадать), а ~/backtrace.log – файл, в котором будет сохранён трейс падения.

+

Здесь /usr/bin/foo-bar -- путь к отлаживаемому приложению, /path/to/coredump -- coredump падения (версия приложения и дампа, снятого с него, должны обязательно совпадать), а ~/backtrace.log -- файл, в котором будет сохранён трейс падения.

Как собрать пакет с использованием компилятора Clang в Fedora?

@@ -917,7 +916,7 @@

Qt-приложение, собранное Clang с LTO не запускается. Что делать?

-

Невозможность запуска Qt-приложений, собранных компилятором Clang с включёнными LTO-оптимизациями – это известная проблема, которая в настоящее время не решена.

+

Невозможность запуска Qt-приложений, собранных компилятором Clang с включёнными LTO-оптимизациями -- это известная проблема, которая в настоящее время не решена.

Для её решения необходимо либо отказаться от использования компилятора Clang и вернуться на GCC, либо отключить LTO-оптимизации.

@@ -956,7 +955,7 @@

Как извлечь из Koji какие-либо данные для отправки баг-репорта?

-

Т.к. Koji автоматически очищает каталог сборки по её завершении с любым статусом, единственная возможность извлечь полезные данные – это закодировать их в формате Uuencode и вывести в общий журнал сборки.

+

Т.к. Koji автоматически очищает каталог сборки по её завершении с любым статусом, единственная возможность извлечь полезные данные -- это закодировать их в формате Uuencode и вывести в общий журнал сборки.

Добавим в SPEC-файл пакета зависимость от sharutils:

BuildRequires: sharutils
 
@@ -997,9 +996,9 @@

Данную утилиту также можно использовать в различных скриптах, исходя из возвращаемых ею кодов завершения:

    -
  • 0 – версии равны;

  • -
  • 11 – версия X больше, чем Y;

  • -
  • 12 – версия X меньше, чем Y.

  • +
  • 0 -- версии равны;

  • +
  • 11 -- версия X больше, чем Y;

  • +
  • 12 -- версия X меньше, чем Y.

@@ -1058,7 +1057,7 @@

Как собрать несколько зависящих друг от друга пакетов?

-

Если раньше приходилось использовать механизм «build overrides», позволяющий вручную переопределять пакеты в сборочном репозитории, то сейчас рекомендуется для сборки двух и более пакетов применять side-теги, т.к. это более простой и безопасный способ, не создающий конфликтов и проблем с зависимостями.

+

Если раньше приходилось использовать механизм "build overrides", позволяющий вручную переопределять пакеты в сборочном репозитории, то сейчас рекомендуется для сборки двух и более пакетов применять side-теги, т.к. это более простой и безопасный способ, не создающий конфликтов и проблем с зависимостями.

Мейнтейнер может запросить создание произвольного количества side-тегов и производить сборку в них по своему усмотрению.

Запросим новый side-tag для F38:

fedpkg request-side-tag --base-tag f38-build
@@ -1078,11 +1077,11 @@
 

Собираем все остальные пакеты тем же способом.

-

По окончании перейдём в Bodhi и выберем Create New UpdateUse Side Tag для выгрузки его в основной репозиторий.

+

По окончании перейдём в Bodhi и выберем Create New Update -- Use Side Tag для выгрузки его в основной репозиторий.

Как собрать несколько зависящих друг от друга пакетов по цепочке?

-

Существует и более удобный способ – сборки по цепочке (chain builds), доступный для Fedora Rawhide, либо заранее созданных side-тегов.

+

Существует и более удобный способ -- сборки по цепочке (chain builds), доступный для Fedora Rawhide, либо заранее созданных side-тегов.

Мейнтейнер может указать произвольное количество пакетов в пределах одного задания. Koji выполнит задачу строго в указанном порядке.

Внимание! Каталоги с исходниками всех участников группы должны находиться на одном уровне файловой иерархии. При сборке для side-tag, перед запуском процесса необходимо зайти в каталог каждого пакета из цепочки и при помощи команды fedpkg switch-branch f38 переключиться на нужную ветку.

Перейдём в каталог последнего пакета в цепочке (в данном примере это bar) и запустим процесс.

@@ -1163,7 +1162,7 @@

Способ 1. Ручной.

Способ 2. Полуавтоматический.

-

Изменим нумерацию патчей в директивах Patch так, чтобы от 1 до 9 были патчи, которые требуется использовать при выполнении заданного условия, а с 10 – все остальные:

+

Изменим нумерацию патчей в директивах Patch так, чтобы от 1 до 9 были патчи, которые требуется использовать при выполнении заданного условия, а с 10 -- все остальные:

- + Fork me on GitHub diff --git a/generic-info.html b/generic-info.html index b689595f..2ad1c121 100644 --- a/generic-info.html +++ b/generic-info.html @@ -1,25 +1,24 @@ - + - Asosiy ma’lumotlar — Неофициальный FAQ по Fedora (версия 2024.01.16) + Asosiy ma'lumotlar — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + - + @@ -40,10 +39,10 @@
-

Asosiy ma’lumotlar

+

Asosiy ma'lumotlar

Fedora bu nima?

-

Fedora – bu GNU/Linux distributivlaridan biri hisoblanib, Red Hat kompaniyasi homiyligida ochiq hamjamiyat tomonidan ishlab chiqariladi.

+

Fedora -- bu GNU/Linux distributivlaridan biri hisoblanib, Red Hat kompaniyasi homiyligida ochiq hamjamiyat tomonidan ishlab chiqariladi.

Как сильно дистрибутив зависит от компании Red Hat?

@@ -53,7 +52,7 @@

Что такое FESCo?

-

FESCo – Fedora Engineering Steering Committee. Это избираемый общим голосованием орган, занимающийся непосредственным управлением и развитием дистрибутива.

+

FESCo -- Fedora Engineering Steering Committee. Это избираемый общим голосованием орган, занимающийся непосредственным управлением и развитием дистрибутива.

Основные задачи комитета:

    @@ -85,7 +84,7 @@

В чём отличие от других дистрибутивов?

-

Fedora – это bleeding edge дистрибутив. Он всегда находится на острие прогресса. Сначала новые разработки появляются здесь и лишь спустя определённое время в остальных дистрибутивах. Из-за этого некоторые называют федору «тестовым полигоном», но это в корне неверно, ибо релизы достаточно стабильны.

+

Fedora -- это bleeding edge дистрибутив. Он всегда находится на острие прогресса. Сначала новые разработки появляются здесь и лишь спустя определённое время в остальных дистрибутивах. Из-за этого некоторые называют федору «тестовым полигоном», но это в корне неверно, ибо релизы достаточно стабильны.

Где скачать Fedora?

@@ -154,11 +153,11 @@

Что такое COPR?

-

Fedora COPR – это бесплатный хостинг для размещения пользовательских репозиториев (аналог AUR в Arch Linux или PPA в Ubuntu).

+

Fedora COPR -- это бесплатный хостинг для размещения пользовательских репозиториев (аналог AUR в Arch Linux или PPA в Ubuntu).

Что такое RFRemix?

-

RFRemix – это ремикс оргинального дистрибутива Fedora с использованием репозиториев RPM Fusion и Russian Fedora, адаптированный для российских пользователей. На данный момент все релизы устарели и более не поддерживаются.

+

RFRemix -- это ремикс оргинального дистрибутива Fedora с использованием репозиториев RPM Fusion и Russian Fedora, адаптированный для российских пользователей. На данный момент все релизы устарели и более не поддерживаются.

Выпуск RFRemix прекращён, поскольку проект выполнил свою задачу на 100%: все его наработки были приняты в официальные репозитории Fedora, а также RPM Fusion. Мейнтейнеры Russian Fedora теперь являются мейнтейнерами Fedora и RPM Fusion.

Подробности можно узнать здесь.

@@ -173,33 +172,33 @@

Чаты в Telegram:

    -
  • Russian Fedora – основной чат на русском языке;

  • -
  • Fedora – основной чат на английском языке;

  • -
  • Russian Fedora Offtopic – специальный чат для оффтопика.

  • +
  • Russian Fedora -- основной чат на русском языке;

  • +
  • Fedora -- основной чат на английском языке;

  • +
  • Russian Fedora Offtopic -- специальный чат для оффтопика.

Чаты в Matrix:

Чаты в IRC:

    -
  • #fedora – основной чат на английском языке;

  • -
  • #fedora-devel – чат для разработчиков на английском языке;

  • -
  • #rpmfusion – чат поддержки репозитория RPM Fusion на английском языке.

  • +
  • #fedora -- основной чат на английском языке;

  • +
  • #fedora-devel -- чат для разработчиков на английском языке;

  • +
  • #rpmfusion -- чат поддержки репозитория RPM Fusion на английском языке.

Чаты в XMPP:

Форумы:

@@ -231,7 +230,7 @@

Что такое Silverblue?

-

Fedora Silverblue – это особая версия Fedora, основанная на принципах максимальной контейнеризации и неизменяемых (immutable) образов основной системы.

+

Fedora Silverblue -- это особая версия Fedora, основанная на принципах максимальной контейнеризации и неизменяемых (immutable) образов основной системы.

Благодаря использованию rpm-ostree Silverblue имеет атомарные обновления с возможностью отката на любую предыдущую версию системы. В то же время основной образ и корневая файловая система являются неизменяемыми, что делает невозможным их повреждение.

Пользовательские приложения предлагается устанавливать исключительно из Flatpak репозиториев.

@@ -250,17 +249,17 @@ - + Fork me on GitHub diff --git a/genindex.html b/genindex.html index 7c3ee1ef..f8cc3950 100644 --- a/genindex.html +++ b/genindex.html @@ -1,22 +1,21 @@ - + - Алфавитный указатель — Неофициальный FAQ по Fedora (версия 2024.01.16) + Index — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -37,10 +36,10 @@
-

Алфавитный указатель

+

Index

- Символы + Symbols | A | B | C @@ -69,7 +68,7 @@

Алфавитный указатель

| Z
-

Символы

+

Symbols

-

Здесь RAM – объём установленной оперативной памяти.

+

Здесь RAM -- объём установленной оперативной памяти.

Как полностью скрыть меню Grub?

@@ -362,7 +361,7 @@
sudo dumpe2fs /dev/sda1 | grep 'Filesystem created:'
 
-

Здесь /dev/sda1 – раздел диска с Fedora.

+

Здесь /dev/sda1 -- раздел диска с Fedora.

Как определить в каком режиме была произведена установка системы?

@@ -397,7 +396,7 @@
  1. осуществим загрузку с netinstall-образа;

  2. -
  3. в списке доступных компонентов выберем «Минимальная система»;

  4. +
  5. в списке доступных компонентов выберем "Минимальная система";

  6. завершим установку в штатном режиме;

  7. загрузимся в установленную систему;

  8. отключим установку слабых зависимостей;

  9. @@ -416,7 +415,7 @@
    1. наличие незашифрованного раздела подкачки (также допускается использование BTRFS subvolume), смонтированного и указанного в /etc/fstab;

    2. отключённое сжатие памяти zram или zswap;

    3. -
    4. установленный параметр ядра resume=UUID=XXXXXX, где XXXXXX – это UUID раздела подкачки;

    5. +
    6. установленный параметр ядра resume=UUID=XXXXXX, где XXXXXX -- это UUID раздела подкачки;

    7. интегрированный в initrd модуль resume.

@@ -431,17 +430,17 @@ - + Fork me on GitHub diff --git a/legal-info.html b/legal-info.html index 1d327e19..80efdbab 100644 --- a/legal-info.html +++ b/legal-info.html @@ -1,23 +1,22 @@ - + - Правовая информация — Неофициальный FAQ по Fedora (версия 2024.01.16) + Правовая информация — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -46,7 +45,7 @@

Используемые торговые знаки

-

«Fedora» является зарегистрированным товарным знаком компании Red Hat, Inc. в США и/или других странах.

+

"Fedora" является зарегистрированным товарным знаком компании Red Hat, Inc. в США и/или других странах.

В тексте данного FAQ могут упоминаться и другие товарные марки, принадлежащие их законным владельцам. Все права сохранены.

@@ -532,17 +531,17 @@ - + Fork me on GitHub diff --git a/networking.html b/networking.html index dda888c4..fe210202 100644 --- a/networking.html +++ b/networking.html @@ -1,23 +1,22 @@ - + - Сетевое администрирование — Неофициальный FAQ по Fedora (версия 2024.01.16) + Сетевое администрирование — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -45,15 +44,15 @@

Хочу обезопасить свой Интернет-трафик. Какую реализацию VPN выбрать?

WireGuard

-

WireGuard – самый современный и актуальный протокол для VPN. Обеспечивает максимальную скорость работы за счёт реализации в виде модуля ядра Linux и надёжную криптографическую защиту от прослушивания.

+

WireGuard -- самый современный и актуальный протокол для VPN. Обеспечивает максимальную скорость работы за счёт реализации в виде модуля ядра Linux и надёжную криптографическую защиту от прослушивания.

OpenVPN

-

OpenVPN – cамая популярная и стабильная в настоящее время реализация VPN. Способен работать как через UDP, так и TCP, имеет плагины маскировки под TLS, обеспечивает высокую защищённость, но имеет низкую производительность из-за постоянных переключений между режимами пользователя и ядра.

+

OpenVPN -- cамая популярная и стабильная в настоящее время реализация VPN. Способен работать как через UDP, так и TCP, имеет плагины маскировки под TLS, обеспечивает высокую защищённость, но имеет низкую производительность из-за постоянных переключений между режимами пользователя и ядра.

L2TP/IPSec

-

Поддерживается большинством роутеров «из коробки», но является устаревшим. Изначально создавался для Windows, поэтому многие серверы заточены под соответствующие реализации клиентов.

+

Поддерживается большинством роутеров "из коробки", но является устаревшим. Изначально создавался для Windows, поэтому многие серверы заточены под соответствующие реализации клиентов.

PPTP

@@ -131,7 +130,7 @@

PPTP

Параметр -c обязателен. Если он не указан, программа выдаст ошибку.

-

192.168.1.2 – это внутренний IP-адрес устройства в ЛВС, на котором запущен сервер. Номер порта указывать не требуется.

+

192.168.1.2 -- это внутренний IP-адрес устройства в ЛВС, на котором запущен сервер. Номер порта указывать не требуется.

Как передать содержимое каталога на удалённый сервер?

@@ -139,7 +138,7 @@

PPTP
rsync -chavzP --delete --stats /path/to/local user@example.org:/path/to/remote
 
-

Здесь user@example.org – данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.

+

Здесь user@example.org -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.

Как получить содержимое каталога с удалённого сервера?

@@ -147,7 +146,7 @@

PPTP
rsync -chavzP --delete --stats user@example.org:/path/to/remote /path/to/local
 
-

Здесь user@example.org – данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.

+

Здесь user@example.org -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.

Как правильно указать DNS серверы в Fedora?

@@ -185,7 +184,7 @@

PPTP
sudo firewall-cmd --reload
 
-

Здесь public – имя зоны для публичного интерфейса, 1.2.3.4 – IP-адрес, а 5.6.7.0/24 – подсеть, доступ для адресов из которой следует разрешить.

+

Здесь public -- имя зоны для публичного интерфейса, 1.2.3.4 -- IP-адрес, а 5.6.7.0/24 -- подсеть, доступ для адресов из которой следует разрешить.

Как средствами Firewalld разрешить подключение к WireGuard серверу только с разрешённых IP адресов?

@@ -202,7 +201,7 @@

PPTP
sudo firewall-cmd --reload
 
-

Здесь 27015 – порт сервера WireGuard, public – имя зоны для публичного интерфейса, 1.2.3.4 – IP-адрес, а 5.6.7.0/24 – подсеть, доступ для адресов из которой следует разрешить.

+

Здесь 27015 -- порт сервера WireGuard, public -- имя зоны для публичного интерфейса, 1.2.3.4 -- IP-адрес, а 5.6.7.0/24 -- подсеть, доступ для адресов из которой следует разрешить.

Как узнать внешний IP адрес за NAT провайдера?

@@ -248,7 +247,7 @@

PPTP
sudo firewall-cmd --reload
 
-

Здесь public – имя зоны для публичного сетевого интерфейса.

+

Здесь public -- имя зоны для публичного сетевого интерфейса.

Как пробросить IP адреса клиентов за CloudFlare?

@@ -264,7 +263,7 @@

PPTP
mtr example.org
 
-

Приостановить работу можно нажатием клавиши P, для возобновить – пробел, а для выхода – Q.

+

Приостановить работу можно нажатием клавиши P, для возобновить -- пробел, а для выхода -- Q.

Как получить список установленных сетевых соединений?

@@ -436,7 +435,7 @@

PPTP
nmcli connection import file /path/to/foo-bar.ovpn type openvpn
 
-

Здесь /path/to/foo-bar.ovpn – путь к OVPN файлу на диске.

+

Здесь /path/to/foo-bar.ovpn -- путь к OVPN файлу на диске.

Встроенные сертификаты и ключи будут автоматически импортированы и сохранены в каталоге ~/.cert/nm-openvpn, что не вызовет проблем с SELinux.

@@ -516,7 +515,7 @@

PPTP

Почему система обращается к fedoraproject.org каждые 5 минут?

С настройками по умолчанию, предустановленными пакетом NetworkManager-config-connectivity-fedora, NetworkManager проверяет доступность Интернета по таймеру каждые 5 минут посредством обращения к файлу hotspot.txt по протоколу HTTP и анализируя ответ сервера.

-

Подключение считается полнофункциональным после получения строки OK. При любом другом ответе – ограниченным.

+

Подключение считается полнофункциональным после получения строки OK. При любом другом ответе -- ограниченным.

С целью сохранения приватности возможно отключить это поведение.

@@ -540,17 +539,17 @@

PPTP
-

Навигация

+

Navigation

@@ -622,12 +621,12 @@

Related Topics

- + Fork me on GitHub diff --git a/objects.inv b/objects.inv index 466db4036902d4d47885ddecbc9c6e447d167f01..16c21d97985d85304f4b5d6d0348e066a49402bf 100644 GIT binary patch delta 23705 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 IZ#g1yRaSb2+yDRo delta 23704 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 Hw-&k8_FHZK diff --git a/package-manager.html b/package-manager.html index 78dcf395..5a6c7248 100644 --- a/package-manager.html +++ b/package-manager.html @@ -1,23 +1,22 @@ - + - Пакетный менеджер и установка пакетов — Неофициальный FAQ по Fedora (версия 2024.01.16) + Пакетный менеджер и установка пакетов — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -51,7 +50,7 @@

Что такое Flatpak пакеты?

-

Flatpak – это современный прогрессивный формат самодостаточных пакетов для GNU/Linux. Он поддерживает рантаймы, изоляцию внутри песочниц, установку без наличия прав суперпользователя и многое другое.

+

Flatpak -- это современный прогрессивный формат самодостаточных пакетов для GNU/Linux. Он поддерживает рантаймы, изоляцию внутри песочниц, установку без наличия прав суперпользователя и многое другое.

Какие преимущества и недостатки у Flatpak пакетов?

@@ -129,7 +128,7 @@

Теперь внутри него допускается использовать любые механизмы установки пакетов Python: pip, install.py и т.д.

-

Здесь foo-bar – название venv контейнера. Допускается создавать неограниченное их количество.

+

Здесь foo-bar -- название venv контейнера. Допускается создавать неограниченное их количество.

Как удалить установленные пакеты из Python Virtual Environment?

@@ -249,7 +248,7 @@
installonly_limit=2
 
-

Минимально допустимое значение – 2 (будут сохраняться два ядра: текущее и предыдущее).

+

Минимально допустимое значение -- 2 (будут сохраняться два ядра: текущее и предыдущее).

Как настроить работу dnf через прокси?

@@ -267,18 +266,18 @@ proxy_password=PASSWORD -

Здесь LOGIN – логин пользователя на прокси-сервере, а PASSWORD – его пароль.

+

Здесь LOGIN -- логин пользователя на прокси-сервере, а PASSWORD -- его пароль.

Обычно DNF корректно определяет тип авторизации, используемый прокси-сервером, но иногда (в случае HTTP-прокси) этот механизм работает некорретно. В этом случае достаточно указать ее тип:

proxy_auth_method=METHOD
 
-

Здесь METHOD – название метода аутентификации, используемого прокси-сервером.

+

Здесь METHOD -- название метода аутентификации, используемого прокси-сервером.

Список часто используемых методов:

    -
  • basic – базовая HTTP аутентификация, вероятно вы используете именно этот метод;

  • -
  • digest – HTTP дайджест-аутентификация;

  • -
  • ntlm – NTLM HTTP аутентификация, активно применяется в среде продуктов Microsoft.

  • +
  • basic -- базовая HTTP аутентификация, вероятно вы используете именно этот метод;

  • +
  • digest -- HTTP дайджест-аутентификация;

  • +
  • ntlm -- NTLM HTTP аутентификация, активно применяется в среде продуктов Microsoft.

Подробнее о поддерживаемых методах аутентификации см. в документации.

@@ -346,7 +345,7 @@

Современный способ
sudo dnf remove kernel-6.0.8* kernel-core-6.0.8* kernel-modules-6.0.8* kernel-devel-6.0.8*
 
-

Здесь 6.0.8 – это версия удаляемого ядра.

+

Здесь 6.0.8 -- это версия удаляемого ядра.

Какие сторонние репозитории лучше всего подключать?

@@ -516,7 +515,7 @@

Современный способДля установки обновлений посредством dnf рекомендуется два варианта:

    -
  • переключение в консоль фреймбуфера посредством нажатия комбинации Ctrl+Alt+F3 (для возврата в графический режим – Ctrl+Alt+F1), выполнение в ней нового входа в систему и запуск процесса обновления;

  • +
  • переключение в консоль фреймбуфера посредством нажатия комбинации Ctrl+Alt+F3 (для возврата в графический режим -- Ctrl+Alt+F1), выполнение в ней нового входа в систему и запуск процесса обновления;

  • использование screen сессии. Тогда, в случае падения эмулятора терминала, процесс не будет прерван.

@@ -537,7 +536,7 @@

Современный способ
sudo dnf upgrade --refresh --enablerepo=updates-testing --advisory=FEDORA-2018-XXXXXXXXX
 
-

Здесь FEDORA-2018-XXXXXXXXX – уникальный идентификатор обновления из Bodhi.

+

Здесь FEDORA-2018-XXXXXXXXX -- уникальный идентификатор обновления из Bodhi.

Как скачать определённую сборку пакета из Koji?

@@ -626,7 +625,7 @@

Современный способ

Безопасно ли устанавливать и удалять пакеты группами?

-

Устанавливать пакеты группами абсолютно безопасно, однако удалять – нет, т.к. это приведёт к удалению всех её членов, что может привести к полной неработоспособности системы из-за удаления важных компонентов, таких как графическое окружение, менеджер входа в систему и т.д.

+

Устанавливать пакеты группами абсолютно безопасно, однако удалять -- нет, т.к. это приведёт к удалению всех её членов, что может привести к полной неработоспособности системы из-за удаления важных компонентов, таких как графическое окружение, менеджер входа в систему и т.д.

Вывод списка доступных групп:

sudo dnf grouplist
 
@@ -732,7 +731,7 @@

Современный способ
rpm -qa --dbpath /path/to/other/var/lib/rpm
 

-

Здесь /path/to/other/var/lib/rpm – полный путь к базе RPM.

+

Здесь /path/to/other/var/lib/rpm -- полный путь к базе RPM.

Как мне переустановить пакет?

@@ -752,8 +751,8 @@

Современный способ
rpm -qf /path/to/file
 
-

Здесь /path/to/file – абсолютный путь к файлу, который необходимо проверить.

-

Если принадлежность установлена, будет выдано полное имя пакета. В противном случае – сообщение об ошибке.

+

Здесь /path/to/file -- абсолютный путь к файлу, который необходимо проверить.

+

Если принадлежность установлена, будет выдано полное имя пакета. В противном случае -- сообщение об ошибке.

Как проверить какие файлы в системе были изменены?

@@ -897,17 +896,17 @@

Способ 2. Современный. @@ -1025,12 +1024,12 @@

Related Topics

- + Fork me on GitHub diff --git a/search.html b/search.html index 9acceedd..0f2cb581 100644 --- a/search.html +++ b/search.html @@ -1,25 +1,24 @@ - + - Поиск — Неофициальный FAQ по Fedora (версия 2024.01.16) + Search — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -42,12 +41,13 @@
-

Поиск

+

Search

@@ -61,7 +61,7 @@

Поиск

- +
@@ -77,9 +77,9 @@

Поиск

Утилита cryptsetup запросит ввод мастер-пароля.

-

Здесь /dev/sda2 – устройство зашифрованного LUKS тома, для которого требуется добавить ключевой файл.

+

Здесь /dev/sda2 -- устройство зашифрованного LUKS тома, для которого требуется добавить ключевой файл.

Как удалить ключевой файл разблокировки зашифрованного LUKS раздела?

@@ -908,7 +907,7 @@
sudo shred -u -v /etc/keys/foo-bar.key
 
-

Здесь /dev/sda2 – устройство зашифрованного LUKS тома, у которого требуется удалить слот с ключевым файлом.

+

Здесь /dev/sda2 -- устройство зашифрованного LUKS тома, у которого требуется удалить слот с ключевым файлом.

Как настроить автоматическую расшифровку LUKS разделов при загрузке?

@@ -920,7 +919,7 @@
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key luks
 
-

Здесь foo-bar – внутреннее имя, которое будет использоваться dev-mapper, XXXXXXUUID диска, /etc/keys/foo-bar.key – полный путь к ключевому файлу. При шифровании SSD накопителя вместо параметра luks следует использовать discard.

+

Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, /etc/keys/foo-bar.key -- полный путь к ключевому файлу. При шифровании SSD накопителя вместо параметра luks следует использовать discard.

Откроем файл /etc/fstab:

sudoedit /etc/fstab
 
@@ -929,7 +928,7 @@
/dev/mapper/foo-bar /media/data ext4 defaults 1 2
 
-

Здесь foo-bar – внутреннее имя, указанное ранее в crypttab, /media/data – точка монтирования, а ext4 – используемая файловая система.

+

Здесь foo-bar -- внутреннее имя, указанное ранее в crypttab, /media/data -- точка монтирования, а ext4 -- используемая файловая система.

Если всё сделано верно, то при следующей загрузке раздел будет смонтирован автоматически без запроса пароля.

@@ -943,13 +942,13 @@
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key noauto
 
-

Здесь foo-bar – внутреннее имя, которое будет использоваться dev-mapper, XXXXXXUUID диска, /etc/keys/foo-bar.key – полный путь к ключевому файлу. Параметр noauto должен применяться только совместно с ключом.

+

Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, /etc/keys/foo-bar.key -- полный путь к ключевому файлу. Параметр noauto должен применяться только совместно с ключом.

Данное зашифрованное устройство будет смонтировано и автоматически расшифровано при первой попытке доступа к нему.

Как работать с TrueCrypt контейнерами в Fedora?

Из-за несвободной лицензии TrueCrypt и все его форки (в т.ч. VeraCrypt) не могут быть добавлены в репозитории Fedora, однако в настоящее время утилита cryptsetup полностью поддерживает работу с созданными ими контейнерами.

-

Cryptsetup поддерживает монтирование как TrueCrypt, так и VeraCrypt томов (файлы и устройства), а также умеет их администрировать (управлять ключами, паролями). Ограничение лишь одно – нельзя создавать новые зашифрованные данными механизмами контейнеры.

+

Cryptsetup поддерживает монтирование как TrueCrypt, так и VeraCrypt томов (файлы и устройства), а также умеет их администрировать (управлять ключами, паролями). Ограничение лишь одно -- нельзя создавать новые зашифрованные данными механизмами контейнеры.

Как смонтировать TrueCrypt контейнер в Fedora?

@@ -971,7 +970,7 @@
sudo cryptsetup --type tcrypt close /dev/mapper/foo-bar
 
-

Здесь /path/to/container.tc полный путь к файлу контейнера на диске (либо зашифрованному устройству), а foo-bar – внутреннее имя для dev-mapper.

+

Здесь /path/to/container.tc полный путь к файлу контейнера на диске (либо зашифрованному устройству), а foo-bar -- внутреннее имя для dev-mapper.

Как смонтировать VeraCrypt контейнер в Fedora?

@@ -993,7 +992,7 @@
sudo cryptsetup --veracrypt --type tcrypt close /dev/mapper/foo-bar
 
-

Здесь /path/to/container.hc полный путь к файлу контейнера на диске (либо зашифрованному устройству), а foo-bar – внутреннее имя для dev-mapper.

+

Здесь /path/to/container.hc полный путь к файлу контейнера на диске (либо зашифрованному устройству), а foo-bar -- внутреннее имя для dev-mapper.

Как настроить автоматическое монтирование VeraCrypt томов при загрузке?

@@ -1005,7 +1004,7 @@
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key tcrypt-veracrypt
 
-

Здесь foo-bar – внутреннее имя, которое будет использоваться dev-mapper, XXXXXXUUID диска, либо полный путь к файлу контейнера, /etc/keys/foo-bar.key – полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).

+

Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, либо полный путь к файлу контейнера, /etc/keys/foo-bar.key -- полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).

Откроем файл /etc/fstab:

sudoedit /etc/fstab
 
@@ -1014,7 +1013,7 @@
/dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0
 
-

Здесь foo-bar – внутреннее имя, указанное ранее в crypttab, а /media/data – точка монтирования.

+

Здесь foo-bar -- внутреннее имя, указанное ранее в crypttab, а /media/data -- точка монтирования.

Если всё сделано верно, то при следующей загрузке зашифрованный VeraCrypt том будет смонтирован автоматически.

@@ -1042,7 +1041,7 @@
sudo cryptsetup --type bitlk close /dev/mapper/foo-bar
 
-

Здесь /dev/sdX1 – зашифрованное BitLocker устройство, а foo-bar – внутреннее имя для dev-mapper.

+

Здесь /dev/sdX1 -- зашифрованное BitLocker устройство, а foo-bar -- внутреннее имя для dev-mapper.

Как настроить автоматическое монтирование BitLocker томов при загрузке?

@@ -1054,7 +1053,7 @@
foo-bar UUID=XXXXXX /etc/keys/foo-bar.key bitlk
 
-

Здесь foo-bar – внутреннее имя, которое будет использоваться dev-mapper, XXXXXXUUID диска, /etc/keys/foo-bar.key – полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).

+

Здесь foo-bar -- внутреннее имя, которое будет использоваться dev-mapper, XXXXXX -- UUID диска, /etc/keys/foo-bar.key -- полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).

Откроем файл /etc/fstab:

sudoedit /etc/fstab
 
@@ -1063,7 +1062,7 @@
/dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0
 
-

Здесь foo-bar – внутреннее имя, указанное ранее в crypttab, а /media/data – точка монтирования.

+

Здесь foo-bar -- внутреннее имя, указанное ранее в crypttab, а /media/data -- точка монтирования.

Если всё сделано верно, то при следующей загрузке зашифрованный BitLocker том будет смонтирован автоматически.

@@ -1071,8 +1070,8 @@

Заданные пользователем нестандартные контексты, а также переопределения хранятся внутри каталога /etc/selinux/targeted/contexts/files в следующих файлах:

    -
  • file_contexts.local – текстовый формат;

  • -
  • file_contexts.local.bin – скомпилированный бинарный формат.

  • +
  • file_contexts.local -- текстовый формат;

  • +
  • file_contexts.local.bin -- скомпилированный бинарный формат.

Не следует их править в текстовых, либо шестнадцатиричных редакторах, т.к. это может привести к сбою в политиках SELinux и сбросу настроек по умолчанию. Вместо этого необходимо использовать инструмент semanage.

@@ -1103,7 +1102,7 @@

Минимальный размер создаваемого образа должен быть не меньше 32 МБ, т.к. противном случае возникнет ошибка Requested offset is beyond real size of device.

-

Здесь /media/data/foo-bar.dat – полный путь к файлу на диске.

+

Здесь /media/data/foo-bar.dat -- полный путь к файлу на диске.

Создадим зашифрованный LUKS контейнер:

sudo cryptsetup --verify-passphrase luksFormat /media/data/foo-bar.dat -c aes-xts-plain64 -s 256 -h sha512
 
@@ -1155,7 +1154,7 @@
sudo cryptsetup luksErase /dev/sdX1
 
-

Здесь /dev/sdX1 – зашифрованный раздел диска, данные с которого требуется уничтожить. Он не должен быть смонтирован. Ввод пароля не требуется.

+

Здесь /dev/sdX1 -- зашифрованный раздел диска, данные с которого требуется уничтожить. Он не должен быть смонтирован. Ввод пароля не требуется.

После выполнения данного действия все ключевые слоты LUKS-контейнера будут заполнены нулями и доступ к данным, хранящимся на данном разделе, станет невозможен даже при знании верного пароля или наличии ключа.

Внимание! Это действие не затирает содержимое физически, поэтому после его использования рекомендуется осуществить эту процедуру самостоятельно.

@@ -1171,8 +1170,8 @@

Как защитить SSH от возможных MITM-атак?

Для защиты от MITM-атак в протоколе SSH применяется проверка отпечатков публичного ключа сервера в момент установки рукопожатия с эталоном, сохранённым на клиенте.

Во время первого подключения пользователю предлагается проверить отпечаток сервера и либо разрешить, либо отклонить соединение.

-

После одобрения, они вместе с IP-адресом сохраняются в файле ~/.ssh/known_hosts и при следующих подключениях проверяется их действительность. В случае изменения, например из-за проведения злоумышленником атаки «человек посередине», соединение не устанавливается, а пользователю выводится соответствующее сообщение об ошибке.

-

К сожалению, ручная проверка отпечатка мало кем производится, поэтому был придуман новый, более надёжный способ – размещение публичных ключей в виде особых SSHFP записей DNS.

+

После одобрения, они вместе с IP-адресом сохраняются в файле ~/.ssh/known_hosts и при следующих подключениях проверяется их действительность. В случае изменения, например из-за проведения злоумышленником атаки "человек посередине", соединение не устанавливается, а пользователю выводится соответствующее сообщение об ошибке.

+

К сожалению, ручная проверка отпечатка мало кем производится, поэтому был придуман новый, более надёжный способ -- размещение публичных ключей в виде особых SSHFP записей DNS.

При использовании данного метода, при подключении будет проверяться соответствие ключей, полученных от сервера, записям из SSHFP для конкретного домена. При этом конечно же необходимо использовать надёжные DNS-резолверы с поддержкой шифрования DNS-over-TLS, а также рекомендуется подписать DNS-зону DNSSEC.

С помощью утилиты ssh-keygen, на сервере сгенерируем DNS-записи для домена example.org:

ssh-keygen -r example.org
@@ -1278,7 +1277,7 @@
 
sudo fstrim -v /media/foo-bar
 
-

Здесь /media/foo-bar – это точка монтирования.

+

Здесь /media/foo-bar -- это точка монтирования.

Как запретить приложению доступ к сети?

@@ -1303,17 +1302,17 @@ - + Fork me on GitHub diff --git a/tips-and-tricks.html b/tips-and-tricks.html index 48792e6a..272f8a58 100644 --- a/tips-and-tricks.html +++ b/tips-and-tricks.html @@ -1,23 +1,22 @@ - + - Оптимизация и тонкая настройка — Неофициальный FAQ по Fedora (версия 2024.01.16) + Оптимизация и тонкая настройка — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -66,7 +65,7 @@

Как уменьшить потребление оперативной памяти средой рабочего стола KDE?

-

Отключим службу индексации файлов. Для этого зайдём в Параметры системыПоиск, снимем флажок из чекбокса Включить службы поиска файлов и нажмём Применить. Теперь удалим Akonadi:

+

Отключим службу индексации файлов. Для этого зайдём в Параметры системы -- Поиск, снимем флажок из чекбокса Включить службы поиска файлов и нажмём Применить. Теперь удалим Akonadi:

sudo dnf remove akonadi
 
@@ -107,7 +106,7 @@

Как задействовать планировщик ввода/вывода BFQ для HDD?

-

BFQ – это планировщик ввода-вывода (I/O), предназначенный для повышения отзывчивости пользовательского окружения при значительных нагрузках на дисковую подсистему.

+

BFQ -- это планировщик ввода-вывода (I/O), предназначенный для повышения отзывчивости пользовательского окружения при значительных нагрузках на дисковую подсистему.

Проверим, какой из планировщиков используется в данный момент. Если это не BFQ, произведём редактирование файла шаблонов GRUB:

sudoedit /etc/default/grub
 
@@ -128,7 +127,7 @@

Чем можно запустить SWF файл без установки Flash плагина в браузер?

-

SWF файл – это исполняемый файл формата Adobe Flash. Для того, чтобы проиграть его без установки соответствующего плагина в браузер, можно загрузить специальную версию Flash Projector (ранее назывался Standalone).

+

SWF файл -- это исполняемый файл формата Adobe Flash. Для того, чтобы проиграть его без установки соответствующего плагина в браузер, можно загрузить специальную версию Flash Projector (ранее назывался Standalone).

Скачаем Projector:

wget https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux.x86_64.tar.gz -O fpsa.tar.gz
 
@@ -142,7 +141,7 @@
~/foo-bar/flashplayer
 
-

В открывшемся окне нажмём ФайлОткрыть (или комбинацию Ctrl + O) и найдём SWF файл на диске.

+

В открывшемся окне нажмём Файл -- Открыть (или комбинацию Ctrl + O) и найдём SWF файл на диске.

По окончании использования удалим каталог с программой:

rm -rf ~/foo-bar
 
@@ -170,7 +169,7 @@
UUID=XXXXXXXXXX /home ext4 defaults,noexec,nodev,nosuid 1 2
 
-

Здесь XXXXXXXXXXUUID раздела, а ext4 – используемая файловая система.

+

Здесь XXXXXXXXXX -- UUID раздела, а ext4 -- используемая файловая система.

Следует помнить, что это действие не повлияет на запуск различных скриптов интерпретаторами, т.е. запуск ./foo-bar с установленным битом исполнения будет запрещён, но в то же время bash foo-bar выполнится в штатном режиме.

@@ -207,10 +206,10 @@

Допустимые значения zram-fraction:

    -
  • 0.5 – выделение под пул 50% (выбор по умолчанию) от оперативной памяти;

  • -
  • 0.25 – 25%;

  • -
  • 0.1 – 10%;

  • -
  • 1.0 – 100% соответственно (не рекомендуется).

  • +
  • 0.5 -- выделение под пул 50% (выбор по умолчанию) от оперативной памяти;

  • +
  • 0.25 -- 25%;

  • +
  • 0.1 -- 10%;

  • +
  • 1.0 -- 100% соответственно (не рекомендуется).

В max-zram-size указывается максимально допустимый объём для пула в мегабайтах.

@@ -235,11 +234,11 @@

Можно ли установить несколько версий PHP одновременно?

-

Да, это возможно при использовании репозитория Remi’s RPM.

+

Да, это возможно при использовании репозитория Remi's RPM.

В то же время одновременная установка и использование одной и той же мажорной версии PHP невозможна, т.е. нельзя одновременно установить и использовать версии 7.3.1 и 7.3.2, однако 7.2.9 и 7.3.2 уже можно.

-

Remi’s RPM – это сторонний репозиторий, созданный и поддерживаемый Remi Collect – активным участником сообщества и мейнтейнером всего PHP стека в Fedora.

-

Основная цель данного репозитория – предоставление различных версий стека PHP с возможностью одновременного использования, а также некоторых других программ для пользователей Fedora и Enterprise Linux (RHEL, CentOS, Oracle, Scientific Linux и т.д.).

-

Важно: Remi’s RPM – это сторонний репозиторий, поэтому в случае, если вы используете бета-версии Fedora или Fedora Rawhide, репозиторий может работать некорректно.

+

Remi's RPM -- это сторонний репозиторий, созданный и поддерживаемый Remi Collect -- активным участником сообщества и мейнтейнером всего PHP стека в Fedora.

+

Основная цель данного репозитория -- предоставление различных версий стека PHP с возможностью одновременного использования, а также некоторых других программ для пользователей Fedora и Enterprise Linux (RHEL, CentOS, Oracle, Scientific Linux и т.д.).

+

Важно: Remi's RPM -- это сторонний репозиторий, поэтому в случае, если вы используете бета-версии Fedora или Fedora Rawhide, репозиторий может работать некорректно.

Для подключения выполним сдедующую команду:

sudo dnf install https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm
 
@@ -262,7 +261,7 @@
sudo dnf install php73-php-fpm
 
-

Стоит обратить внимание на то, что все пакеты в репозитории Remi’s RPM, относящиеся к PHP, имеют в своем названии префикс вида php<php_version>, где <php_version> – первые две цифры версии PHP, которую необходимо использовать.

+

Стоит обратить внимание на то, что все пакеты в репозитории Remi's RPM, относящиеся к PHP, имеют в своем названии префикс вида php<php_version>, где <php_version> -- первые две цифры версии PHP, которую необходимо использовать.

Запустим PHP-FPM и включим его автоматический старт при включения системы:

sudo systemctl enable --now php73-php-fpm.servie
 
@@ -286,7 +285,7 @@
Exec=env QT_QPA_PLATFORM=xcb /usr/bin/foo-bar
 
-

Здесь /usr/bin/foo-bar – путь запуска проблемного приложения.

+

Здесь /usr/bin/foo-bar -- путь запуска проблемного приложения.

В Spectacle при вызове через Print Screen отсутствует оформление окна. Как исправить?

@@ -340,7 +339,7 @@

Как активировать драйвер modesetting на видеокартах Intel?

-

Создадим новый файл конфигурации X11 – 10-modesetting.conf:

+

Создадим новый файл конфигурации X11 -- 10-modesetting.conf:

sudo touch /etc/X11/xorg.conf.d/10-modesetting.conf
 sudo chmod 0644 /etc/X11/xorg.conf.d/10-modesetting.conf
 
@@ -378,7 +377,7 @@

Внимание! Отключение журнала может привести к потере всех данных на устройстве при его некорректном извлечении, либо исчезновении питания.

-

Здесь /dev/sdX1 – раздел на устройстве флеш-памяти, который требуется настроить.

+

Здесь /dev/sdX1 -- раздел на устройстве флеш-памяти, который требуется настроить.

Изменения вступят в силу при следующем монтировании.

@@ -388,7 +387,7 @@

В качестве решения предлагается несколько вариантов:

    -
  1. перейти на поддерживаемую конфигурацию загрузки – переместить /boot на раздел с ФС ext4;

  2. +
  3. перейти на поддерживаемую конфигурацию загрузки -- переместить /boot на раздел с ФС ext4;

  4. отключить скрытие меню загрузки GRUB 2.

@@ -403,7 +402,7 @@

Если значение в поле Device allocated значительно превышает Used, то процедура окажется полезной, в противном случае выполнять её не имеет никакого смысла.

-

Здесь mountpoint – точка монтирования раздела.

+

Здесь mountpoint -- точка монтирования раздела.

Как произвести балансировку раздела с BTRFS?

@@ -411,7 +410,7 @@
sudo btrfs fi balance start -dusage=50 -musage=50 [mountpoint]
 
-

Здесь -dusage – максимальный процент заполнения при балансировке данных, -musage – максимальный процент заполнения при балансировке метаданных, а mountpoint – точка монтирования раздела.

+

Здесь -dusage -- максимальный процент заполнения при балансировке данных, -musage -- максимальный процент заполнения при балансировке метаданных, а mountpoint -- точка монтирования раздела.

Чем меньше значение usage, тем быстрее выполнится операция. Если на диске мало свободного места, то начинать следует с небольших значений, например с 5, постепенно увеличивая это число. Также можно балансировать отдельно данные и метаданные.

Подробнее о балансировке можно прочитать в официальной документации (на английском языке):

@@ -532,7 +531,7 @@

Исправляем установленную систему
rm -rf /tmp/shim
 
@@ -544,8 +543,8 @@

Исправляем установленную систему -
  • переход на _FORTIFY_SOURCE=3 – положительно влияет на безопасность системы за счёт улучшенной фортификации кода посредством добавления проверок границ массивов и векторов во время исполнения приложений;

  • -
  • активация -fno-omit-frame-pointer – очень спорное изменение, не дающее никаких значимых преимуществ обычным пользователям, которое просили внедрить крупные корпорации и некоторые разработчики для облегчения отладки и профилирования их кода. Изменение сначала было отклонено, но затем, после повторного голосования, принято.

  • +
  • переход на _FORTIFY_SOURCE=3 -- положительно влияет на безопасность системы за счёт улучшенной фортификации кода посредством добавления проверок границ массивов и векторов во время исполнения приложений;

  • +
  • активация -fno-omit-frame-pointer -- очень спорное изменение, не дающее никаких значимых преимуществ обычным пользователям, которое просили внедрить крупные корпорации и некоторые разработчики для облегчения отладки и профилирования их кода. Изменение сначала было отклонено, но затем, после повторного голосования, принято.

  • Оба в совокупности приводят к падению быстродействия от 3 до 10 процентов в зависимости от типа вычислительной нагрузки. К сожалению, исправить это невозможно, т.к. пришлось бы откатить данные изменения и пересобрать все пакеты в системе.

    @@ -560,17 +559,17 @@

    Исправляем установленную систему @@ -632,12 +631,12 @@

    Related Topics

    - + Fork me on GitHub diff --git a/using-applications.html b/using-applications.html index 0e3b8191..c245f345 100644 --- a/using-applications.html +++ b/using-applications.html @@ -1,23 +1,22 @@ - + - Сторонние приложения — Неофициальный FAQ по Fedora (версия 2024.01.16) + Сторонние приложения — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -194,7 +193,7 @@
    iconv -f cp1251 -t utf8 test.txt > result.txt
     
    -

    Здесь test.txt – исходный файл с неправильной кодировкой, а result.txt используется для записи результата преобразования.

    +

    Здесь test.txt -- исходный файл с неправильной кодировкой, а result.txt используется для записи результата преобразования.

    Как подключить смартфон на Android посредством протокола MTP?

    @@ -267,7 +266,7 @@ URL[$e]=file:$HOME/Templates/xml-document.xml -

    Здесь Icon – значок для новой строки, Name – название новой строки с поддержкой локализации, а URL – полный путь к файлу шаблона.

    +

    Здесь Icon -- значок для новой строки, Name -- название новой строки с поддержкой локализации, а URL -- полный путь к файлу шаблона.

    Изменения вступят в силу немедленно и через несколько секунд в меню Создать файлового менеджера Dolphin появится новый пункт.

    @@ -293,7 +292,7 @@

    Как убрать рамки внутри окон в KDE Plasma 5?

    -

    Для этого следует открыть Меню KDEКомпьютерПараметры системыОформление приложений – страница Стиль интерфейса – кнопка Настроить – вкладка Рамки, убрать все флажки из чекбоксов на данной странице и нажать кнопку OK.

    +

    Для этого следует открыть Меню KDE -- Компьютер -- Параметры системы -- Оформление приложений -- страница Стиль интерфейса -- кнопка Настроить -- вкладка Рамки, убрать все флажки из чекбоксов на данной странице и нажать кнопку OK.

    Как обновить кэш значков приложений в главном меню KDE Plasma 5?

    @@ -348,12 +347,12 @@

    При распаковке Zip архива появляются кракозябры вместо имён файлов. Как исправить?

    -

    Zip-архивы, созданные штатными средствами ОС Windows, сохраняют имена файлов внутри архива исключительно в однобайтовой кодировке системы по умолчанию (в русской версии это Windows-1251 (cp1251), в английской – Windows-1252 (cp1252)), поэтому при распаковке таких архивов вместо русских букв будут отображаться кракозябры.

    +

    Zip-архивы, созданные штатными средствами ОС Windows, сохраняют имена файлов внутри архива исключительно в однобайтовой кодировке системы по умолчанию (в русской версии это Windows-1251 (cp1251), в английской -- Windows-1252 (cp1252)), поэтому при распаковке таких архивов вместо русских букв будут отображаться кракозябры.

    Утилита unzip поддерживает явное указание кодировки, поэтому воспользуемся данной функцией:

    unzip -O cp1251 foo-bar.zip -d /path/to/destination
     
    -

    Здесь cp1251 – кодировка имён файлов, foo-bar.zip – имя архива, а /path/to/destination – каталог, в который он будет распакован.

    +

    Здесь cp1251 -- кодировка имён файлов, foo-bar.zip -- имя архива, а /path/to/destination -- каталог, в который он будет распакован.

    Стоит ли переносить кэши браузеров в tmpfs?

    @@ -403,8 +402,8 @@

    Запустим веб-браузер и экспортируем список закладок в файл, совместимый с форматом Netscape Bookmarks. В Firefox это можно сделать так:

      -
    1. ЗакладкиПоказать все закладки;

    2. -
    3. Импорт и резервные копииЭкспорт закладок в HTML файл;

    4. +
    5. Закладки -- Показать все закладки;

    6. +
    7. Импорт и резервные копии -- Экспорт закладок в HTML файл;

    8. сохраняем файл bookmarks.html в любом каталоге.

    @@ -484,7 +483,7 @@

    Как настроить автоматическое обновление Kerberos-тикетов в Gnome?

    -

    Актуальные версии среды Gnome поддерживают автоматическое обновление Kerberos-тикетов «из коробки».

    +

    Актуальные версии среды Gnome поддерживают автоматическое обновление Kerberos-тикетов "из коробки".

    Откроем настройки Gnome, выберем пункт Онлайн учётные записи, нажмём кнопку с символом + для добавления нового, в конце списка выберем вариант Другие, а затем Enterprise login (Kerberos).

    В появившемся окне введём авторизационные данные и подтвердим добавление аккаунта.

    @@ -494,7 +493,7 @@
    sudo dnf install transmission-daemon
     
    -

    Установим «тонкий клиент» Transsmission Remote:

    +

    Установим "тонкий клиент" Transsmission Remote:

    sudo dnf install transmission-remote-gtk
     
    @@ -506,7 +505,7 @@
    sudo firewall-cmd --add-service=transmission-client --permanent
     
    -

    Запустим «тонкий клиент», подключимся к серверу 127.0.0.1:9091, перейдём в ОпцииНастройки сервера и внесём свои правки, указав например каталог для загрузок.

    +

    Запустим "тонкий клиент", подключимся к серверу 127.0.0.1:9091, перейдём в Опции -- Настройки сервера и внесём свои правки, указав например каталог для загрузок.

    Изменения вступают в силу немедленно. Сервер будет запускаться автоматически при каждой загрузке системы и сразу же осуществлять загрузку, либо раздачу торрентов.

    @@ -524,7 +523,7 @@
    tree /path/to/directory > ~/foo-bar.txt
     
    -

    Здесь /path/to/directory – путь к каталогу, дерево которого нужно построить, а ~/foo-bar.txt – файл, в котором будет сохранён результат.

    +

    Здесь /path/to/directory -- путь к каталогу, дерево которого нужно построить, а ~/foo-bar.txt -- файл, в котором будет сохранён результат.

    Как из терминала удалить файл в корзину?

    @@ -553,9 +552,9 @@

    Зайдём в расширенные настройки сети liberachat, укажем в качестве основного сервера irc.liberachat.net/6697 (остальные лучше вообще удалить), затем установим следующие параметры:

      -
    • флажок соединяться только с выделенным сервером – включено;

    • -
    • флажок использовать SSL для всех серверов в этой сети – включено;

    • -
    • метод авторизации – SASL external (cert).

    • +
    • флажок соединяться только с выделенным сервером -- включено;

    • +
    • флажок использовать SSL для всех серверов в этой сети -- включено;

    • +
    • метод авторизации -- SASL external (cert).

    Получим SHA1 отпечаток созданного сертификата:

    @@ -570,7 +569,7 @@
    /ns cert add XXXXXXXXXX
     
    -

    Здесь PASSWORD – текущий пароль пользователя, а XXXXXXXXXX – отпечаток сертификата.

    +

    Здесь PASSWORD -- текущий пароль пользователя, а XXXXXXXXXX -- отпечаток сертификата.

    Теперь можно отключиться и подключиться заново. Вход будет выполнен уже безопасным способом без использования паролей.

    @@ -614,7 +613,7 @@
    find /media/foo-bar -name *.h2w -delete \;
     
    -

    Здесь /media/foo-bar – точка монтирования накопителя, объём которого требуется проверить.

    +

    Здесь /media/foo-bar -- точка монтирования накопителя, объём которого требуется проверить.

    Как выполнить глубокую проверку объёма накопителя?

    @@ -628,7 +627,7 @@
    sudo f3probe --destructive --time-ops /dev/sdb
     
    -

    Здесь /dev/sdb – устройство, объём которого требуется проверить.

    +

    Здесь /dev/sdb -- устройство, объём которого требуется проверить.

    После завершения процесса потребуется заново создать раздел и файловую систему на проверяемом устройстве при помощи таких утилит, как GParted, Gnome Disks, KDE Disk Manager и т.д.

    @@ -660,7 +659,7 @@
    du -hs /path/to/directory/* 2>/dev/null | sort -rh | head -10
     
    -

    Здесь /path/to/directory – начальный каталог.

    +

    Здесь /path/to/directory -- начальный каталог.

    Как вывести содержимое каталога в графическом виде?

    @@ -755,9 +754,9 @@

    Как сделать Chromium браузером по умолчанию в KDE?

    -

    Для того, чтобы назначить Chromium браузером по умолчанию, выполним Параметры системыПриложенияПриложения по умолчаниюБраузер – установим точку около в следующем приложении, затем в выпадающем списке выберем Chromium и нажмём кнопку Применить.

    +

    Для того, чтобы назначить Chromium браузером по умолчанию, выполним Параметры системы -- Приложения -- Приложения по умолчанию -- Браузер -- установим точку около в следующем приложении, затем в выпадающем списке выберем Chromium и нажмём кнопку Применить.

    Однако, даже если указанное действие сделано верно, Chromium всё равно будет предлагать установить его браузером по умолчанию при каждом запуске, т.к. он проверяет привязку не только к протоколам, но и к конкретным mime-типам для HTML-файлов.

    -

    Чтобы избавиться от данного сообщения, повторно откроем Параметры системыПриложенияПривязки файлов, в строке поиска введём html и переместим Chromium в самый верх списка приоритетов для xhtml+xml и html. Нажмём Применить.

    +

    Чтобы избавиться от данного сообщения, повторно откроем Параметры системы -- Приложения -- Привязки файлов, в строке поиска введём html и переместим Chromium в самый верх списка приоритетов для xhtml+xml и html. Нажмём Применить.

    Что такое earlyoom и почему он установлен по умолчанию?

    @@ -888,17 +887,17 @@
    sudo dnf install texlive-pdfjam
     
    -

    Объединим файлы с именами file1.pdffileN.pdf в result.pdf по схеме 3x1 (три на одной странице):

    +

    Объединим файлы с именами file1.pdf -- fileN.pdf в result.pdf по схеме 3x1 (три на одной странице):

    pdfjam file*.pdf --nup 3x1 --outfile result.pdf
     

    Поддерживаются следующие схемы размещения исходников:

      -
    • 1x1 – один файл на странице (по сути, простое объединение);

    • -
    • 2x1 – два файла;

    • -
    • 3x1 – три файла;

    • -
    • 4x1 – четыре файла.

    • +
    • 1x1 -- один файл на странице (по сути, простое объединение);

    • +
    • 2x1 -- два файла;

    • +
    • 3x1 -- три файла;

    • +
    • 4x1 -- четыре файла.

    Внимание! Если в оригиналах присутствовали цифровые подписи, они не будут перенесены в итоговый PDF.

    @@ -931,9 +930,9 @@

    Как улучшить приватность KDE Plasma 5?

    С настройками по умолчанию KDE activity manager отслеживает, собирает и сохраняет в базе данных SQLite ~/.local/share/kactivitymanagerd/resources/database подробную информацию об использовании системы, включая запуск приложений, открытие документов и каталогов и т.д.

    -

    Для отключения этой функциональности перейдём в Настройки системы (System Settings) – Рабочая среда (Workspace) – Поведение рабочей среды (Workspace Behavior) – Комнаты (Комнаты).

    +

    Для отключения этой функциональности перейдём в Настройки системы (System Settings) -- Рабочая среда (Workspace) -- Поведение рабочей среды (Workspace Behavior) -- Комнаты (Комнаты).

    На вкладке Комнаты (Activities), справа от имени каждой существующей комнаты, выберем вариант Настроить комнату (Configure activity), в появившемся окне установим флажок в чекбокс Не запоминать статистику использования (Do not track usage for this activity) и нажмём кнопку OK.

    -

    На вкладке Конфиденциальность (Privacy), в разделе Запоминать открытые документы (Remember opened documents), установим точку около пункта Не запоминать (Do not remember), после чего нажмём Применить (Apply). Здесь же обязательно очистим все уже собранные данные при помощи Очистить историю (Clear history) – Стереть всё (Forget everything).

    +

    На вкладке Конфиденциальность (Privacy), в разделе Запоминать открытые документы (Remember opened documents), установим точку около пункта Не запоминать (Do not remember), после чего нажмём Применить (Apply). Здесь же обязательно очистим все уже собранные данные при помощи Очистить историю (Clear history) -- Стереть всё (Forget everything).

    Произведём очистку кэша mime-типов файлов и каталогов и при необходимости автоматизируем это действие.

    Изменения вступят в силу при следующем входе в систему.

    @@ -1003,17 +1002,17 @@ - + Fork me on GitHub diff --git a/using-system.html b/using-system.html index 43364b3b..7ba7c966 100644 --- a/using-system.html +++ b/using-system.html @@ -1,23 +1,22 @@ - + - Работа в системе — Неофициальный FAQ по Fedora (версия 2024.01.16) + Работа в системе — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -72,7 +71,7 @@
    sudo xz -9 -T$(nproc) /path/to/image.raw
     
    -

    Здесь /dev/sda1 – раздел диска, резервную копию которого требуется создать, а /path/to/image.raw – полный путь к файлу образа (должен находиться на другом разделе диска).

    +

    Здесь /dev/sda1 -- раздел диска, резервную копию которого требуется создать, а /path/to/image.raw -- полный путь к файлу образа (должен находиться на другом разделе диска).

    Как мне пересобрать образ initrd?

    @@ -99,7 +98,7 @@

    Что такое BLS и почему он используется по умолчанию?

    -

    BLS – это универсальный формат параметров загрузки, который будет поддерживаться большинством современных загрузчиков.

    +

    BLS -- это универсальный формат параметров загрузки, который будет поддерживаться большинством современных загрузчиков.

    Все параметры генерируются на этапе компиляции ядра и сохраняются в специальном conf-файле, который устанавливается в каталог /boot/loader/entries.

    Т.к. это статические файлы, нестандартные параметры ядра теперь устанавливаются при помощи grubenv.

    @@ -140,7 +139,7 @@
    find ~/foo-bar -maxdepth 1 -type f -mtime +2 -delete
     
    -

    Здесь ~/foo-bar – начальный каталог, в котором производится удаление.

    +

    Здесь ~/foo-bar -- начальный каталог, в котором производится удаление.

    Я использую KDE. Как мне настроить скорость двойного клика в GTK приложениях?

    @@ -209,11 +208,11 @@

    Переменная QT_SCALE_FACTOR задаёт коэффициент масштабирования:

      -
    • 1.5 – 150%;

    • -
    • 1.75 – 175%;

    • -
    • 2 – 200%;

    • -
    • 2.5 – 250%;

    • -
    • 3 – 300%.

    • +
    • 1.5 -- 150%;

    • +
    • 1.75 -- 175%;

    • +
    • 2 -- 200%;

    • +
    • 2.5 -- 250%;

    • +
    • 3 -- 300%.

    Более подробную информацию можно найти в документации Qt.

    @@ -248,7 +247,7 @@
    sudo dnf install pam-kwallet
     
    -

    Запустим менеджер KWallet (Параметры системы – группа Предпочтения пользователяУчётная запись – страница Бумажник – кнопка Запустить управление бумажниками), нажмём кнопку Сменить пароль и укажем тот же самый пароль, который используется для текущей учётной записи.

    +

    Запустим менеджер KWallet (Параметры системы -- группа Предпочтения пользователя -- Учётная запись -- страница Бумажник -- кнопка Запустить управление бумажниками), нажмём кнопку Сменить пароль и укажем тот же самый пароль, который используется для текущей учётной записи.

    Сохраняем изменения и повторно входим в систему.

    @@ -356,7 +355,7 @@
    nmcli device wifi connect MY_NETWORK password XXXXXXXXXX
     
    -

    Здесь MY_NETWORK – название SSID точки доступа, к которой мы планируем подключиться, а XXXXXXXXXX – её пароль.

    +

    Здесь MY_NETWORK -- название SSID точки доступа, к которой мы планируем подключиться, а XXXXXXXXXX -- её пароль.

    Как выбрать предпочитаемый текстовый редактор в консольном режиме?

    @@ -366,7 +365,7 @@ export SUDO_EDITOR=vim -

    VISUAL – предпочитаемый текстовый редактор с графическим интерфейсом пользователя, EDITOR – текстовый, а SUDO_EDITOR используется в sudoedit.

    +

    VISUAL -- предпочитаемый текстовый редактор с графическим интерфейсом пользователя, EDITOR -- текстовый, а SUDO_EDITOR используется в sudoedit.

    Как выбрать предпочитаемый текстовый редактор для Git?

    @@ -396,7 +395,7 @@
    sudo dd if=/dev/sr0 of=/path/to/image.iso bs=4M status=progress
     
    -

    Здесь /dev/sr0 имя устройства привода для чтения оптических дисков, а /path/to/image.iso – файл образа, в котором будет сохранён результат.

    +

    Здесь /dev/sr0 имя устройства привода для чтения оптических дисков, а /path/to/image.iso -- файл образа, в котором будет сохранён результат.

    Как смонтировать посекторный образ раздела?

    @@ -408,7 +407,7 @@
    sudo umount /mnt/dd-image
     
    -

    Здесь /path/to/image.iso – файл образа на диске.

    +

    Здесь /path/to/image.iso -- файл образа на диске.

    Как смонтировать посекторный образ диска целиком?

    @@ -427,7 +426,7 @@
    sudo umount /mnt/dd-image
     
    -

    Здесь /path/to/image.iso – файл образа на диске.

    +

    Здесь /path/to/image.iso -- файл образа на диске.

    Как изменить часовой пояс?

    @@ -468,8 +467,8 @@
    sudo dnf install breeze-gtk
     
    -

    Зайдём в Параметры системыВнешний видОформление приложенийСтиль программ GNOME (GTK+).

    -

    Выберем Breeze (при использовании тёмной темы в KDE – Breeze Dark) в качестве темы GTK2 и GTK3, а также укажем шрифт, который будет использовать при отображении диалоговых окон.

    +

    Зайдём в Параметры системы -- Внешний вид -- Оформление приложений -- Стиль программ GNOME (GTK+).

    +

    Выберем Breeze (при использовании тёмной темы в KDE -- Breeze Dark) в качестве темы GTK2 и GTK3, а также укажем шрифт, который будет использовать при отображении диалоговых окон.

    Также установим Breeze для курсоров мыши и темы значков. Применим изменения и перезапустим все GTK приложения.

    @@ -477,24 +476,24 @@

    Существуют следующие комбинации:

      -
    • Ctrl + A – перемещает текстовый курсор на начало строки (аналогична Home);

    • -
    • Ctrl + E – перемещает текстовый курсор в конец строки (аналогична End);

    • -
    • Ctrl + B – перемещает текстовый курсор на один символ влево (аналогична стрелке влево);

    • -
    • Ctrl + F – перемещает текстовый курсор на один символ вправо (аналогична стрелке вправо);

    • -
    • Alt + B – перемещает текстовый курсор на одно слово влево;

    • -
    • Alt + F – перемещает текстовый курсор на одно слово вправо;

    • -
    • Ctrl + W – удаляет последнее слово в строке;

    • -
    • Ctrl + U – удаляет всё из строки ввода;

    • -
    • Ctrl + K – удаляет всё, что находится правее текущей позиции текстового курсора;

    • -
    • Ctrl + Y – отменяет последнюю операцию удаления;

    • -
    • Ctrl + _ – отменяет любую последнюю операцию.

    • +
    • Ctrl + A -- перемещает текстовый курсор на начало строки (аналогична Home);

    • +
    • Ctrl + E -- перемещает текстовый курсор в конец строки (аналогична End);

    • +
    • Ctrl + B -- перемещает текстовый курсор на один символ влево (аналогична стрелке влево);

    • +
    • Ctrl + F -- перемещает текстовый курсор на один символ вправо (аналогична стрелке вправо);

    • +
    • Alt + B -- перемещает текстовый курсор на одно слово влево;

    • +
    • Alt + F -- перемещает текстовый курсор на одно слово вправо;

    • +
    • Ctrl + W -- удаляет последнее слово в строке;

    • +
    • Ctrl + U -- удаляет всё из строки ввода;

    • +
    • Ctrl + K -- удаляет всё, что находится правее текущей позиции текстового курсора;

    • +
    • Ctrl + Y -- отменяет последнюю операцию удаления;

    • +
    • Ctrl + _ -- отменяет любую последнюю операцию.

    Как файловые менеджеры определяют типы файлов?

    @@ -588,7 +587,7 @@

    Все NTFS тома монтируются в режиме только для чтения. Как исправить?

    -

    Некорректное размонтирование разделов – это особенность работы режима гибридного завершения работы (hybrid shutdown) в ОС Microsoft Windows, при котором система не завершает свою работу, а вместо этого всегда переходит в режим глубокого сна.

    +

    Некорректное размонтирование разделов -- это особенность работы режима гибридного завершения работы (hybrid shutdown) в ОС Microsoft Windows, при котором система не завершает свою работу, а вместо этого всегда переходит в режим глубокого сна.

    Данный режим несовместим с другими операционными системами, в т.ч. GNU/Linux, поэтому должен быть отключён в обязательном порядке при использовании dual-boot.

      @@ -600,7 +599,7 @@

      Как изменить ярлык приложения из главного меню?

      Значки приложений главного меню расположены в каталоге /usr/share/applications, однако редактировать их там не следует ибо при следующем обновлении все изменения будут потеряны.

      -

      Вместо этого создадим локальное переопределение – скопируем desktop-файл в ~/.local/share/applications и внесём необходимые правки.

      +

      Вместо этого создадим локальное переопределение -- скопируем desktop-файл в ~/.local/share/applications и внесём необходимые правки.

      Создадим каталог назначения если он отсутствует:

      mkdir -p ~/.local/share/applications
       
      @@ -643,7 +642,7 @@

      GUI:

    В ветке org.gnome.desktop.wm.keybindings установим параметру switch-input-source желаемое значение.

    -

    Обязательно убедимся в наличии квадратных скобок. Конфигурация по-умолчанию – ['<Super>space', 'XF86Keyboard'].

    +

    Обязательно убедимся в наличии квадратных скобок. Конфигурация по-умолчанию -- ['<Super>space', 'XF86Keyboard'].

    @@ -748,7 +747,7 @@

    GUI:
    echo 'add_dracutmodules+=" foo-bar "' | sudo tee /etc/dracut.conf.d/foo-bar.conf
     
    -

    Здесь foo-bar – название модуля ядра, который требуется включить. Пробелы до и после его имени в add_dracutmodules обязательны.

    +

    Здесь foo-bar -- название модуля ядра, который требуется включить. Пробелы до и после его имени в add_dracutmodules обязательны.

    Осуществим пересборку initrd:

    sudo dracut -f
     
    @@ -773,17 +772,17 @@

    GUI:
    -

    Навигация

    +

    Navigation

    @@ -877,12 +876,12 @@

    Related Topics

    - + Fork me on GitHub diff --git a/virtualization.html b/virtualization.html index 80c195c2..651b5de9 100644 --- a/virtualization.html +++ b/virtualization.html @@ -1,23 +1,22 @@ - + - Виртуализация — Неофициальный FAQ по Fedora (версия 2024.01.16) + Виртуализация — Fedora bo'yicha norasmiy FAQ (talqin 2024.01.17) - + - - - + + @@ -159,7 +158,7 @@

    Можно ли перенести каталог с образами виртуальных машин KVM?

    По умолчанию образы создаваемых виртуальных машин создаются в каталоге /var/lib/libvirt/images, что многих не устраивает.

    -

    Переместим образы виртуальных машин на отдельный накопитель, смонтированный как /media/foo-bar. ISO будем размещать в каталоге iso, а дисковые образы виртуальных машин – images.

    +

    Переместим образы виртуальных машин на отдельный накопитель, смонтированный как /media/foo-bar. ISO будем размещать в каталоге iso, а дисковые образы виртуальных машин -- images.

    Создаём собственные политики SELinux для указанных каталогов:

    sudo semanage fcontext -a -t virt_image_t "/media/foo-bar/iso(/.*)?"
     sudo semanage fcontext -a -t virt_image_t "/media/foo-bar/images(/.*)?"
    @@ -179,7 +178,7 @@
     
    virsh dumpxml vmname > vmname.xml
     
    -

    Здесь vmname – название машины KVM, а vmname.xml – имя файла, в котором будут сохранены настройки.

    +

    Здесь vmname -- название машины KVM, а vmname.xml -- имя файла, в котором будут сохранены настройки.

    Импортируем ранее сохранённую конфигурацию:

    virsh define /path/to/vmname.xml
     
    @@ -196,7 +195,7 @@
    vboxmanage export vmname -o vmname.ova --ovf20
     
    -

    Здесь vmname – название виртуальной машины VirtualBox, а vmname.ova – имя файла экспорта.

    +

    Здесь vmname -- название виртуальной машины VirtualBox, а vmname.ova -- имя файла экспорта.

    Переместим полученный файл на новый хост любым удобным способом, затем осуществим его импорт:

    vboxmanage import /path/to/vmname.ova --options importtovdi
     
    @@ -265,7 +264,7 @@

    Как уменьшить размер дискового образа QCOW2?

    -

    Уменьшение размера дискового образа QCOW2 при помощи qemu-img – это достаточно небезопасная операция, которая может привести к его повреждению, поэтому вместо отрицательных значений для resize сначала уменьшим размер дисковых разделов внутри самой гостевой ОС при помощи fdisk, Gparted или любого другого редактора разделов диска так, чтобы справа осталось лишь неразмеченное пространство.

    +

    Уменьшение размера дискового образа QCOW2 при помощи qemu-img -- это достаточно небезопасная операция, которая может привести к его повреждению, поэтому вместо отрицательных значений для resize сначала уменьшим размер дисковых разделов внутри самой гостевой ОС при помощи fdisk, Gparted или любого другого редактора разделов диска так, чтобы справа осталось лишь неразмеченное пространство.

    Далее воспользуемся утилитой qemu-img и сделаем копию образа, которая уже не будет включать неразмеченное дисковое пространство:

    qemu-img convert -f qcow2 -O qcow2 /path/to/image.qcow2 /path/to/new_image.qcow2
     
    @@ -305,7 +304,7 @@ Type=Application
    -

    Здесь вместо Fedora-Rawhide укажем реальное имя виртуальной машины KVM, а qemu:///session – сеанс, в котором она создана (session – пользовательский; system – системный).

    +

    Здесь вместо Fedora-Rawhide укажем реальное имя виртуальной машины KVM, а qemu:///session -- сеанс, в котором она создана (session -- пользовательский; system -- системный).

    @@ -317,17 +316,17 @@ - + Fork me on GitHub