-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcrear-un-instalable-en-pocos-minutos-con-nsis.html
397 lines (320 loc) · 24.7 KB
/
crear-un-instalable-en-pocos-minutos-con-nsis.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
<html lang="es">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> Crear un instalable en pocos minutos con NSIS
| frommelmak</title>
<meta name="author" content="Marcos Martinez">
<meta name="generator" content="Pelican v4.2.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css" integrity="sha512-oc9+XSs1H243/FRN9Rw62Fn8EtxjEYWHXRvjS43YtueEewbS6ObfXcJNyohjHqVKFPoXXUxwc+q1K7Dee6vv9g==" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" integrity="sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA==" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css" integrity="sha512-+EoPw+Fiwh6eSeRK7zwIKG2MA8i3rV/DGa3tdttQGgWyatG/SkncT53KHQaS5Jh9MNOT3dmFL0FjTY08And/Cw==" crossorigin="anonymous">
<link rel="stylesheet" href="https://frommelmak.com/theme/css/main.min.css?3fd22780">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.3/js/bootstrap.bundle.min.js" integrity="sha512-iceXjjbmB2rwoX93Ka6HAHP+B76IY1z0o3h+N1PeDtRSsyeetU3/0QKJqGyPJcX63zysNehggFwMC/bi7dvMig==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/jquery.magnific-popup.min.js" integrity="sha512-IsNh5E3eYy3tr/JiX2Yx4vsCujtkhwl7SLqgnwLNgf04Hrt9BT9SXlLlZlWx+OK4ndzAoALhsMNcCmkggjZB1w==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fitvids/1.2.0/jquery.fitvids.min.js" integrity="sha512-/2sZKAsHDmHNoevKR/xsUKe+Bpf692q4tHNQs9VWWz0ujJ9JBM67iFYbIEdfDV9I2BaodgT5MIg/FTUmUv3oyQ==" crossorigin="anonymous"></script>
<script src="https://frommelmak.com/theme/js/main.min.js?86e1c044"></script>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#ffc40d">
<meta name="theme-color" content="#ffffff">
<!-- Feeds -->
<meta name="keywords" content="nsis, installer, win32">
</head>
<body class="bg-transparent pt-4">
<div class="container">
<a href="https://frommelmak.com" class="avatar-container float-left mx-4">
<div class="avatar animate ">
<div class="side"><img src="images/avatar.png" class="img-fluid"></div>
<div class="side back text-center pt-2 px-1 small">
Alien Life Form
</div>
</div>
</a>
<h1>
<a href="https://frommelmak.com" class="text-dark text-decoration-none">frommelmak</a>
<small class="text-secondary"><small>Yet another Melmacian interested in technology...</small></small>
</h1>
<nav class="navbar d-block navbar-expand-lg navbar-light bg-light shadow rounded-lg">
<a class="navbar-brand d-none" href="https://frommelmak.com" title="Yet another Melmacian interested in technology...">frommelmak</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#plumage-navbar-collapse-1" aria-controls="plumage-navbar-collapse-1" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="plumage-navbar-collapse-1">
<ul class="navbar-nav mr-auto mt-2 mt-lg-0">
<li class="nav-item ">
<a class="nav-link" href="/">
Home
</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="https://frommelmak.com/pages/about.html">
About
</a>
</li>
</ul>
</div>
</nav>
</div>
<div class="container mt-5">
<div class="row">
<div class="
col-md-9
">
<h1>
<a href="https://frommelmak.com/crear-un-instalable-en-pocos-minutos-con-nsis.html" rel="bookmark" title="Permalink to Crear un instalable en pocos minutos con NSIS">Crear un instalable en pocos minutos con <span class="caps">NSIS</span></a>
</h1>
</div>
</div>
<div class="row">
<div id="content" role="main" class="
col-md-9
">
<p><a href="http://nsis.sourceforge.net/"><span class="caps">NSIS</span></a> (<em>Nullsoft Scriptable Install System</em>) permite empaquetar aplicaciones en un fichero <code>.exe</code> autoinstalable. Aplicaciones como <a href="http://www.openvpn.se/download.html">OpenVPN</a> (para Windows) o <a href="http://www.videolan.org/"><span class="caps">VLC</span></a> lo utilizan para distribuir sus versiones para plataformas Win32.</p>
<p>Pese a que la aplicación esta ampliamente <a href="http://nsis.sourceforge.net/Docs/">documentada</a>, he querido escribir este mini-articulo, en el que mediante un ejemplo explico los pasos a seguir para distribuir una aplicación. La idea es que dicho ejemplo sirva de base para no tener que perder mucho tiempo leyendo documentación y realizando mil y una pruebas antes de poder generar un instalable. Podeis utilizar el ejemplo como punto de partida para luego añadir lo que se os ocurra. Para ello os recomiendo dar un vistazo al <a href="http://nsis.sourceforge.net/Developer_Center">rincón de desarrolladores</a> de la wiki del proyecto <span class="caps">NSIS</span>.</p>
<p>Para crear un instalable <code>.exe</code> con <span class="caps">NSIS</span> lo único que necesitamos es instalar la aplicación <span class="caps">NSIS</span> y crear un fichero de texto con extensión <code>.nsi</code>. Este fichero define -mediante un lenguaje de script propio- cómo ha de ser el instalable: apariencia, ficheros a instalar, directorio de instalación , selección de idioma, comprobaciones a realizar, modificar o leer el registro de Windows, descargar e instalar dependencias, acciones a realizar para la desinstalación. En definitiva, casi cualquier cosa que se nos pueda pasar por la cabeza.</p>
<p>Una vez tengamos nuestro fichero <code>.nsi</code>, crear el instalable es tan fácil como seleccionar nuestro fichero y desplegar el menu contextual. Tras seleccionarar la opción Compile <span class="caps">NSIS</span> Scirpt, aparecerá una consola con información acerca del progreso de generación del ejecutable, o en caso de error informacin relativa al fallo.</p>
<p>Pese a que <span class="caps">NSIS</span> permite personalizar el aspecto del instalador incrustando una imagen mediante las instrucciones <code>AddBrandingImage</code> y <code>SetBrandingImage</code>, es posible extender estas capacidades utilizando <a href="http://nsis.sourceforge.net/Docs/Modern%20UI%202/Readme.html"><span class="caps">NSIS</span> Modern User Interface</a> o <a href="http://ultramodernui.sourceforge.net/">Ultra Modern User Inteface</a>.</p>
<p>El ejemplo que sigue a continuación utiliza Modern <span class="caps">UI</span> para crear un instalador resultón en un momento. Pare ser honestos, he de reconocer que pese a la fántastica documentación de <span class="caps">NSIS</span>, he perdio un buen rato intentando mejoar el look and feel del instalable mediante Modern <span class="caps">UI</span> debido a un problema que no he encontrado descrito en ningun sitio. El problema es que las imagenes de la cabecera no se muestran si no se incluye la instrucción <code>!insertmacro MUI_LANGUAGE lang</code>, que a priori no tiene nada que ver.</p>
<p>El ejemplo esta cargado de comentarios por lo que será fácil adaptarlo a vuestras necesidades. Para entenderlo simplemente hay que saber que el fichero <code>.nsi</code> esta ubicado en el mismo directorio que contiene los ficheros que conforman la aplicación que queremos instalar, así como las imagenes que utilizaremos para el wizard de instalación.</p>
<div class="highlight pygments-style-monokai rounded shadow-sm mb-3"><pre><span></span><code><span class="go"> --FooApp</span>
<span class="go"> | `--lib</span>
<span class="go"> | |--file1.dll</span>
<span class="go"> | `--fileN.dll</span>
<span class="go"> |-- header.bmp</span>
<span class="go"> |-- image1.bmp</span>
<span class="go"> |-- foo_app.ico</span>
<span class="go"> |-- start_foo.exe </span>
<span class="go"> |-- foo_app.nsi</span>
<span class="go"> `-- README.txt</span>
</code></pre></div>
<p>El fichero <code>foo_app.nsi</code> encargado de crear el instalable para esta aplicacin podria ser este:</p>
<div class="highlight pygments-style-monokai rounded shadow-sm mb-3"><pre><span></span><code><span class="c">;----------------------------------------------------------------------------</span>
<span class="c">; General configuration</span>
<span class="c">; The name and version of the installer</span>
<span class="cp">!define</span> VERSION 1.0
<span class="k">Name</span> Foo App <span class="kp">${VERSION}</span>
<span class="k">OutFile</span> Foo App Installer <span class="o">-</span> <span class="kp">${VERSION}</span>.exe
<span class="k">InstallDir</span> <span class="nv">$PROGRAMFILES</span><span class="p">\</span>Foo App
<span class="c">;;; Request application privileges for Windows Vista (can be user or admin)</span>
<span class="k">RequestExecutionLevel</span> <span class="no">admin</span>
<span class="c">;----------------------------------------------------------------------------</span>
<span class="c">;--------------------------------</span>
<span class="c">;Use Modern User Interface</span>
<span class="cp">!include</span> MUI2.nsh
<span class="c">;--------------------------------</span>
<span class="c">;--------------------------------</span>
<span class="c">; Interface Settings</span>
<span class="k">BrandingText</span> Foo App Installer (Powered by NSIS)
<span class="cp">!define</span> MUI_HEADERIMAGE
<span class="cp">!define</span> MUI_HEADERIMAGE_BITMAP header.bmp <span class="c">; size 150x57</span>
<span class="cp">!define</span> MUI_HEADERIMAGE_UNBITMAP header.bmp <span class="c">; size 150x57</span>
<span class="cp">!define</span> MUI_PAGE_HEADER_TEXT Installing Foo App
<span class="cp">!define</span> MUI_PAGE_HEADER_SUBTEXT Copying files...
<span class="cp">!define</span> MUI_ABORTWARNING
<span class="cp">!define</span> MUI_ICON foo_app.ico
<span class="cp">!define</span> MUI_UNICON foo_app.ico
<span class="c">; Pages</span>
<span class="cp">!define</span> MUI_WELCOMEFINISHPAGE_BITMAP image1.bmp <span class="c">; size 164x314</span>
<span class="cp">!define</span> MUI_WELCOMEPAGE_TITLE_3LINES
<span class="cp">!define</span> MUI_WELCOMEPAGE_TITLE Welcome to the Foo App <span class="kp">${VERSION}</span> $<span class="p">\</span>n Setup Wizard
<span class="cp">!define</span> MUI_WELCOMEPAGE_TEXT This wizard will guide you through the installation of <span class="p">\</span>
Foo App <span class="kp">${VERSION}</span> $<span class="p">\</span>n$<span class="p">\</span>nClick Install to continue
<span class="cp">!define</span> MUI_INSTFILESPAGE_FINISHHEADER_TEXT Foo App Setup Complete
<span class="cp">!define</span> MUI_INSTFILESPAGE_COLORS f1f1f1 000000
<span class="cp">!define</span> MUI_FINISHPAGE_NOAUTOCLOSE
<span class="cp">!define</span> MUI_FINISHPAGE_TITLE Setup Complete
<span class="cp">!define</span> MUI_FINISHPAGE_TEXT Thank you for using Foo App
<span class="cp">!define</span> MUI_FINISHPAGE_RUN foo.exe
<span class="cp">!define</span> MUI_FINISHPAGE_RUN_TEXT Start Foo App
<span class="cp">!define</span> MUI_UNCONFIRMPAGE_TEXT_TOP Remove Foo App from this computer
<span class="cp">!define</span> MUI_UNCONFIRMPAGE_TEXT_LOCATION Installation <span class="nl">Directory</span><span class="p">:</span>
<span class="cp">!insertmacro</span> MUI_PAGE_WELCOME
<span class="cp">!insertmacro</span> MUI_PAGE_INSTFILES
<span class="cp">!insertmacro</span> MUI_PAGE_FINISH
<span class="cp">!insertmacro</span> MUI_UNPAGE_CONFIRM
<span class="cp">!insertmacro</span> MUI_UNPAGE_INSTFILES
<span class="k">ShowInstDetails</span> <span class="no">show</span>
<span class="k">ShowUninstDetails</span> <span class="no">show</span>
<span class="c">;---------------------------------------------</span>
<span class="c">;---------------------------------------------</span>
<span class="c">; I don't know why but required to show images</span>
<span class="cp">!insertmacro</span> MUI_LANGUAGE English
<span class="c">;---------------------------------------------</span>
<span class="c">;--------------------------------</span>
<span class="c">; The stuff to install</span>
<span class="k">Section</span> Install
<span class="c">;;; Foo App will be installed for all users</span>
<span class="k">SetShellVarContext</span> <span class="no">all</span>
<span class="c">;;; Set output path to the installation directory.</span>
<span class="k">SetOutPath</span> <span class="vg">$INSTDIR</span>
<span class="c">;;; Put *.exe file there</span>
<span class="k">File</span> start_foo.exe
<span class="k">File</span> README.txt
<span class="k">File</span> foo_app.ico
<span class="k">File</span> image1.bmp
<span class="k">File</span> header.bmp
<span class="k">SetOutPath</span> <span class="vg">$INSTDIR</span><span class="p">\</span>lib
<span class="k">File</span> lib<span class="p">\</span>*.dll
<span class="k">WriteUninstaller</span> <span class="vg">$INSTDIR</span><span class="p">\</span>uninstaller.exe
<span class="k">SetOutPath</span> <span class="vg">$INSTDIR</span>
<span class="c">;;; Create desktop shortcut</span>
<span class="k">CreateShortCut</span> <span class="nb">$DESKTOP</span><span class="p">\</span>Foo App.lnk <span class="vg">$INSTDIR</span><span class="p">\</span>start_foo.exe <span class="vg">$INSTDIR</span><span class="p">\</span>foo_app.ico
<span class="c">;;; Create start-menu items</span>
<span class="k">CreateDirectory</span> <span class="nb">$STARTMENU</span><span class="p">\</span>Foo App
<span class="k">CreateShortCut</span> <span class="nb">$STARTMENU</span><span class="p">\</span>Foo App<span class="p">\</span>Foo App.lnk <span class="vg">$INSTDIR</span><span class="p">\</span>start_foo.exe <span class="vg">$INSTDIR</span><span class="p">\</span>foo_app.ico
<span class="k">CreateShortCut</span> <span class="nb">$STARTMENU</span><span class="p">\</span>Foo App<span class="p">\</span>Foo App Uninstaller.lnk <span class="vg">$INSTDIR</span><span class="p">\</span>uninstaller.exe
<span class="c">;;; Add uninstall information to Add/Remove Programs (Control Panel)</span>
<span class="k">WriteRegStr</span> <span class="no">HKLM</span> Software<span class="p">\</span>Microsoft<span class="p">\</span>Windows<span class="p">\</span>CurrentVersion<span class="p">\</span>Uninstall<span class="p">\</span>FooApp <span class="p">\</span>
DisplayName Foo App Bla Bla
<span class="k">WriteRegStr</span> <span class="no">HKLM</span> Software<span class="p">\</span>Microsoft<span class="p">\</span>Windows<span class="p">\</span>CurrentVersion<span class="p">\</span>Uninstall<span class="p">\</span>FooApp <span class="p">\</span>
UninstallString <span class="vg">$INSTDIR</span><span class="p">\</span>uninstaller.exe
<span class="k">WriteRegStr</span> <span class="no">HKLM</span> Software<span class="p">\</span>Microsoft<span class="p">\</span>Windows<span class="p">\</span>CurrentVersion<span class="p">\</span>Uninstall<span class="p">\</span>FooApp <span class="p">\</span>
DisplayIcon <span class="vg">$INSTDIR</span><span class="p">\</span>foo_app.ico
<span class="k">WriteRegStr</span> <span class="no">HKLM</span> Software<span class="p">\</span>Microsoft<span class="p">\</span>Windows<span class="p">\</span>CurrentVersion<span class="p">\</span>Uninstall<span class="p">\</span>FooApp <span class="p">\</span>
Publisher Your Organization
<span class="k">SectionEnd</span>
<span class="c">;--------------------------------</span>
<span class="c">;--------------------------------</span>
<span class="c">; The stuff to Uninstall</span>
<span class="k">Section</span> Uninstall
<span class="c">;;; Foo App will be removed for all users</span>
<span class="k">SetShellVarContext</span> <span class="no">all</span>
<span class="k">SetOutPath</span> <span class="vg">$INSTDIR</span>
<span class="k">RMDir</span> <span class="na">/r</span> <span class="vg">$INSTDIR</span>
<span class="k">RMDir</span> <span class="na">/r</span> <span class="nb">$STARTMENU</span><span class="p">\</span>Foo App
<span class="k">Delete</span> <span class="nb">$DESKTOP</span><span class="p">\</span>Foo App.lnk
<span class="c">;;; Remove Foo App info from the windows registry</span>
<span class="k">DeleteRegKey</span> <span class="no">HKLM</span> Software<span class="p">\</span>Microsoft<span class="p">\</span>Windows<span class="p">\</span>CurrentVersion<span class="p">\</span>Uninstall<span class="p">\</span>FooApp
<span class="k">SectionEnd</span>
<span class="c">;--------------------------------</span>
</code></pre></div>
<div class="comments mt-5">
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "https://frommelmak.com/crear-un-instalable-en-pocos-minutos-con-nsis.html";
this.page.identifier = "crear-un-instalable-en-pocos-minutos-con-nsis.html";
};
(function() {
var d = document, s = d.createElement('script');
s.src = 'https://frommelmak.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus</a>.</noscript>
</div>
</div>
<div class="col-md-3">
<div class="card bg-light text-dark">
<ul class="list-group list-group-flush">
<li class="list-group-item">
<abbr title="2008-12-19T00:54:42+01:00"><i class="fas fa-calendar"></i> Fri 19 December 2008</abbr>
</li>
<li class="list-group-item">
<address>
<i class="fas fa-user"></i> By
<a href="https://frommelmak.com/author/frommelmak.html" rel="author">frommelmak</a>
</address>
</li>
<li class="list-group-item">
<a href="https://frommelmak.com/category/spanish.html" rel="tag" data-toggle="tooltip" class="badge badge-info" title="56 articles in this category">Spanish</a>
<a href="/tag/installer.html" data-toggle="tooltip" class="badge badge-secondary" title="1 article with this tag">installer</a>
<a href="/tag/nsis.html" data-toggle="tooltip" class="badge badge-secondary" title="1 article with this tag">nsis</a>
<a href="/tag/win32.html" data-toggle="tooltip" class="badge badge-secondary" title="1 article with this tag">win32</a>
</li>
<li class="list-group-item">
<p>Found a typo? Fix it now:</p>
<a class="btn btn-info btn-block" href="https://github.com/frommelmak/blog/edit/master/content/posts/crear-un-instalable-en-pocos-minutos-con-nsis.md"><i class="fas fa-edit fa-fw"></i> Edit article on GitHub</a>
</li>
<li class="list-group-item">
<nav class="nav nav-pills nav-fill">
<a class="nav-link btn btn-outline-primary border-0 " href="https://frommelmak.com/comunicarse-via-soap-con-mantis-mantisconnect-desde-php.html" title="Comunicarse via SOAP con Mantis (Mantisconnect) desde PHP" rel="prev">
<span aria-hidden="true">←</span> Older
</a>
<a class="nav-link btn btn-outline-primary border-0 " href="https://frommelmak.com/establecer-una-conexion-openvpn-desde-una-tarea-de-cron.html" title="Establecer una conexion OpenVPN desde una tarea de cron" rel="next">
Newer <span aria-hidden="true">→</span>
</a>
</nav>
</li>
</ul>
</div>
</div>
</div>
</div>
<footer class="container-fluid mt-5 p-4 small">
<div class="row mx-5">
<div class="col-md-2">
<h6>Social</h6>
<ul class="list-unstyled">
<li><a href="http://twitter.com/frommelmak">
<i class="fab fa-twitter fa-fw"></i>
@frommelmak
</a></li>
</ul>
</div>
<div class="col-md-2">
<h6>Links</h6>
<ul class="list-unstyled">
<li><a href="http://linkedin.com/in/marcosmartinezjimenez">
<i class="fab fa-linkedin fa-fw"></i>
LinkedIn
</a></li>
<li><a href="http://github.com/frommelmak">
<i class="fab fa-github fa-fw"></i>
GitHub
</a></li>
<li><a href="http://www.youtube.com/user/melmak">
<img src="https://www.google.com/s2/favicons?domain=www.youtube.com" width="16" height="16" class="link-icon" alt="www.youtube.com icon">
Youtube
</a></li>
</ul>
</div>
<div class="col-md-2">
<h6>Browse content by</h6>
<ul class="list-unstyled">
<li><a href="https://frommelmak.com/categories/index.html"><i class="fas fa-th fa-fw"></i> Categories</a></li>
<li><a href="https://frommelmak.com/archives/index.html"><i class="far fa-calendar-alt fa-fw"></i> Dates</a></li>
<li><a href="https://frommelmak.com/tags/index.html"><i class="fas fa-tags fa-fw"></i> Tags</a></li>
</ul>
</div>
<div class="col-md-2 text-muted">
<h6>Copyright notice</h6>
<p class="small">
© Copyright
2005-2020
Marcos Martinez.
</p>
</div>
<div class="col-md-2 text-muted">
<h6>Disclaimer</h6>
<p class="small">
All opinions expressed in this site are my own
personal opinions and are not endorsed by, nor
do they represent the opinions of my previous,
current and future employers or any of its
affiliates, partners or customers.
</p>
</div>
<div class="col-md-2">
</div>
</div>
<div class="row mt-3">
<div class="offset-3 col-6 small text-muted text-center">
Site generated by <a class="text-dark" href="https://getpelican.com">Pelican</a>.<br>
<a class="text-dark" href="https://github.com/kdeldycke/plumage">Plumage</a>
theme by <a class="text-dark" href="https://kevin.deldycke.com">Kevin Deldycke</a>.
</div>
<div class="col-3 text-right d-flex flex-column">
<a class="mt-auto" href="#"><i class="fas fa-arrow-up"></i> Back to top</a>
</div>
</div>
</footer>
</body>
</html>