Compare commits
1 Commits
master
...
sqla-i18n-
Author | SHA1 | Date |
---|---|---|
|
aca0cc49be | 5 years ago |
@ -1,3 +1,2 @@
|
||||
__pycache__/
|
||||
/output/
|
||||
/gergelypolonkaieu_site.egg-info/
|
||||
/Gemfile.lock
|
||||
_site/
|
||||
|
@ -0,0 +1,2 @@
|
||||
(setq hyde/git/remote "origin"
|
||||
hyde/git/remote-branch "master")
|
@ -0,0 +1,11 @@
|
||||
---
|
||||
layout: page
|
||||
title: Not Found
|
||||
permalink: /404.html
|
||||
---
|
||||
|
||||
The page you are looking for is not here. Maybe it was but I have removed it. Most likely it was intentionally. If you think I made a mistake, please tell me.
|
||||
|
||||
{% if page.url contains '/akarmi' %}
|
||||
If you are looking for the pictures that used to be here, you should definitely contact me. For reasons.
|
||||
{% endif %}
|
@ -1,74 +0,0 @@
|
||||
PY?=python3
|
||||
PELICAN?=pelican
|
||||
PELICANOPTS=
|
||||
|
||||
BASEDIR=$(CURDIR)
|
||||
INPUTDIR=$(BASEDIR)/content
|
||||
OUTPUTDIR=$(BASEDIR)/output
|
||||
CONFFILE=$(BASEDIR)/pelicanconf.py
|
||||
PUBLISHCONF=$(BASEDIR)/publishconf.py
|
||||
|
||||
DEBUG ?= 0
|
||||
ifeq ($(DEBUG), 1)
|
||||
PELICANOPTS += -D
|
||||
endif
|
||||
|
||||
RELATIVE ?= 0
|
||||
ifeq ($(RELATIVE), 1)
|
||||
PELICANOPTS += --relative-urls
|
||||
endif
|
||||
|
||||
help:
|
||||
@echo 'Makefile for a pelican Web site '
|
||||
@echo ' '
|
||||
@echo 'Usage: '
|
||||
@echo ' make html (re)generate the web site '
|
||||
@echo ' make clean remove the generated files '
|
||||
@echo ' make regenerate regenerate files upon modification '
|
||||
@echo ' make publish generate using production settings '
|
||||
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
|
||||
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
|
||||
@echo ' make devserver [PORT=8000] serve and regenerate together '
|
||||
@echo ' make ssh_upload upload the web site via SSH '
|
||||
@echo ' make rsync_upload upload the web site via rsync+ssh '
|
||||
@echo ' '
|
||||
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
|
||||
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
|
||||
@echo ' '
|
||||
|
||||
html:
|
||||
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
|
||||
|
||||
clean:
|
||||
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
|
||||
|
||||
regenerate:
|
||||
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
|
||||
|
||||
serve:
|
||||
ifdef PORT
|
||||
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
|
||||
else
|
||||
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
|
||||
endif
|
||||
|
||||
serve-global:
|
||||
ifdef SERVER
|
||||
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
|
||||
else
|
||||
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
|
||||
endif
|
||||
|
||||
|
||||
devserver:
|
||||
ifdef PORT
|
||||
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
|
||||
else
|
||||
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
|
||||
endif
|
||||
|
||||
publish:
|
||||
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
|
||||
|
||||
|
||||
.PHONY: html help clean regenerate serve serve-global devserver publish
|
@ -1,18 +1,2 @@
|
||||
# Website of Gergely Polonkai
|
||||
|
||||
## Publishing to the web
|
||||
|
||||
```
|
||||
poetry run pelican content
|
||||
rsync --archive --verbose --human-readable --delete output/ /data/gergely.polonkai.eu/html
|
||||
restorecon -vr /data/gergely.polonkai.eu/html
|
||||
```
|
||||
|
||||
## Publishing to IPFS
|
||||
|
||||
```
|
||||
poetry run pelican -s ipfspublish.py -o ipfs-version content
|
||||
cd ipfs-version
|
||||
ipfs add -r .
|
||||
ipfs name publish --key=gergely.polonkai.eu /ipfs/XXX
|
||||
```
|
||||
gergelypolonkai.github.io
|
||||
=========================
|
||||
|
@ -0,0 +1,19 @@
|
||||
# Site settings
|
||||
title: Gergely Polonkai
|
||||
email: gergely@polonkai.eu
|
||||
description: "developer, systems engineer and administrator"
|
||||
baseurl: ""
|
||||
url: "http://gergely.polonkai.eu"
|
||||
timezone: Europe/Budapest
|
||||
name: Gergely Polonkai
|
||||
paginate: 10
|
||||
paginate_path: "/blog/page/:num"
|
||||
exclude: ['README.md', 'Gemfile', 'Gemfile.lock', 'CNAME', ".hyde.el"]
|
||||
include: ['.well-known']
|
||||
plugins:
|
||||
- jekyll-gist
|
||||
- jekyll-paginate
|
||||
|
||||
# Build settings
|
||||
markdown: kramdown
|
||||
permalink: pretty
|
@ -0,0 +1,42 @@
|
||||
- text: E-mail
|
||||
link: mailto:gergely@polonkai.eu
|
||||
image: email.png
|
||||
- text: Stack Exchange
|
||||
link: http://stackexchange.com/users/1369500/gergelypolonkai
|
||||
image: stackexchange.png
|
||||
- text: LinkedIn
|
||||
link: http://www.linkedin.com/in/gergelypolonkai
|
||||
image: linkedin.png
|
||||
- text: Skype
|
||||
link: skype:gergely.polonkai
|
||||
image: skype.png
|
||||
- text: Facebook
|
||||
link: http://facebook.com/Polesz
|
||||
image: facebook.png
|
||||
- text: Google+
|
||||
link: https://plus.google.com/+GergelyPolonkai/about
|
||||
image: google_plus.png
|
||||
- text: Twitter
|
||||
link: http://twitter.com/GergelyPolonkai
|
||||
image: twitter.png
|
||||
- text: Tumblr
|
||||
link: http://gergelypolonkai.tumblr.com
|
||||
image: tumblr.png
|
||||
- text: deviantArt
|
||||
link: http://gergelypolonkai.deviantart.com
|
||||
image: deviantart.png
|
||||
- text: Hashnode
|
||||
link: https://hashnode.com/@gergelypolonkai
|
||||
image: hashnode.png
|
||||
- text: Keybase
|
||||
link: https://keybase.io/gergelypolonkai
|
||||
image: keybase.png
|
||||
- text: Liberapay
|
||||
link: https://liberapay.com/gergelypolonkai
|
||||
image: liberapay.png
|
||||
- text: Mastodon
|
||||
link: https://social.polonkai.eu/@gergely
|
||||
image: mastodon.png
|
||||
- text: Pay me a coffee
|
||||
link: https://paypal.me/GergelyPolonkai/250
|
||||
image: paypal.png
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,15 @@
|
||||
---
|
||||
layout: post
|
||||
title: "GtkActionable in action"
|
||||
author:
|
||||
name: "Gergely Polonkai"
|
||||
email: "gergely@polonkai.eu"
|
||||
---
|
||||
|
||||
I have seen several people (including myself) struggling with
|
||||
disabling/enabling menu items, toolbar buttons and similar UI
|
||||
interfaces based on different conditions. It gets even worse if there
|
||||
are multiple representations of the same action in the same
|
||||
application, e.g. a menu item and a toolbar button exists for the same
|
||||
action. But with GTK+ 3.4, we have GtkAction, which is exactly for
|
||||
this kind of situations.
|
@ -0,0 +1,17 @@
|
||||
---
|
||||
layout: post
|
||||
title: "Measuring code coverage with codecov for libtool projects"
|
||||
author:
|
||||
name: "Gergely Polonkai"
|
||||
email: "gergely@polonkai.eu"
|
||||
---
|
||||
|
||||
I have recently found [codecov][https://codecov.io/]; they offer free
|
||||
services for public GitHub projects. As I have recently started writing
|
||||
tests for my SWE-GLib project, I decided to give it a go. Things are not
|
||||
this easy if you use GNU Autotools and libtool, though…
|
||||
|
||||
The problem here is that these tools generate output under `src/.libs/`
|
||||
(given that your sources are under `src/`) and `gcov` has hard times
|
||||
finding the coverage data files. Well, at least in the codecov
|
||||
environment, it works fine on my machine.
|
@ -0,0 +1,49 @@
|
||||
<article class="{% if page.post_listing %}col-sm-5 col-md-6 {% endif%}post">
|
||||
{% if page.post_listing %}
|
||||
<ul class="list-inline">
|
||||
<li class="col-md-8">
|
||||
{% endif %}
|
||||
<header class="post-header">
|
||||
{% if page.tag %}
|
||||
<h5>
|
||||
{% else %}
|
||||
<h3>
|
||||
{% endif %}
|
||||
{% if page.post_listing %}
|
||||
<a href="{{post.url | prepend: site.baseurl}}">
|
||||
{% endif %}
|
||||
{{post.title}}
|
||||
{% if page.post_listing %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if layout.render_post %}
|
||||
<div class="plusone-container"><div class="g-plusone" data-annotation="inline" data-size="small" data-width="300"></div></div>
|
||||
{% endif %}
|
||||
{% if page.tag %}
|
||||
</h5>
|
||||
{% else %}
|
||||
</h3>
|
||||
{% endif %}
|
||||
<div class="meta pull-left">
|
||||
{{post.author.name}}
|
||||
</div>
|
||||
<div class="meta pull-right">
|
||||
{{post.date | date: "%b %-d, %Y :: %H:%M"}}
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
{% if layout.render_post %}
|
||||
{{content}}
|
||||
{% else %}
|
||||
{{post.excerpt}}
|
||||
{% endif %}
|
||||
</main>
|
||||
|
||||
{% include tag-link.html %}
|
||||
{% if layout.post_listing %}
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
</article>
|
@ -0,0 +1,14 @@
|
||||
<div id="disqus_thread"></div>
|
||||
<script type="text/javascript">
|
||||
var disqus_shortname = 'gergelypolonkai';
|
||||
|
||||
(function() {
|
||||
var dsq = document.createElement('script');
|
||||
dsq.type = 'text/javascript';
|
||||
dsq.async = true;
|
||||
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||
})();
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||||
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
|
@ -0,0 +1,16 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="keywords" content="{{page.keywords}}">
|
||||
<meta name="description" content="Personal page of Gergely Polonkai">
|
||||
<title>Gergely Polonkai{% if page.title %}: {{page.title}}{% endif %}</title>
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="{{'/favicon.ico' | prepend: site.baseurl}}">
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic" rel="stylesheet" type="text/css">
|
||||
<link rel="alternate" type="application/rss+xml" title="Gergely Polonkai's Blog - RSS Feed" href="{{site.url}}/blog/atom.xml">
|
||||
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="{{'/css/style.css' | prepend: site.baseurl}}">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/1.6.3/css/jquery.terminal.min.css" rel="stylesheet"/>
|
||||
|
||||
<script type="text/javascript" src="//code.jquery.com/jquery-2.1.3.min.js"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/1.6.3/js/jquery.terminal.min.js"></script>
|
@ -0,0 +1,35 @@
|
||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#gp-navbar">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="{{'/' | prepend: site.baseurl}}"><img src="{{'/images/profile.svg' | prepend: site.baseurl}}" alt="Gergely Polonkai" style="background-color: white; height: 45px; margin-top: -13px;"></a>
|
||||
{% if page.url != '/' %}
|
||||
<a class="navbar-brand" href="{{'/' | prepend: site.baseurl}}">Gergely Polonkai</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="gp-navbar">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="{{'/blog' | prepend: site.baseurl}}">Blog</a></li>
|
||||
<li><a href="{{'/resume' | prepend: site.baseurl}}">Resume</a></li>
|
||||
<li><a href="{{'/stories' | prepend: site.baseurl}}">Stories</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="https://about.me/gergely.polonkai">about.me</a></li>
|
||||
<li><a href="{{'/disclaimer' | prepend: site.baseurl}}">Disclaimer</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-pencil"></span> Contact me <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
{% for contact in site.data.contacts %}
|
||||
<li><a href="{{contact.link}}" target="_blank"><img src="{{'/images/contact/' | prepend: site.baseurl | append: contact.image}}" alt="" /> {{contact.text}}</a></li>
|
||||
{% endfor %}
|
||||
<li><a href="{{'/blog/atom.xml' | prepend: site.baseurl}}"><img src="{{'/images/contact/feed.png' | prepend: site.baseurl}}" alt="" /> RSS Feed</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,17 @@
|
||||
<nav>
|
||||
<ul class="pagination">
|
||||
<li{% if paginator.previous_page == null %} class="disabled"{% endif %}>
|
||||
<a href="{{paginator.previous_page_path | prepend: site.baseurl | replace: '//', '/'}}" aria-label="Previous page">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% for page in (1..paginator.total_pages) %}
|
||||
<li{% if paginator.page == page %} class="active"{% endif %}><a href="{% if page == 1 %}{{'/blog' | prepend: site.baseurl}}{% else %}{{site.paginate_path | prepend: site.baseurl | replace: '//', '/' | replace: ':num', page}}{% endif %}">{{page}}</a></li>
|
||||
{% endfor %}
|
||||
<li{% if paginator.next_page == null %} class="disabled"{% endif %}>
|
||||
<a href="{{paginator.next_page_path | prepend: site.baseurl | replace: '//', '/'}}" aria-label="Next page">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
@ -0,0 +1,9 @@
|
||||
<div class="container-fluid">
|
||||
{% for post in posts limit: post_limit %}
|
||||
{% capture counter %}{% cycle 'odd', 'even' %}{% endcapture %}
|
||||
{% include blog-post.html %}
|
||||
{% if counter == 'even' %}
|
||||
<div class="clearfix"></div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
@ -0,0 +1,11 @@
|
||||
{% capture tagsize %}{{post.tags | size}}{% endcapture %}
|
||||
{% if tagsize != '0' %}
|
||||
<footer>
|
||||
<p class="article-tags">
|
||||
{% for tag in post.tags %}
|
||||
<a href="{{tag | prepend: '/blog/tag/' | prepend: site.baseurl}}" class="tag-label">{{tag}}</a>
|
||||
{% endfor %}
|
||||
</p>
|
||||
<br class="clearfix">
|
||||
</footer>
|
||||
{% endif %}
|
@ -0,0 +1,130 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{% include head.html %}
|
||||
</head>
|
||||
<body>
|
||||
{% include header.html %}
|
||||
<div class="container" id="main-container">
|
||||
|
||||
{{content}}
|
||||
|
||||
{% if page.name != 'about.html' %}
|
||||
<div class="well well-sm small">
|
||||
<div class="pull-left" id="about-well-image">
|
||||
<a href="{{ site_url }}/about/">
|
||||
<img src="{{'/images/profile.svg' | prepend: site.baseurl}}" alt="">
|
||||
</a>
|
||||
</div>
|
||||
{% include about.html %}
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#tagcloud-button').click(function() {
|
||||
$('#tag-cloud').toggle('slow');
|
||||
});
|
||||
});
|
||||
|
||||
(function() {
|
||||
var po = document.createElement('script');
|
||||
po.type = 'text/javascript';
|
||||
po.async = true;
|
||||
po.src = 'https://apis.google.com/js/client:plusone.js?onload=start';
|
||||
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(po, s);
|
||||
})();
|
||||
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', 'UA-43569023-1', 'polonkai.eu');
|
||||
ga('send', 'pageview');
|
||||
|
||||
jQuery.extend_if_has = function(desc, source, array) {
|
||||
for (var i=array.length;i--;) {
|
||||
if (typeof source[array[i]] != 'undefined') {
|
||||
desc[array[i]] = source[array[i]];
|
||||
}
|
||||
}
|
||||
return desc;
|
||||
};
|
||||
|
||||
(function($) {
|
||||
$.fn.tilda = function(eval, options) {
|
||||
if ($('body').data('tilda')) {
|
||||
return $('body').data('tilda').terminal;
|
||||
}
|
||||
this.addClass('tilda');
|
||||
options = options || {};
|
||||
eval = eval || function(command, term) {
|
||||
term.echo("you don't set eval for tilda");
|
||||
};
|
||||
var settings = {
|
||||
prompt: 'guest@gergely.polonkai.eu> ',
|
||||
name: 'tilda',
|
||||
height: 400,
|
||||
enabled: false,
|
||||
greetings: 'Welcome to my Terminal. Type `help\' to list the available commands.\n\nPowered by http://terminal.jcubic.pl',
|
||||
keypress: function(e) {
|
||||
if (e.which == 96) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
if (options) {
|
||||
$.extend(settings, options);
|
||||
}
|
||||
this.append('<div class="td"></div>');
|
||||
var self = this;
|
||||
self.terminal = this.find('.td').terminal(eval, settings);
|
||||
var focus = false;
|
||||
$(document.documentElement).keypress(function(e) {
|
||||
console.log(e);
|
||||
if (e.which == 96) {
|
||||
self.slideToggle('fast');
|
||||
self.terminal.focus(focus = !focus);
|
||||
self.terminal.attr({
|
||||
scrollTop: self.terminal.attr("scrollHeight")
|
||||
});
|
||||
}
|
||||
});
|
||||
$('body').data('tilda', this);
|
||||
this.hide();
|
||||
return self;
|
||||
};
|
||||
})(jQuery);
|
||||
|
||||
String.prototype.strip = function(char) {
|
||||
return this.replace(new RegExp("^\\s*"), '')
|
||||
.replace(new RegExp("\\s*$"), '');
|
||||
}
|
||||
|
||||
jQuery(document).ready(function($) {
|
||||
$('#tilda').tilda(function(command, terminal) {
|
||||
command = command.strip();
|
||||
|
||||
switch (command) {
|
||||
case 'help':
|
||||
terminal.echo('about - Go to the about page');
|
||||
terminal.echo(' ');
|
||||
terminal.echo('More commands will follow soon!');
|
||||
|
||||
break;
|
||||
case 'about':
|
||||
location = '{{ site_url }}/about/';
|
||||
|
||||
break;
|
||||
default:
|
||||
terminal.echo(command + ': command not found');
|
||||
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div id="tilda"></div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,15 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
<div class="post">
|
||||
|
||||
<header class="post-header">
|
||||
<h2>{{page.title}}</h2>
|
||||
<div class="clearfix"></div>
|
||||
</header>
|
||||
|
||||
<article class="post-content">
|
||||
{{content}}
|
||||
</article>
|
||||
|
||||
</div>
|
@ -0,0 +1,20 @@
|
||||
---
|
||||
layout: default
|
||||
render_post: true
|
||||
---
|
||||
{% assign post = page %}
|
||||
{% include blog-post.html %}
|
||||
<div class="g-plus" data-action="share" data-height="15"></div>
|
||||
|
||||
<nav>
|
||||
<ul class="pager">
|
||||
{% if page.previous %}
|
||||
<li class="previous"><a href="{{page.previous.url | prepend: site.baseurl}}">← {{page.previous.title}}</a></li>
|
||||
{% endif %}
|
||||
{% if page.next %}
|
||||
<li class="next"><a href="{{page.next.url | prepend: site.baseurl}}">{{page.next.title}} →</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
{% include disqus.html %}
|
@ -0,0 +1,15 @@
|
||||
---
|
||||
layout: default
|
||||
post_listing: true
|
||||
---
|
||||
<h3 class="tag">{{ page.tag }}</h3>
|
||||
{{content}}
|
||||
|
||||
<h4>Articles under this tag</h4>
|
||||
|
||||
{% if site.tags[page.tag] %}
|
||||
{% assign posts = site.tags[page.tag] %}
|
||||
{% include post-list.html %}
|
||||
{% else %}
|
||||
No posts with this tag.
|
||||
{% endif %}
|
@ -0,0 +1,43 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# Find all tags in all posts under _posts, and generate a file for
|
||||
# each under blog/tag. Also, if a tag page does not contain the tag:
|
||||
# or layout: keywords, the script will include them in the front
|
||||
# matter.
|
||||
|
||||
layout="posts-by-tag"
|
||||
|
||||
for tag in `grep -h ^tags: _posts/* | sed -re 's/^tags: +\[//' -e 's/\]$//' -e 's/, /\n/g' | sort | uniq`
|
||||
do
|
||||
tag_file="blog/tag/${tag}.md"
|
||||
echo -n "[$tag] "
|
||||
|
||||
if [ ! -f $tag_file ]
|
||||
then
|
||||
echo "creating ($tag_file)"
|
||||
|
||||
cat <<EOF > $tag_file
|
||||
---
|
||||
layout: $layout
|
||||
tag: $tag
|
||||
---
|
||||
EOF
|
||||
else
|
||||
updated=0
|
||||
if ! egrep "^tag: +${tag}$" $tag_file 2>&1 > /dev/null; then
|
||||
echo "adding tag"
|
||||
sed -i "0,/---/! s/---/tag: $tag\\n---/" $tag_file
|
||||
updated=1
|
||||
fi
|
||||
|
||||
if ! egrep "^layout: +" $tag_file 2>&1 > /dev/null; then
|
||||
echo "adding layout"
|
||||
sed -i "0,/---/! s/---/layout: $layout\\n---/" $tag_file
|
||||
updated=1
|
||||
fi
|
||||
|
||||
if [ $updated = 0 ]; then
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
done
|
@ -0,0 +1,28 @@
|
||||
---
|
||||
layout: post
|
||||
title: "SSH login FAILed on Red Had Enterprise Linux 6.2"
|
||||
date: 2012-06-18 18:28:45
|
||||
tags: [linux, selinux, ssh, red-hat]
|
||||
permalink: /blog/2012/6/18/ssh-login-failed-on-red-hat-enterprise-linux-6-2
|
||||
published: true
|
||||
author:
|
||||
name: Gergely Polonkai
|
||||
email: gergely@polonkai.eu
|
||||
---
|
||||
|
||||
Now this was a mistake I should not have done…
|
||||
|
||||
About a month ago I have moved my AWS EC2 machine from Amazon Linux to RHEL
|
||||
6.2. This was good. I have moved all my files and stuff, recreated my own
|
||||
user, everything was just fine. Then I copied my
|
||||
[gitosis](https://github.com/tv42/gitosis) account (user `git` and its home
|
||||
directory). Then I tried to log in. It failed. I was blaming OpenSSH for a week
|
||||
or so, changed the config file in several ways, tried to change the permissions
|
||||
on `~git/.ssh/*`, but still nothing. Permission were denied, I was unable to
|
||||
push any of my development changes. Now after a long time of trying, I
|
||||
coincidently `tail -f`-ed `/var/log/audit/audit.log` (wanted to open `auth.log`
|
||||
instead) and that was my first good point. It told me that `sshd` was unable to
|
||||
read `~git/.ssh/authorized_keys`, which gave me the idea to run `restorecon` on
|
||||
`/home/git`. It solved the problem.
|
||||
|
||||
All hail SELinux and RBAC!
|