talks: Add talk by Gábor.
This commit is contained in:
parent
b316205c39
commit
28bd2073ae
|
@ -0,0 +1 @@
|
|||
../../fsf-hu-talk-2018/images/GuixSD-horizontal-print.pdf
|
|
@ -0,0 +1 @@
|
|||
../../fsf-hu-talk-2018/images/GuixSD.pdf
|
Binary file not shown.
|
@ -0,0 +1,87 @@
|
|||
[duration]
|
||||
21
|
||||
[notes_position]
|
||||
RIGHT
|
||||
[last_minutes]
|
||||
3
|
||||
[end_user_slide]
|
||||
14
|
||||
[notes]
|
||||
### 1
|
||||
|
||||
### 2
|
||||
Itt az első követelmény lazítható, úgy, hogy ekvivalens bemenetetek esetén ekvivalens kimeneteket várunk el.
|
||||
|
||||
A második követelmény valójában annyi, hogy perzisztens adatszerkezetben tároljuk az eredményeket.
|
||||
|
||||
A gyakorlati megvalósításokban irányított aciklikus gráfot használunk.
|
||||
|
||||
A cél az, hogy ha szükséges, akkor egy tetszőleges verziót újra elő lehessen állítani. Az adatszerkezetben csak konzisztens állapotoknak megfelelő konfigurációt tárolunk.
|
||||
|
||||
Ez egy node esetén nem okoz problémát, de nagyobb deployment esetén ezt így nem lehet csinálni.
|
||||
|
||||
Olyan módszerek is kellenek, amik ellenőzik, hogy az állapot valóban összeegyeztethető a tárolt gráffal.
|
||||
### 3
|
||||
Például frissítés közben megszűnik az áramellátás, vagy egyszerűen valamelyik csomag frissítésekor hiba lép fel. A régi csomag függőségek már eltávolításra kerültek, esetleg maga a régi csomag is, az új csomagot pedig nem sikerült feltelepíteni. Ez azt jelenti, hogy az adott csomag funkcionalitása nem elérhető. A legsúlyosabb esetekben ez akár bootolhatatlan rendszert is eredményezhet.
|
||||
|
||||
Ugyanez az időablak a nix és guix esetében egy symlink atomikus átváltására szűkül. Ha ez nem sikerül, akkor egyszerűen annyi történik, hogy a régi rendszeren maradunk.
|
||||
|
||||
A nix és guix semmi olyan szoftvert nem töröl, ami valaha a rendszeren telepítve volt, erre kifejezetten kérni kell. Ilyen esetben a csomagkezelő azokat a szoftvereket törli, amelyekről bizonyítani tudja, hogy azt más szoftver a rendszeren nem használja. Lehetőség van bizonyos szoftvereket megjelölni, hogy használatban vannak, így lehet kezelni a nem guix-el telepített szoftverek függőségeit, amiről a guix nem tudhat. Jobb módszer, ha lehetséges guix csomagot készíteni, mert így rendszeren belülre hozzuk a függőségeket.
|
||||
|
||||
A nixos és guixsd konfiguráció központosítja a konfigurációkezelést, és a GuixSD esetében lehetővé teszi a konfigurációs függőségek megvilágítását is (Shepherd service extension).
|
||||
|
||||
Fontos alap feltételezés, hogy a központi csomagkezelés csak akkor működik, ha mindent nix-el/guix-el csomagolunk.
|
||||
### 4
|
||||
A bitről bitre reprodukálhatóságnak rengeteg előnye van. Az egyik legfontosabb, hogy helyi újrafordítással az eredményt összehasonlítva meggyőződehetünk róla, hogy a csomagot ugyanúgy állították elő, mint ahogy mi tennénk.
|
||||
|
||||
Ezen felül lehetőséget biztosít a helyettesítőcsomagok hash alapján történő azonosítására.
|
||||
|
||||
Szintén lehetőséget ad arra, hogy a központi tároló tartalomcímezhető legyen. Ebben az esetben kialakítható zero trust architektúra, hiszen bárhonnan letöltve a helyetttesítőcsomagot, biztosak lehetünk benne, hogy tényleg ugyanazt a szoftvert futtatjuk, nem vagyunk ráutalva arra, hogy megbízzunk a helyettesítőket biztosító szerverben.
|
||||
### 5
|
||||
Ez egy nix kifejezés. Ez a nix csomagdefiníciós nyelve.
|
||||
|
||||
Alapvetően egy haskell típusú nyelv, némi bash szkripttel vegyítve.
|
||||
|
||||
Ez egy külső DSL, saját ad-hoc szintaxisa van, és külön értelmező kell hozzá.
|
||||
|
||||
Ezeket a kifejezéseket host side kódnak hívják.
|
||||
|
||||
A build side kód c++.
|
||||
|
||||
Külön repositoryban kezelik a host és build side kódokat.
|
||||
### 6
|
||||
Ez egy guix csomagdefiníció.
|
||||
|
||||
A nyelv egy belső DSL, a hostnyelv a guile scheme.
|
||||
|
||||
A nyelvet g-exp-nek nevezik. A scheme a define-syntax konstrukciójával különösen alkalmas belső DSL-ek definiálására, amik teljes mértékben olyan érzést eredményeznek a programozás során, mintha eleve a nyelv részét képeznék.
|
||||
|
||||
A host side és build side kód ugyanabban a repoban van, és guile scheme nyelven íródott.
|
||||
|
||||
Az egyetlen olyan rész ami még mindig C++ az a daemon. Jelenleg folyamatban van az újraimplementálása schemeben.
|
||||
### 7
|
||||
A GuixSD egy teljes mértékben GNU FSDG-vel kompatibilis disztribúció.
|
||||
|
||||
Ez a hivatalos GNU disztribúció.
|
||||
|
||||
A GNU Guix a GNU hivatalos csomagkezelője.
|
||||
|
||||
A GNU Guile scheme a GNU hivatalos kiterjesztési nyelve.
|
||||
### 8
|
||||
Ezen kívül lehetőség van minden felhasználó számára tetszőleges profilokat definiálni, és bármelyik profil bármelyik generációjára váltani.
|
||||
|
||||
Szintén lehetőség van profil manifesteket készíteni, ami lehetővé teszi például a csomagok verzióinak kötését.
|
||||
|
||||
Lehetőség van egyszerű parancssori argumentumokkal a szoftver patchelt vezióinak fordítása a tesztelési fázisban.
|
||||
|
||||
A csomagkezelő nyelv lehetővé teszi a csomag örököltetését egy másik csomagból, ami azt jelenti, hogy kisebb variánsok, például egy patchelt verzió, vagy egy olyan, amin nem futtatjuk le a teszteket, esetleg más konfigurációs flagekkel, vagy bemenetekkel fordítunk csak néhány sor.
|
||||
### 9
|
||||
Itt fontos megjegyezni, hogy milyen mértékben lehet azt funkcionálissá tenni. A GuixSD itt egy elég extrém irányt vett, a funkcionális működéshez szükséges dologkat a lehető legkorábban, már az initrd-ben betölti.
|
||||
|
||||
Tulajdonképpen így a bootloader és a kernel parancssor kerül ki a funkcionális konfiguráció keretei közül.
|
||||
|
||||
Ezen kívül jelenleg a rendszertelepítés nem funkcionális, elsősorban nincs funkcionális particionáló nyelv.
|
||||
|
||||
Tehát itt fordulhatnak még elő inkonzisztenciák.
|
||||
|
||||
Jelenleg igyekszünk, hogy lehetőséget biztosítsunk a rendszertelepítés funkcionálissá tételére, illetve a bootloader konfiguráció és a kernel command-line monitorozására.
|
|
@ -0,0 +1,393 @@
|
|||
\documentclass{beamer}
|
||||
|
||||
\usetheme{default}
|
||||
|
||||
\usefonttheme{structurebold}
|
||||
\usepackage{helvet}
|
||||
\usecolortheme{seagull} % white on black
|
||||
|
||||
\usepackage[utf8]{inputenc}
|
||||
\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref,xspace,multicol}
|
||||
\usepackage[absolute,overlay]{textpos}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
|
||||
\usepackage{fancyvrb} % for \Verb
|
||||
|
||||
\usepackage{pgfpages}
|
||||
|
||||
\setbeameroption{show notes on second screen=right}
|
||||
|
||||
% Remember the position of every picture.
|
||||
\tikzstyle{every picture}+=[remember picture]
|
||||
|
||||
\tikzset{onslide/.code args={<#1>#2}{%
|
||||
\only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
|
||||
}}
|
||||
|
||||
% Colors.
|
||||
\definecolor{guixred1}{RGB}{226,0,38} % red P
|
||||
\definecolor{guixorange1}{RGB}{243,154,38} % guixorange P
|
||||
\definecolor{guixyellow}{RGB}{254,205,27} % guixyellow P
|
||||
\definecolor{guixred2}{RGB}{230,68,57} % red S
|
||||
\definecolor{guixred3}{RGB}{115,34,27} % dark red
|
||||
\definecolor{guixorange2}{RGB}{236,117,40} % guixorange S
|
||||
\definecolor{guixtaupe}{RGB}{134,113,127} % guixtaupe S
|
||||
\definecolor{guixgrey}{RGB}{91,94,111} % guixgrey S
|
||||
\definecolor{guixdarkgrey}{RGB}{46,47,55} % guixdarkgrey S
|
||||
\definecolor{guixblue1}{RGB}{38,109,131} % guixblue S
|
||||
\definecolor{guixblue2}{RGB}{10,50,80} % guixblue S
|
||||
\definecolor{guixgreen1}{RGB}{133,146,66} % guixgreen S
|
||||
\definecolor{guixgreen2}{RGB}{157,193,7} % guixgreen S
|
||||
|
||||
\setbeamerfont{title}{size=\huge}
|
||||
\setbeamerfont{frametitle}{size=\huge}
|
||||
\setbeamerfont{normal text}{size=\Large}
|
||||
|
||||
% White-on-black color theme.
|
||||
\setbeamercolor{structure}{fg=guixorange1,bg=black}
|
||||
\setbeamercolor{title}{fg=white,bg=black}
|
||||
\setbeamercolor{date}{fg=guixorange1,bg=black}
|
||||
\setbeamercolor{frametitle}{fg=white,bg=black}
|
||||
\setbeamercolor{titlelike}{fg=white,bg=black}
|
||||
\setbeamercolor{normal text}{fg=white,bg=black}
|
||||
\setbeamercolor{alerted text}{fg=guixyellow,bg=black}
|
||||
\setbeamercolor{section in toc}{fg=white,bg=black}
|
||||
\setbeamercolor{section in toc shaded}{fg=white,bg=black}
|
||||
\setbeamercolor{subsection in toc}{fg=guixorange1,bg=black}
|
||||
\setbeamercolor{subsection in toc shaded}{fg=white,bg=black}
|
||||
\setbeamercolor{subsubsection in toc}{fg=guixorange1,bg=black}
|
||||
\setbeamercolor{subsubsection in toc shaded}{fg=white,bg=black}
|
||||
\setbeamercolor{frametitle in toc}{fg=white,bg=black}
|
||||
\setbeamercolor{local structure}{fg=guixorange1,bg=black}
|
||||
|
||||
\newcommand{\highlight}[1]{\alert{\textbf{#1}}}
|
||||
|
||||
\title{Funkcionális csomagkezelés}
|
||||
\subtitle{Szabad Szoftver Konferencia 2018}
|
||||
\author{Boskovits Gábor}
|
||||
\date{\small{2018. május 12., Budapest, Magyarország}}
|
||||
|
||||
\setbeamertemplate{navigation symbols}{} % remove the navigation bar
|
||||
|
||||
\AtBeginSection[]{
|
||||
\begin{frame}
|
||||
\frametitle{}
|
||||
\tableofcontents[currentsection]
|
||||
\end{frame}
|
||||
}
|
||||
|
||||
|
||||
\newcommand{\screenshot}[1]{
|
||||
\begin{frame}[plain]
|
||||
\begin{tikzpicture}[remember picture, overlay]
|
||||
\node [at=(current page.center), inner sep=0pt]
|
||||
{\includegraphics[width=\paperwidth]{#1}};
|
||||
\end{tikzpicture}
|
||||
\end{frame}
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\setbeamercolor{normal text}{fg=white,bg=black}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Mi a funkcionális csomagkezelés?}
|
||||
|
||||
Egy sikeres csomagkezelési művelet eredménye csak a művelet bemeneteitől függ,
|
||||
az állapottól független.
|
||||
|
||||
\begin{itemize}
|
||||
\item A fordítási folyamat: tiszta függvény.
|
||||
\item A lefordított szoftver: perzisztens gráf.
|
||||
\end{itemize}
|
||||
|
||||
Az elméleti hátteret lásd:
|
||||
|
||||
Eelco Dolstra. The Purely Functional Software Deployment Model.
|
||||
PhD thesis, Faculty of Science, Utrecht, The Netherlands.
|
||||
January 2006. ISBN 90-393-4130-3.
|
||||
|
||||
% \note{20 perc}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Mi a probléma a jelenlegi modellel?}
|
||||
\scriptsize{
|
||||
\begin{enumerate}
|
||||
\item A frissítések és konfiguráció változtatások nehezek, gyakran nem tudunk
|
||||
visszatérni az előző jó konfigurációhoz, előfordulhat, hogy egy sikertelen
|
||||
csomagkezelési műveletet követően a rendszer inkonzisztens állapotba kerül
|
||||
\item Több csomagkezelési és konfigurálási művelet után követhetetlenné válik
|
||||
a rendszer pillanatnyi állapota, lehetséges, hogy két rendszer, amelyeknek
|
||||
ugyan abban az állapotban kellene lennie mégis különböző állapotba kerül
|
||||
\item A konfiguráció szét van tördelve, gyakran még az sem világos, hogy egy
|
||||
adott szoftver működését melyik konfigurációs beállítások befolyásolják,
|
||||
nincs központi konfiguráció kezelés
|
||||
\item A csomagok elérhetőségi és telepítési információi szét vannak tördelve,
|
||||
nagyrészt a nyelvspecifikus csomagkezelőknek köszönhetően, nem áttekinthető,
|
||||
hogy egyáltalán milyen csomagok vannak egy adott rendszeren telepítve, nincs
|
||||
központi csomagkezelés
|
||||
\item Ezeknek a töredezett csomag és konfigurációs adatoknak köszönhetően
|
||||
nincs megfelelő függőségi információnk a rendszerről
|
||||
\end{enumerate}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{A funkcionális csomagkezelők alapvető működése}
|
||||
|
||||
Jelenleg két funkcionális csomagkezelőt ismerünk, ezek a
|
||||
Nix és a Guix.
|
||||
|
||||
A működés alapelve a következő: a programokat egy központi helyre telepítik,
|
||||
minden programnak külön izolált telepítési fája van. Ezek a megfelelő
|
||||
helyekre, például a felhasználók profiljaiba szimbolikus linkekkel kerülnek
|
||||
becsatolásra. A központi tárolóhoz csak egy rendszergazdai jogosultságokkal
|
||||
rendelkező szolgáltatás férhet hozzá. A szoftver fordítás izolált
|
||||
környezetben történik, és csak a csomagleírásban kifejezetten bemenetként
|
||||
említett csomagok állnak rendelkezésre a fordítási környezetben. A cél, hogy
|
||||
az eredmény bitről bitre reprodukálható legyen.
|
||||
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Csomagdefiníció példa - Nix}
|
||||
\tiny{
|
||||
\begin{verbatim}
|
||||
{ stdenv, fetchurl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "hello-2.10";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnu/hello/${name}.tar.gz";
|
||||
sha256 = "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = http://www.gnu.org/software/hello/manual/;
|
||||
license = stdenv.lib.licenses.gpl3Plus;
|
||||
maintainers = [ stdenv.lib.maintainers.eelco ];
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
};
|
||||
}
|
||||
\end{verbatim}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Csomagdefiníció példa - Guix}
|
||||
\tiny {
|
||||
\begin{verbatim}
|
||||
(define-module (gnu packages hello)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix licenses)
|
||||
#:use-module (gnu packages gawk))
|
||||
|
||||
(define-public hello
|
||||
(package
|
||||
(name "hello")
|
||||
(version "2.10")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "mirror://gnu/hello/hello-" version
|
||||
".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments '(#:configure-flags '("--enable-silent-rules")))
|
||||
(inputs `(("gawk" ,gawk)))
|
||||
(synopsis "Hello, GNU world: An example GNU package")
|
||||
(description "Guess what GNU Hello prints!")
|
||||
(home-page "http://www.gnu.org/software/hello/")
|
||||
(license gpl3+)))
|
||||
|
||||
\end{verbatim}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Különbségek a Guix és a Nix között}
|
||||
|
||||
Két fontos különbséget kell megemlítenünk:
|
||||
\begin{enumerate}
|
||||
\item Míg a Nix egy külső DSL mellett tette le a voksát, addig a Guix egy
|
||||
belső DSL-t válaszott. Ez lehetővé teszi a Guix esetében a fogadó
|
||||
programnyelv lehetőségeinek teljes körű kihasználását.
|
||||
\item A másik különbség filozófiai jellegű, a Guix nem támogatja a nem
|
||||
szabad szoftvereket, a hivatalos csomagadatbázisokban csak szabad szoftver
|
||||
található. Ez nem jelenti azt, hogy ilyen szoftver nem használható vagy
|
||||
csomagolható Guix-el, de ezek a csomagok nem kerülhetnek be a hivatalos
|
||||
repoba.
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{A Guix parancssor rövid bemutatása}
|
||||
\begin{itemize}
|
||||
\item guix package -r lua -u guile emacs -i guile-cairo@1.9.91 : egy
|
||||
tranzakcióban törölje a lua, frissítse a guile,emacs és telepítse a
|
||||
guile-cairo csomag 1.9.91-es verzióját. Ha ebből bármi nem sikerül, a
|
||||
rendszer az eredeti állapotában marad.
|
||||
\item guix package --roll-back : A legutóbbi csomagkezelési tranzakció
|
||||
visszavonása
|
||||
\item guix package -s emacs : Keressen információt az adott csomagokról
|
||||
\item guix pull : A Guix frissítése
|
||||
\item guix environment guix --ad-hoc git strace : Hozzon létre egy fejlesztői
|
||||
környezetet a guix csomaghoz, amiben a git és az strace is rendelkezésre áll
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Funkcionális rendszerkonfiguráció}
|
||||
|
||||
A funkcionális csomagkezelés természetesnek tűnő kiterjesztése a funkcionális
|
||||
rendszerkonfiguráció. Erre mindkét csomagkezelőnek van megoldása, a NixOS és
|
||||
a GuixSD disztribúciók. Ezek a Nix illetve Guix csomagkezelőt használják, és
|
||||
kiegészítik egy rendszerkonfigurációs nyelvvel, illetve ehhez tartozó
|
||||
felhasználói felületek, ami a Guix esetében a guix system parancs.
|
||||
|
||||
Előnyei:
|
||||
\begin{itemize}
|
||||
\item konfigurálható és kiterjeszthető rendszerszolgáltatások
|
||||
\item tranzakcionális frissítés/visszaállítás
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Rendszerkonfiguráció - GuixSD}
|
||||
\scriptsize {
|
||||
\begin{verbatim}
|
||||
(operating-system
|
||||
(host-name "schememachine")
|
||||
(timezone "Japan")
|
||||
(locale "ja_JP.utf8")
|
||||
(bootloader (grub-configuration (device "/dev/sda")))
|
||||
(file-systems (cons (file-system
|
||||
(device "my-root")
|
||||
(title 'label)
|
||||
(mount-point "/")
|
||||
(type "ext4"))
|
||||
%base-file-systems))
|
||||
(users (cons (user-account
|
||||
(name "alice")
|
||||
(group "users")
|
||||
(home-directory "/home/alice"))
|
||||
%base-user-accounts))
|
||||
(services (cons* (dhcp-client-service)
|
||||
(lsh-service #:port-number 2222)
|
||||
%base-services)))
|
||||
\end{verbatim}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{A guix system bemutatása}
|
||||
|
||||
\begin{itemize}
|
||||
\item guix system reconfigure file: a rendszer újrakonfigurálása a fájlban
|
||||
szereplő konfiguráció alapján
|
||||
\item guix system roll-back: a rendszer visszaállítása az előző konfigurációra
|
||||
\item guix system vm file: rendszer indítása az adott konfigurációval
|
||||
virtuális gépben
|
||||
\item guix system container file: rendszer indítása az adott konfigurációval
|
||||
konténerben
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{NixOps, Upcast}
|
||||
A következő lépés a teljes többgépes telepítések funkcionálissá tétele. Itt még
|
||||
jelenleg elég sok a kihívás. A Nix csomagkezelőnek két megoldása van rá, a
|
||||
hivatalos NixOps, és az Upcast. A NixOps egy sqlite adatbázisban tárolja a
|
||||
telepítés állapotát, míg az Upcast erre egy szöveges fáljt használ, ami olyan
|
||||
szempontból jobb, hogy verziókövetés alá lehet vonni. A Guix közösség még
|
||||
keresi a megoldásokat a felmerülő problémákra, így a Guix-nek erre még nincs
|
||||
kész megoldása.
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Guix továbbfejlesztési tervek}
|
||||
\begin{itemize}
|
||||
\item szoftvercsatornák - tervezés alatt
|
||||
\item több gépes telepítések - tervezés alatt
|
||||
\item teljes forráskód alapú bootstrap útvonal - fejlesztés alatt
|
||||
\item grafikus telepítő - fejlesztés alatt
|
||||
\item build farm webfelület - fejlesztés alatt (GSoC)
|
||||
\item systemd kompatibilitás - feljlesztés alatt (GSoC)
|
||||
\item a daemon úrjaimplementálás scheme-ben - fejlesztés alatt (GSoC)
|
||||
\item barátságosabb kimenet - fejlesztés alatt (Outreachy)
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{A Guix és GuixSD közösség szívesen veszi a segítéget}
|
||||
\vspace{0.7cm}
|
||||
\large{
|
||||
\begin{itemize}
|
||||
\item minél többen telepítik és használják a Guix-et, annál jobb
|
||||
felhasználói élményt tud nyújtani
|
||||
\item a fejlesztők számára a hibajelentések és kérdések nagyon sokat
|
||||
jelentenek, így tudják a Guix-et még jobbá tenni
|
||||
\item a közösség számára fontos, hogy a felhasználóik és az újonnan
|
||||
csatlakozó fejlesztők megosszák az ötleteiket, hiszen így lehet
|
||||
a Guix-et új, hasznos funkciókkal bővíteni
|
||||
\end{itemize}
|
||||
}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
|
||||
\vfill{
|
||||
\vspace{2.5cm}
|
||||
\center{\includegraphics[width=0.3\textwidth]{images/GuixSD}}\\[1.0cm]
|
||||
\texttt{boskovits@gmail.com}\hfill{\alert{\url{https://gnu.org/software/guix/}}}
|
||||
}
|
||||
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
|
||||
\begin{textblock}{12}(2, 8)
|
||||
\tiny{
|
||||
Copyright \copyright{} 2010, 2012--2016 Ludovic Courtès \texttt{ludo@gnu.org}.\\[3.0mm]
|
||||
Copyright \copyright{} 2018 Gábor Boskovits \texttt{boskovits@gmail.com}.\\[3.0mm]
|
||||
GNU GuixSD logo, CC-BY-SA 4.0, \url{https://gnu.org/s/guix/graphics}
|
||||
|
||||
Copyright of other images included in this document is held by
|
||||
their respective owners.
|
||||
\\[3.0mm]
|
||||
This work is licensed under the \alert{Creative Commons
|
||||
Attribution-Share Alike 3.0} License. To view a copy of this
|
||||
license, visit
|
||||
\url{http://creativecommons.org/licenses/by-sa/3.0/} or send a
|
||||
letter to Creative Commons, 171 Second Street, Suite 300, San
|
||||
Francisco, California, 94105, USA.
|
||||
\\[2.0mm]
|
||||
At your option, you may instead copy, distribute and/or modify
|
||||
this document under the terms of the \alert{GNU Free Documentation
|
||||
License, Version 1.3 or any later version} published by the Free
|
||||
Software Foundation; with no Invariant Sections, no Front-Cover
|
||||
Texts, and no Back-Cover Texts. A copy of the license is
|
||||
available at \url{http://www.gnu.org/licenses/gfdl.html}.
|
||||
\\[2.0mm]
|
||||
% Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
|
||||
The source of this document is available from
|
||||
\url{http://git.sv.gnu.org/cgit/guix/maintenance.git}.
|
||||
}
|
||||
\end{textblock}
|
||||
\end{frame}
|
||||
|
||||
\end{document}
|
Loading…
Reference in New Issue