<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>wasil.org</title>
	<atom:link href="http://wasil.org/feed" rel="self" type="application/rss+xml" />
	<link>http://wasil.org</link>
	<description>Abandon the search for Truth; settle for a good fantasy</description>
	<lastBuildDate>Sun, 19 Feb 2012 14:09:36 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>GitLab quick installation script &#8211; Fedora 16</title>
		<link>http://wasil.org/gitlab-quick-installation-script-fedora-16</link>
		<comments>http://wasil.org/gitlab-quick-installation-script-fedora-16#comments</comments>
		<pubDate>Fri, 23 Dec 2011 14:01:40 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[wszystkie wpisy]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=319</guid>
		<description><![CDATA[I've managed to prepare Fedora 16 easy installation scripts for GitLab. Use them as root user. Download 2 scripts from bottom of this post and save them on your Linux server. Be advised: this script is outdated. Please use it with caution! I'm working on update. first, run this script: execute these commands: to finish, [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>I've managed to prepare Fedora 16 easy installation scripts for GitLab. Use them as <strong>root</strong> user. Download 2 scripts from bottom of this post and save them on your Linux server.</p>
<h5>Be advised: this script is outdated. Please use it with caution! I'm working on update.</h5>
<h4>first, run this script:</h4>
<pre class="brush: bash; title: ; notranslate">gitlab_unattended_install_start.sh</pre>
<h4>execute these commands:</h4>
<pre class="brush: bash; title: ; notranslate">
	cd /var/www/gitlabhq
	source /etc/profile.d/rvm.sh
	rvm all do rake db:setup
	rvm all do rake db:seed_fu
	</pre>
<h4>to finish, fire up this script, and you're done :)</h4>
<pre class="brush: bash; title: ; notranslate">gitlab_unattended_install_finish.sh</pre>
<h4>scripts download</h4>
<p><a href="http://wasil.org/wp-content/uploads/2011/12/gitlab_unattended_install_start.sh">gitlab_unattended_install_start.sh</a><br />
<a href="http://wasil.org/wp-content/uploads/2011/12/gitlab_unattended_install_finish.sh">gitlab_unattended_install_finish.sh</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/gitlab-quick-installation-script-fedora-16/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitLab installation on Fedora 16 (with gitolite)</title>
		<link>http://wasil.org/gitlab-installation-on-fedora-16-with-gitolite</link>
		<comments>http://wasil.org/gitlab-installation-on-fedora-16-with-gitolite#comments</comments>
		<pubDate>Tue, 20 Dec 2011 16:11:22 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[strony www]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=258</guid>
		<description><![CDATA[This is updated version of my tutorial for GitLab 2.1. Old version can be found here GitLab is a wonderful piece of software made by these guys and I'd like to try and install it on Fedora 16 system, as it is most recent Fedora OS at the time I am writnig this. I will [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><h5>This is updated version of my tutorial for GitLab 2.1. Old version can be found <a href="http://wasil.org/archive-gitlab-installation-on-fedora-16-with-gitolite">here</a></h5>
<p><strong>GitLab</strong> is a wonderful piece of software made by these <a href="http://gitlabhq.com/" target="_blank">guys </a>and I'd like to try and install it on Fedora 16 system, as it is most recent Fedora OS at the time I am writnig this. I will base my tutorial on on found <a href="http://www.dejaaugustine.com/2011/10/setting-up-gitlabhq-on-rhel5/" target="_blank">here </a>by <em> <a title="Posts by Déja" href="http://www.dejaaugustine.com/author/deja/">Déja</a></em>. Also on my way to successful install I've stumbled upon <a href="http://www.ryanwersal.com/blog/2011/10/18/installing-gitlab-on-ubuntu-server/" target="_blank">this </a>description, so I might have gain some experience from it too.</p>
<p>GitLab is Ruby on Rails application and it takes some experience to get it all working because of many, many, many dependencies and packages it needs. It's nothing like simple PHP on Apache installation. But it works and it's worth it, I assure you :)</p>
<p>Let's begin! (by the way: I perform all as <strong>root</strong> user - again: test environment)</p>
<h5>small edit: For people who only want this to work and not necessarily wish to know how and why, I have prepared easy installation scripts in <a href="http://wasil.org/en/gitlab-quick-installation-script-fedora-16">here</a></h5>
<h5>another EDIT: GitLab is under heavy development and now it's stable version is 2.1. This means that my guide might be not entirely accurate. Please be cautious. I'll update it soon.</h5>
<ol>
<li>First of all: I am working on virtual machine with brand new and fresh Fedora 16 installed. Minimal installation, just to make sure nothing messes with GitLab. Consider this a test environment.</li>
<li>Once you have your OS ready, update it with yum update and also install some packages you will need on the way:
<pre class="brush: bash; title: ; notranslate">yum install make openssh-clients gcc libxml2 libxml2-devel \
libxslt libxslt-devel python-devel</pre>
</li>
<li>Check what version of ruby is available via yum. GitLab needs at least version 1.9.2
<pre class="brush: bash; title: ; notranslate">yum info ruby</pre>
<p>on mine it says that the only available version for me is 1.8.7.357 so I have to get it somewhere else.</li>
<li><strong>Using RVM to install Ruby.</strong><br />
<h5>EDIT: I have switched to ruby 1.9.3p0 - it works and starts a lot faster, you can use it instead of 1.9.2-p290 in this guide.</h5>
<p>I will use RVM, which stands for <a href="https://rvm.beginrescueend.com/" target="_blank">Ruby Version Manager</a> - brilliant tool, which you can use to install and manage your Ruby with ease. Let's check it out, shall we? (you can install Ruby any way you want - I'll just do this RVM way)</p>
<p>Notice use of <strong>--with-openssl</strong> switch - without that passenger will complain about Ruby OpenSSL support and won't compile in next step. </p>
<pre class="brush: bash; title: ; notranslate">
sudo bash -s stable &lt; &lt;(curl -sk https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

source /etc/profile.d/rvm.sh

rvm install ruby-1.9.2-p290 --with-openssl

rvm use ruby-1.9.2-p290 --default
</pre>
<p>Done. Just like that we have operational Ruby 1.9.2-p290. No RPMs, no going back in time.. nice, huh? :)</li>
<li>Good. Small (nice) surprise: our RPM installed ruby gems for us, so now we only have to get rails gem.<br />
first, just to make sure everything is up to date, execute:
<pre class="brush: bash; title: ; notranslate">rvm all do gem update --system</pre>
<p>now install rails with:
<pre class="brush: bash; title: ; notranslate">rvm all do gem install rails</pre>
</li>
<li>Now we will install apache2 as a webserver and Passenger for ruby apps deployment. I know that most GitLab tutorials use nginx but I really like apache ;)
<pre class="brush: bash; title: ; notranslate">yum install -y httpd</pre>
<pre class="brush: bash; title: ; notranslate">rvm all do gem install passenger</pre>
<p>as I mentioned: I use apache, so I will need passenger module for it:<br />
first some required packages:
<pre class="brush: bash; title: ; notranslate">yum install -y gcc-c++ curl-devel openssl-devel zlib-devel \
httpd-devel apr-devel apr-util-devel</pre>
<p>an then use
<pre class="brush: bash; title: ; notranslate">passenger-install-apache2-module</pre>
<p>in order to install it.it gives you 2 information on how to proceed with apache configuration:</p>
<ul>
<li>add following lines to /etc/httpd/conf/httpd.conf (at the very end):
<pre class="brush: bash; title: ; notranslate">
LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11
PassengerRuby /usr/bin/ruby
</pre>
</li>
<li>and then create file named default.conf (or gitlab.conf, or something other you like) in /etc/httpd/conf.d/ containing these lines (remember to change to fit your environment):
<pre class="brush: bash; title: ; notranslate">&lt;VirtualHost *:80&gt;
ServerName www.yourhost.com
DocumentRoot /somewhere/public
&lt;Directory /somewhere/public&gt;
AllowOverride all
Options -MultiViews
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>(don't worry, we'll come back to this one later)</li>
</ul>
</li>
<li>Now it is time for gitolite. I won't use gitosis because it is not actively developed any more and I found that new GitLab works better with gitolite.install it with
<pre class="brush: bash; title: ; notranslate">yum install -y gitolite</pre>
<p>now, wasn't that quick? :)</li>
<li>Now we will need to create new gitolite server configuration and in order to do that we have to generate SSH key-pair. But first things first.<br />
To get us started we will create <strong>git</strong> user with</p>
<pre class="brush: bash; title: ; notranslate">
adduser -r -m --shell /bin/bash \
 --comment 'git version control' git
mkdir /home/git/.ssh
chown git:git -R /home/git/.ssh
</pre>
<p>Now we have to create SSH keys pair for him:</p>
<pre class="brush: bash; title: ; notranslate">ssh-keygen -q -o -N '' -t rsa -f /home/git/.ssh/id_rsa</pre>
<p>To initialize Gitolite we need to first edit it's default configuration file and change default permissions and then initialize it by using <strong>git</strong> user:</p>
<pre class="brush: bash; title: ; notranslate">sed -i 's/0077/0007/g' /usr/share/gitolite/conf/example.gitolite.rc

su - git -c &quot;gl-setup -q /home/git/.ssh/id_rsa.pub&quot;</pre>
<p>as mentioned <a href="https://github.com/gitlabhq/gitlabhq/wiki/Gitolite" target="_blank">here</a>
</li>
<li>
Just to make sure that <strong>git</strong> user has all necessary access rights to his own home directory after we have added SSH keys for him:</p>
<pre class="brush: bash; title: ; notranslate">chown git:git -R /home/git/</pre>
</li>
<li>OK, time for next requirements: python Pip, I will go with method from original post and NOT use yum for that.
<pre class="brush: bash; title: ; notranslate">
curl http://python-distribute.org/distribute_setup.py | python
</pre>
<p>and then</p>
<pre class="brush: bash; title: ; notranslate">
easy_install pip
</pre>
</li>
<li>Database. We need it. We have it already - it was installed on the way as a dependency. Just to make sure check if you have SQLite at list version 3.6 with:
<pre class="brush: bash; title: ; notranslate">yum info sqlite</pre>
<p>I have 3.7.7.1. All we need is SQLite development package, get it with:
<pre class="brush: bash; title: ; notranslate">yum install -y sqlite-devel</pre>
</li>
<li>
<blockquote><p><strong>And now the main event! GitLabHQ!</strong></p></blockquote>
<p>I like install web apps in /var/www so we will go there and git clone GitLab:</p>
<pre class="brush: bash; title: ; notranslate">
cd /var/www

git clone git://github.com/gitlabhq/gitlabhq.git

cd gitlabhq/
</pre>
<p>we need to use pip to install some python dependencies:</p>
<pre class="brush: bash; title: ; notranslate">pip install pygments</pre>
<p>and bundler gem so it can later on do most of the work for us:</p>
<pre class="brush: bash; title: ; notranslate">rvm all do gem install bundler</pre>
<p>you will need one more dependency for <strong>bundle install</strong></p>
<pre class="brush: bash; title: ; notranslate">yum install -y libicu-devel</pre>
<p>finally (<em>remember to be in GitLab directory</em>):</p>
<pre class="brush: bash; title: ; notranslate">bundle install</pre>
<p>(go get yourself a coffee or other treat - it takes a while)</li>
<li>Redis installation. More about Redis <a href="http://redis.io" target="_blank">here</a>
<pre class="brush: bash; title: ; notranslate">yum install -y redis</pre>
<p>and start it with:</p>
<pre class="brush: bash; title: ; notranslate">
service redis start
</pre>
</li>
<li>Preparing config files.
<p>copy database and gitlab config files from example to working copies:</p>
<pre class="brush: bash; title: ; notranslate">
cp config/gitlab.yml.example config/gitlab.yml
cp config/database.yml.example config/database.yml</pre>
</li>
<li>DB setup:<br />
And now database setup and import:</p>
<pre class="brush: bash; title: ; notranslate">
RAILS_ENV=production rake db:setup
RAILS_ENV=production rake db:seed_fu
</pre>
<p>TIP: if you get errors here, check if you don't have 2 versions of rake installed (I had somehow): 0.8.7 and 0.9.2. If you do, remove older with:
<pre class="brush: bash; title: ; notranslate">gem uninstall rake</pre>
<p>and choose appropriate version. If you still have problems try:
<pre class="brush: bash; title: ; notranslate">gem install rake</pre>
<p>-> don't know why, but if it installs again same version of rake, it works.</li>
<li>Apache virtual host configuration should look something like this (I told you, we will get back to that):file: /etc/httpd/conf.d/gitlab.conf
<pre class="brush: bash; title: ; notranslate">
&lt;VirtualHost *:80&gt;
ServerName www.yourhost.com
DocumentRoot /var/www/gitlabhq/public
&lt;Directory /var/www/gitlabhq/public&gt;
AllowOverride all
Options -MultiViews
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
</li>
<li>enable apache user, co you can su into this account:
<pre class="brush: bash; title: ; notranslate">usermod -s /bin/bash -d /var/www/ apache</pre>
<p>prepare SSH key for him (actually use one created for <strong>git</strong> user)</p>
<pre class="brush: bash; title: ; notranslate">
mkdir /var/www/.ssh

cp -f /home/git/.ssh/id_rsa /var/www/.ssh/ &amp;&amp; chown apache:apache /var/www/.ssh/id_rsa &amp;&amp; chmod 600 /var/www/.ssh/id_rsa
</pre>
<p>add localhost to apache user known_hosts with:</p>
<pre class="brush: bash; title: ; notranslate">ssh-keyscan localhost &gt;&gt; /var/www/.ssh/known_hosts</pre>
<p>also give him permissions to his own home directory with:</p>
<pre class="brush: bash; title: ; notranslate">chown -R apache:apache /var/www/</pre>
<li>add apache user to git group with:
<pre class="brush: bash; title: ; notranslate">usermod -a -G git apache</pre>
</li>
<li>check if repositories directory has correct permissions, it should be <strong>770</strong>. You can set it with
<pre class="brush: bash; title: ; notranslate">chmod 770 /home/git/repositories/</pre>
</li>
<li>double check your firewall (for example iptables) if it allows connections on port 80 to your server.</li>
<li>
<h5>important: Apache won't be able o start with SELinux set to "enforcing". Please set it to permissive.</h5>
</li>
<li>start apache server with:
<pre class="brush: bash; title: ; notranslate">service httpd start</pre>
</li>
<li>Now it all should work. Fingers crossed.. go to http://www.yourhost.com</li>
<li>Now you should be able to log in using these credentials:<br />
<blockquote><p>user: admin@local.host<br />
pass: 5iveL!fe</p></blockquote>
<p>and you're in :)</li>
</ol>
<p>It wasn't so hard, wasn't it? ;)</p>
<h4><strong>Troubleshooting:</strong></h4>
<ol>
<li>I get error 500 when I enter particular project and try to get into it's "Admin" section. Don't know how to fix it yet.To fix it, check if repositories directory has correct permissions, it should be 770. You can set it with
<pre class="brush: bash; title: ; notranslate">chmod 770 /home/git/repositories</pre>
<p>also set this:</p>
<pre class="brush: bash; title: ; notranslate">chmod 770 /home/git</pre>
</li>
<li>If Passenger insists, that we don't have or he can't see grit library (gem actually, as far as I know) even though we have it.<br />
<blockquote><p>
https://github.com/gitlabhq/grit.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError)
</p></blockquote>
<p>Only resolution to this problem I have found is to (as root) change /usr/local/rvm/gems/ruby-1.9.3-p0/gems ownership to apache user with:</p>
<pre class="brush: bash; title: ; notranslate">chown apache:root -R /usr/local/rvm/gems/ruby-1.9.3-p0/gems</pre>
<p>I know that is not great resolution but it worked for me. If you'll happen to know better way - please let me know, so I can update this tutorial and my knowledge of course ;)</p>
<h4>Edit</h4>
<p>I found another solution (instead of changing permissions): after first</p>
<pre class="brush: bash; title: ; notranslate">bundle install</pre>
<p>edit Gemfile and in lines containing "git:" remove everything after first comma, for example:</p>
<pre class="brush: bash; title: ; notranslate">gem &quot;grit&quot;, :git =&gt; &quot;https://github.com/gitlabhq/grit.git&quot;</pre>
<p>should be</p>
<pre class="brush: bash; title: ; notranslate">gem &quot;grit&quot;</pre>
<p>and so on.</p>
<p>then do again</p>
<pre class="brush: bash; title: ; notranslate">bundle install</pre>
<p>and now passenger shouldn't complain any more.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/gitlab-installation-on-fedora-16-with-gitolite/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>(archive) GitLab installation on Fedora 16 (with gitolite)</title>
		<link>http://wasil.org/archive-gitlab-installation-on-fedora-16-with-gitolite</link>
		<comments>http://wasil.org/archive-gitlab-installation-on-fedora-16-with-gitolite#comments</comments>
		<pubDate>Fri, 19 Aug 2011 13:04:51 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=377</guid>
		<description><![CDATA[This is old version of my tutorial. Most recent version can be found here GitLab is a wonderful piece of software made by these guys and I'd like to try and install it on Fedora 16 system, as it is most recent Fedora OS at the time I am writnig this. I will base my [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><h5>This is old version of my tutorial. Most recent version can be found <a href="http://wasil.org/gitlab-installation-on-fedora-16-with-gitolite">here</a></h5>
<p><strong>GitLab</strong> is a wonderful piece of software made by these <a href="http://gitlabhq.com/" target="_blank">guys </a>and I'd like to try and install it on Fedora 16 system, as it is most recent Fedora OS at the time I am writnig this. I will base my tutorial on on found <a href="http://www.dejaaugustine.com/2011/10/setting-up-gitlabhq-on-rhel5/" target="_blank">here </a>by <em> <a title="Posts by Déja" href="http://www.dejaaugustine.com/author/deja/">Déja</a></em>. Also on my way to successful install I've stumbled upon <a href="http://www.ryanwersal.com/blog/2011/10/18/installing-gitlab-on-ubuntu-server/" target="_blank">this </a>description, so I might have gain some experience from it too.</p>
<p>GitLab is Ruby on Rails application and it takes some experience to get it all working because of many, many, many dependencies and packages it needs. It's nothing like simple PHP on Apache installation. But it works and it's worth it, I assure you :)</p>
<p>Let's begin! (by the way: I perform all as <strong>root</strong> user - again: test environment)</p>
<h5>small edit: For people who only want this to work and not necessarily wish to know how and why, I have prepared easy installation scripts in <a href="http://wasil.org/en/gitlab-quick-installation-script-fedora-16">here</a></h5>
<ol>
<li>First of all: I am working on virtual machine with brand new and fresh Fedora 16 installed. Minimal installation, just to make sure nothing messes with GitLab. Consider this a test environment.</li>
<li>Once you have your OS ready, update it with yum update and also install some packages you will need on the way:
<pre class="brush: bash; title: ; notranslate">yum install make openssh-clients gcc libxml2 libxml2-devel \
libxslt libxslt-devel python-devel</pre>
</li>
<li>Check what version of ruby is available via yum. GitLab needs at least version 1.9.2
<pre class="brush: bash; title: ; notranslate">yum info ruby</pre>
<p>on mine it says that the only available version for me is 1.8.7.35 so I have to get it somewhere else.</li>
<li><strong>Method #1.</strong><br />
I will do as it says <a href="https://github.com/imeyer/ruby-1.9.2-rpm" target="_blank">here</a>. I have tried it before and it works flawlessly. With one or two catches of course ;)Mentioned catches and tips:</p>
<ul>
<li>you need wget, if you don't have it already use
<pre class="brush: bash; title: ; notranslate">yum install -y wget</pre>
</li>
<li>other needed packages (plus few dependencies) can be obtained by typing:
<pre class="brush: bash; title: ; notranslate">yum install -y readline-devel ncurses-devel gdbm-devel \
glibc-devel tcl-devel openssl-devel db4-devel byacc</pre>
</li>
<li>if you are using virtual machine, like me, you can first make a snapshot of it, then build ruby RPM package, copy it to you host machine (or network share or whatever place outside virtual machine) and then go back in time to you snapshot. Voila! Clean system ready for further installing GitLab. All you need to do is install earlier created ruby RPM. Anyway this is what I'm gonna do today. Keep it clean.</li>
<li>last step - your RPM will end up somewhere in ~/rpmbuilds/RPMS directory. It will reside in folder named after your system architecture, in my case: i386</li>
</ul>
<p>And here is how:</p>
<pre class="brush: bash; title: ; notranslate">
yum install -y rpm-build rpmdevtools
rpmdev-setuptree
cd ~/rpmbuild/SOURCES
wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
cd ~/rpmbuild/SPECS
curl https://raw.github.com/imeyer/ruby-1.9.2-rpm/master/ruby19.spec &gt; ruby19.spec
rpmbuild -bb ruby19.spec
rpm -Uvh ~/rpmbuild/RPMS/x86_64/ruby-1.9.2p290-2.ruby-1.9.2p290-2.i386.rpm
</pre>
<p>I took my VM about 4 minutes to compile and prepare RPM. Not so bad.<br />
Now I go back in time in my VM and install newly created RPM with</p>
<pre class="brush: bash; title: ; notranslate">rpm -Uvh ruby-1.9.2p290-2.fc16.i386.rpm</pre>
</li>
<li><strong>Method #2. ( I prefer this one so far)</strong><br />
<h5>EDIT: I have switched to ruby 1.9.3p0 - it works and starts a lot faster, you can use it instead of 1.9.2-p290 in this guide.</h5>
<p>I will use RVM, which stands for <a href="https://rvm.beginrescueend.com/" target="_blank">Ruby Version Manager</a> - brilliant tool, which you can use to install and manage your Ruby with ease. Let's check it out, shall we?</p>
<pre class="brush: bash; title: ; notranslate">
sudo bash -s stable &lt; &lt;(curl -sk https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

source /etc/profile.d/rvm.sh

rvm install ruby-1.9.2-p290

rvm use ruby-1.9.2-p290 --default
</pre>
<p>Done. Just like that we have operational Ruby 1.9.2-p290. No RPMs, bo going back in time.. nice, huh? :)</li>
<li>Good. Small (nice) surprise: our RPM installed ruby gems for us, so now we only have to get rails gem.<br />
first, just to make sure everything is up to date, execute:
<pre class="brush: bash; title: ; notranslate">gem update --system</pre>
<p>now install rails with:
<pre class="brush: bash; title: ; notranslate">gem install rails</pre>
</li>
<li>Now we will install apache2 as a webserver and Passenger for ruby apps deployment. I know that most GitLab tutorials use nginx but I really like apache ;)
<pre class="brush: bash; title: ; notranslate">yum install -y httpd</pre>
<pre class="brush: bash; title: ; notranslate">gem install passenger</pre>
<p>as I mentioned: I use apache, so I will need passenger module for it:<br />
first some required packages:
<pre class="brush: bash; title: ; notranslate">yum install gcc-c++ curl-devel openssl-devel zlib-devel \
httpd-devel apr-devel apr-util-devel</pre>
<p>an then use
<pre class="brush: bash; title: ; notranslate">passenger-install-apache2-module</pre>
<p>in order to install it.it gives you 2 information on how to proceed with apache configuration:</p>
<ul>
<li>add following lines to /etc/httpd/conf/httpd.conf (at the very end):
<pre class="brush: bash; title: ; notranslate">
LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11
PassengerRuby /usr/bin/ruby
</pre>
</li>
<li>and then create file named default.conf (or gitlab.conf, or something other you fancy) in /etc/httpd/conf.d/ containing these lines (remember to change to fit your environment):
<pre class="brush: bash; title: ; notranslate">&lt;VirtualHost *:80&gt;
ServerName www.yourhost.com
DocumentRoot /somewhere/public
&lt;Directory /somewhere/public&gt;
AllowOverride all
Options -MultiViews
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>(don't worry, we'll come back to this one later)</li>
</ul>
</li>
<li>Now it is time for gitolite. I won't use gitosis because it is not actively developed any more and I found that new GitLab works better with gitolite.install it with
<pre class="brush: bash; title: ; notranslate">yum install -y gitolite</pre>
<p>now, wasn't that quick? :)</li>
<li>Now we will need to create new gitolite server configuration and in order to do that we have to generate SSH key-pair. But first things first.<br />
To get us started su into gitolite user with</p>
<pre class="brush: bash; title: ; notranslate">su - gitolite</pre>
<p>now try to log into localhost via SSH -> it's small thing which will make our life easier in the future.
<pre class="brush: bash; title: ; notranslate">ssh localhost</pre>
<p>Just make it add localhost to list of known host - no need to actually authenticate. SSH created for us ~/.ssh directory. That's nice.SSH key generation is as easy as:</p>
<pre class="brush: bash; title: ; notranslate">ssh-keygen -t rsa</pre>
<p>use default path for saving key-pair (/var/lib/gitolite/.ssh/id_rsa) and no paraphrase. Test environment. Just a reminder.as for initialization of gitolite repository:</p>
<pre class="brush: bash; title: ; notranslate">gl-setup .ssh/id_rsa.pub</pre>
<p>next hit ENTER and edit will open, change value of</p>
<pre class="brush: bash; title: ; notranslate">$REPO_UMASK to 0007</pre>
<p>as mentioned <a href="https://github.com/gitlabhq/gitlabhq/wiki/Gitolite" target="_blank">here</a>Look like we are done here. Exit gitolite user shell and return to being almighty root himself ;)</li>
<li>OK, time for next requirements: python Pip, I will go with method from original post and NOT use yum for that.
<pre class="brush: bash; title: ; notranslate">
curl http://python-distribute.org/distribute_setup.py | python
</pre>
<p>and then</p>
<pre class="brush: bash; title: ; notranslate">
easy_install pip
</pre>
</li>
<li>Database. We need it. We have it already - it was installed on the way as a dependency. Just to make sure check if you have SQLite at list version 3.6 with:
<pre class="brush: bash; title: ; notranslate">yum info sqlite</pre>
<p>I have 3.7.7.1. All we need is SQLite development package, get it with:
<pre class="brush: bash; title: ; notranslate">yum install sqlite-devel</pre>
</li>
<li>
<blockquote><p><strong>And now the main event! GitLabHQ!</strong></p></blockquote>
<p>I like install web apps in /var/www so we will go there and git clone GitLab:</p>
<pre class="brush: bash; title: ; notranslate">
cd /var/www

git clone git://github.com/gitlabhq/gitlabhq.git

cd gitlabhq/
</pre>
<p>we need to use pip to install some python dependencies:</p>
<pre class="brush: bash; title: ; notranslate">pip install pygments</pre>
<p>and bundler gem so it can later on do most of the work for us:</p>
<pre class="brush: bash; title: ; notranslate">gem install bundler</pre>
<p>finally (<em>remember to be in GitLab directory</em>):</p>
<pre class="brush: bash; title: ; notranslate">bundle install</pre>
<p>(go get yourself a coffee or other treat - it takes w while)</li>
<li>DB setup:<br />
<h5>EDIT: For GitLab version 2.1 install Redis - without it rake will fail.:</h5>
<pre class="brush: bash; title: ; notranslate">
yum install redis libicu-devel
service redis start
</pre>
<p>And now database setup and import:</p>
<pre class="brush: bash; title: ; notranslate">
RAILS_ENV=production rake db:setup
RAILS_ENV=production rake db:seed_fu
</pre>
<p>TIP: if you get errors here, check if you don't have 2 versions of rake installed (I had somehow): 0.8.7 and 0.9.2. If you do, remove older with:
<pre class="brush: bash; title: ; notranslate">gem uninstall rake</pre>
<p>and choose appropriate version. If you still have problems try:
<pre class="brush: bash; title: ; notranslate">gem install rake</pre>
<p>-> don't know why, but if it installs again same version of rake, it works.</li>
<li>Apache virtual host configuration should look something like this (I told you, we will get back to that):file: /etc/httpd/conf.d/gitlab.conf
<pre class="brush: bash; title: ; notranslate">
&lt;VirtualHost *:80&gt;
ServerName www.yourhost.com
DocumentRoot /var/www/gitlabhq/public
&lt;Directory /var/www/gitlabhq/public&gt;
AllowOverride all
Options -MultiViews
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
</li>
<li>set correct settings in /var/www/gitlabhq/config/gitlab.yml
<p>in my case:# Git Hosting configuration</p>
<pre class="brush: bash; title: ; notranslate">
git_host:
system: gitolite
admin_uri: gitolite@localhost:gitolite-admin
base_path: /var/lib/gitolite/repositories/
host: localhost
git_user: gitolite
# port: 22
</pre>
</li>
<li>enable apache user, co you can su into this account:
<pre class="brush: bash; title: ; notranslate">usermod -s /bin/bash -d /var/www/ apache</pre>
<p>also give him permissions to his own home directory with:</p>
<pre class="brush: bash; title: ; notranslate">chown -R apache:apache /var/www/</pre>
<p>(I know this kinda overrides last chown command...)</li>
<li>do:
<pre class="brush: bash; title: ; notranslate">su - apache &amp;&amp; ssh localhost</pre>
<p>(same thing as in step 8. with know_hosts file. )<br />exit apache's shell and as root copy id_rsa private key from /var/lib/gitolite/.ssh/ to /var/www/.ssh/ and make apache it's owner with:</p>
<pre class="brush: bash; title: ; notranslate">cp -f /var/lib/gitolite/.ssh/id_rsa /var/www/.ssh/ \
&amp;&amp; chown apache:apache /var/www/.ssh/id_rsa \
&amp;&amp; chmod 600 /var/www/.ssh/id_rsa</pre>
</li>
<li>add apache user to gitolite group with:
<pre class="brush: bash; title: ; notranslate">usermod -a -G gitolite apache</pre>
</li>
<li>check if repositories directory has correct permissions, it should be <strong>770</strong>. You can set it with
<pre class="brush: bash; title: ; notranslate">chmod 770 /var/lib/gitolite/repositories/</pre>
</li>
<li>double check your firewall (for example iptables) if it allows connections on port 80 to your server.</li>
<li>start apache server with:
<pre class="brush: bash; title: ; notranslate">service httpd start</pre>
</li>
<li>Now it all should work. Fingers crossed.. go to http://www.yourhost.com</li>
<li>Now you should be able to log in using these credentials:<br />
<blockquote><p>user: admin@local.host<br />
pass: 5iveL!fe</p></blockquote>
<p>and you're in :)</li>
</ol>
<p>It wasn't so hard, wasn't it? ;)</p>
<h4><strong>Troubleshooting:</strong></h4>
<ol>
<li>I get error 500 when I enter particular project and try to get into it's "Admin" section. Don't know how to fix it yet.To fix it, check if repositories directory has correct permissions, it should be 770. You can set it with
<pre class="brush: bash; title: ; notranslate">chmod 770 /var/lib/gitolite/repositories/</pre>
</li>
<li>If Passenger insists, that we don't have or he can't see grit library (gem actually, as far as I know) even though we have it.<br />
<blockquote><p>
https://github.com/gitlabhq/grit.git (at master) is not checked out. Please run `bundle install` (Bundler::GitError)
</p></blockquote>
<p>I didn't have gem grit installed, do:</p>
<pre class="brush: bash; title: ; notranslate">
gem install grit
</pre>
<p>also it won't hurt to update all gems with:</p>
<pre class="brush: bash; title: ; notranslate">gem update</pre>
<p>Only resolution to this problem I have found is to run bundle again as a user who runs apache server: apache.Su into apache account with
<pre class="brush: bash; title: ; notranslate">su - apache</pre>
<p>and try:
<pre class="brush: bash; title: ; notranslate">gem install grit</pre>
<p>you'll get error:
<pre class="brush: bash; title: ; notranslate">You don't have write permissions into the /usr/lib/ruby/gems/1.9.1 directory.</pre>
<p>As root change it's ownership to apache user with:</p>
<pre class="brush: bash; title: ; notranslate">chown apache:root -R /usr/lib/ruby/gems</pre>
<p>I know that is not great resolution but it worked for me. If you'll happen to know better way - please let me know, so I can update this tutorial and my knowledge of course ;)</p>
<h4>Edit</h4>
<p>I found another solution (instead of changing permissions): after first</p>
<pre class="brush: bash; title: ; notranslate">bundle install</pre>
<p>edit Gemfile and in lines containing "git:" remove everything after first comma, for example:</p>
<pre class="brush: bash; title: ; notranslate">gem &quot;grit&quot;, :git =&gt; &quot;https://github.com/gitlabhq/grit.git&quot;</pre>
<p>should be</p>
<pre class="brush: bash; title: ; notranslate">gem &quot;grit&quot;</pre>
<p>then do again</p>
<pre class="brush: bash; title: ; notranslate">bundle install</pre>
<p>and now passenger shouldn't complain any more.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/archive-gitlab-installation-on-fedora-16-with-gitolite/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dnsmasq &#8211; serwer DNS i DHCP</title>
		<link>http://wasil.org/dnsmasq-serwer-dns-i-dhcp</link>
		<comments>http://wasil.org/dnsmasq-serwer-dns-i-dhcp#comments</comments>
		<pubDate>Sat, 14 May 2011 09:48:48 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Fedora]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=210</guid>
		<description><![CDATA[Dnsmasq jest prostym serwerem udostępniającym usługi DNS i DHCP dla sieci lokalnej ( LAN ) i jak informują jego twórcy będzie się świetnie spisywał w sieciach domowych jak również niedużych środowiskach firmowych, do mniej więcej 1000 stacji roboczych. Więcej informacji o nim na stronie autora: http://www.thekelleys.org.uk/dnsmasq/doc.html Ale po co? Dobre pytanie. Z reguły jeśli dorobiliśmy [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p style="padding-left: 60px;">Dnsmasq jest prostym serwerem udostępniającym usługi DNS i DHCP dla sieci lokalnej ( LAN ) i jak informują jego twórcy będzie się świetnie spisywał w sieciach domowych jak również niedużych środowiskach firmowych, do mniej więcej 1000 stacji roboczych. Więcej informacji o nim na stronie autora: <a href="http://www.thekelleys.org.uk/dnsmasq/doc.html" target="_blank">http://www.thekelleys.org.uk/dnsmasq/doc.html</a></p>
<ol>
<li>Ale po co?<br />
Dobre pytanie. Z reguły jeśli dorobiliśmy się już sieci lokalnej w domu, to poprzestajemy na poruszaniu się po niej albo za pomocą numerów IP komputerów albo za pomocą otoczenia lokalnego Windows i nazw stacji w grupie roboczej. To drugie jest dość wygodne, ale będzie działało tylko w sieciach z systemami operacyjnymi Windows, no może również z różnymi Unix'ami czy Linux'ami, ale to z kolei wymaga konfiguracji serwera Samba, co wychodzi poza zakres tego tekstu.<br />
Pomyślmy teraz jak pięknie by było gdyby zamiast numerów IP każdy komputer był rozpoznawany po swojej unikalnej nazwie, zupełnie jak na przykład strony internetowe. Dotyczyłoby to też drukarek sieciowych, routerów i innych urządzeń. To właśnie da nam dnsmasq. Pozwoli znajdywać za pomocą nazw wszystkie urządzenia sieciowe pobierające numery IP automatycznie poprzez DHCP lub dopisane statycznie do konfiguracji serwera.&nbsp;</p>
<p>Zamiast wpisywać szukając udziału sieciowego:</p>
<p><em>\\192.168.0.4\udzial</em></p>
<p>Wpiszemy:<br />
<em>\\nasz_serwer.domena\udzial</em></p>
<p>Łatwiej zapamiętać, prawda? Do tego jeśli się zmieni adres maszyny identyfikowanej jako "nasz_serwer" my nawet nie musimy tego wiedzieć, bo dnsmasq i tak nas do niego bezbłędnie pokieruje.</p>
<p>Skoro już wiemy po co nam takie cudo... zaczynajmy! :)</li>
<li>Instalacja<br />
Instalacja zależy od środowiska, w którym pracujemy, ja skupię się na środowiskach Linux, a konkretnie na dwóch najpopularniejszych systemach Fedora ( jak również Red Hat, Centos ) oraz Debian ( Ubuntu i podobne ). Do instalacji będą potrzebne uprawnienia root'a. Można albo się zalogować jako root, albo dopisać przed każdym poleceniem podawanym poniżej: <strong>sudo </strong><br />
na przykład: <strong>sudo yum update</strong><br />
&nbsp;</p>
<ul>
<li>Fedora<br />
należy wykonać polecenia:<br />
<strong>yum update</strong> ( na wszelki wypadek aktualizować pakiety w systemie )<br />
<strong>yum install dnsmasq&nbsp;</p>
<p></strong><strong> </strong><strong> </strong><strong> </strong><strong> </strong></li>
<li>Debian<br />
należy wykonać polecenia:<br />
<strong>aptitude update &amp;&amp; aptitude safe-upgrade</strong> ( na wszelki wypadek aktualizować pakiety w systemie )<br />
<strong>aptitude install dnsmasq<br />
</strong></li>
</ul>
</li>
<li>Plik konfiguracyjny nazywa się <strong>dnsmasq.conf</strong> i znajduje się w katalogu <strong>/etc</strong><br />
Dodatkowo dnsmasq korzysta z pliku <strong>/etc/hosts</strong> jako źródła informacji o hostach ze zdefiniowanymi stałymi adresami IP, to znaczy nie pobieranymi przez DHCP, oraz z pliku <strong>/etc/resolv.conf</strong> - stąd otrzymuje informacje na temat serwerów DNS, z których ma korzystać.<br />
Jest bardzo dobrze opisany za pomocą komentarzy, więc szczegółową instrukcję pominę, natomiast skupię się na kilku opcjach, które potrzebne są na początek.&nbsp;</p>
<ul>
<li><strong> domain-needed</strong> - oznacza, że dnsmasq nie będzie przekazywał dalej zapytań nie posiadających domeny w adresie</li>
<li><strong>bogus-priv</strong> - dnsmasq nie będzie przekazywał dalej adresów w nieroutowalnych zakresach adresowych</li>
<li><strong>interface=</strong>{<em>eth0,eth1,...</em>}  - jeśli mamy więcej niż jeden interfejs sieciowy to tutaj możemy powiedzieć dnsmasq, że ma nasłuchiwać jedynie na nim</li>
<li><strong>except-interface</strong>={<em>eth0,eth1,...</em>} tak samo jak porzednio, ale dnsmasq ma nasłuchiwać na wszystkich interfejsach oprócz podanego</li>
<li><strong>expand-hosts</strong> - ta zmienna mówi dnsmasq, że ma dodawać nazwę naszej domeny do nazw hostów i działa w połączeniu ze zmienną domain</li>
<li><strong>domain </strong>- informacja o nazwie naszej domeny</li>
<li><strong>dhcp-range=192.168.0.30,192.168.0.40,24h</strong> - aktywowanie serwera DHCP i ustawienie jego zakresu przydzielanych adresów na 192.168.0.30-40 i czasu lease ( wynajmu ) na 24 godziny. Jeśli mamy dwie podsieci ( vLAN lub dwie karty sieciowe ) to możemy zdefiniować tę zmienną dwukrotnie, pod warunkiem, że dnsmasq jest skonfigurowany do nasłuchiwania na obu interfejsach</li>
<li><strong>dhcp-host=00:11:22:33:44:55,192.168.0.36</strong> - definicja hosta, który przy każdym połączeniu ma posiadać ten sam numer IP. Identyfikacja hosta odbywa się za pomocą adresu sprzętowego jego karty sieciowej MAC. W naszym przypadku host o adresie MAC 00:11:22:33:44:55 będzie zawsze otrzymywał adres 192.168.0.36</li>
</ul>
</li>
<li>Ustawienie tych wartości pozwoli nam rozpocząć używanie dnsmasq w naszej sieci i cieszenie się nazwami zamiast adresów IP.</li>
<li>Dodatkowe informacje
<ul>
<li>wpisy w <strong>/etc/hosts</strong> wyglądają następująco:<br />
<strong>adres_IP    nazwa_hosta</strong><br />
na przykład:  <em>192.168.0.21    serwer</em></li>
<li>wpisy w <strong>/etc/resolv.conf</strong> mają postać:<br />
<strong>nameserver   adres_IP</strong><br />
na przykład: nameserver 194.204.152.34</li>
<li>w przypadku błędów <strong>dnsdomainname</strong> przy restarcie usługi dnsmasq należy sprawdzić plik <strong>/etc/hosts</strong>.<br />
Wpis dla <em>127.0.0.1</em> powinien zawierać oprócz localhost wpis <em>nasz_serwer.nasza_domena</em>, na przykład:<br />
127.0.0.1   localhost   serwer.domena.com<br />
Po tym może być potrzebny restart systemu lub usług sieciowych.</li>
<li>w przypadku Fedory i podobnych w <strong>/etc/sysconfig/network</strong> powinien się znajdować wpis:<br />
<em>HOSTNAME=nasz_serwer.nasza_domena.com</em></li>
<li>aby hosty z adresami IP zdefiniowanymi statycznie również mogły korzystać z zalet dnsmasq należy zamienić ich dotychczasowe adresy serwerów DNS na adres IP naszego serwera, na którym jest zainstalowany dnsmasq.</li>
</ul>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/dnsmasq-serwer-dns-i-dhcp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konwersja statycznej strony HTML do WordPress</title>
		<link>http://wasil.org/konwersja-statycznej-strony-html-do-wordpress</link>
		<comments>http://wasil.org/konwersja-statycznej-strony-html-do-wordpress#comments</comments>
		<pubDate>Sun, 24 Apr 2011 18:57:39 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[strony www]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=188</guid>
		<description><![CDATA[Coraz częściej pojawia się potrzeba konwersji działającej, statycznej strony napisanej w czystym HTML'u lub za pomocą prostych skryptów PHP, do postaci bardziej skomplikowanej, ale dającej dużo większe możliwości. Mam tutaj na myśli systemy CMS ( Content Management System ). Opiszę taką konwersję na przykładzie WordPress'a. Wstęp Typowa statyczna strona jest napisana w HTML'u. Czasem nie [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Coraz częściej pojawia się potrzeba konwersji działającej, statycznej strony napisanej w czystym HTML'u lub za pomocą prostych skryptów PHP, do postaci bardziej skomplikowanej, ale dającej dużo większe możliwości. Mam tutaj na myśli systemy CMS ( Content Management System ). Opiszę taką konwersję na przykładzie WordPress'a.</p>
<ol>
<li>Wstęp<br />
Typowa statyczna strona jest napisana w HTML'u. Czasem nie jest do końca statyczna, bo ma powklejane tu i tam fragmenty kodu PHP lub JavaScript. Na potrzeby tego tutoriala przyjmę jednak, że mamy do czynienia ze stroną stworzoną za pomocą jedynie HTML'a.<br />
Taka strona składa się najczęściej z mniej więcej takiej struktury plików, która składa się na całość, którą od tej pory będę w skrócie nazywał template'em:&nbsp;</p>
<ul>
<li>index.html</li>
<li>style.css</li>
<li>katalog z grafiką, np.: img</li>
</ul>
<p>Plik index.html zawiera całą treść strony, wszystkie tagi HTML oraz odniesienia do lokalizacji pliku z kaskadowymi stylami ( style.css ) oraz lokalizacją grafik. To on jest dla nas najbardziej interesujący i w nim będzie się działa cała "magia" :)</li>
<li>Dla ułatwienia i lepszej wizualizacji konwersji od tej pory będę przedstawiał całą operację na konkretnym przykładzie. Proponuję użycie jako wyjściowego template'a któregoś z dostępnych na stronie Open Source Web Design ( <a title="www.oswd.org" href="http://www.oswd.org/" target="_blank">www.oswd.org</a> ) na przykład: <a href="http://www.oswd.org/design/preview/id/3551" target="_blank">LoadFoO [V2]</a></li>
<li>Po ściągnięciu i rozpakowaniu tego template'a widać takie pliki i katalogi:
<ul>
<li>css  ( katalog zawierający plik style.css - definicję stylów kaskadowych )</li>
<li>img ( katalog zawierający pliki graficzne )</li>
<li>js ( katalog zawierający pliki JavaScripts )</li>
<li>favicon.ico ( plik z ikoną naszej strony pokazującą się w przeglądarce )</li>
<li>index.html ( szkielet template'u, tak jak opisywałem wcześniej )</li>
</ul>
</li>
<li>CSS<br />
Konwencja struktury plików dla template'ów w Worpdress wymaga, aby plik style.css znajdował się w głównym katalogu, tzn tam gdzie index.html , więc przenieśmy go teraz z katalogu css o jeden poziom wyżej. Pusty obecnie katalog css można usunąć, żeby nie zaśmiecał przestrzeni.&nbsp;</p>
<p>Plik style.css jest jednocześnie opisem template'a, a konkretnie jego nagłówek, który wygląda np tak:</p>

<div class="wp_codebox"><table><tr id="p18823"><td class="code" id="p188code23"><pre class="css" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
Theme Name: nazwa_template'a
Theme URI: ścieżka URI
Description: Opis
Version: wersja, np: 1.0
Author: twoje_imię
Author URI: twój adres WWW
*/</span></pre></td></tr></table></div>

<p>Umieść ten nagłówek przed wszystkimi definicjami stylów w style.css.</p>
<p>W naszym przypadku pamiętaj o zmianie ścieżek w pliku css, aby wskazywały na katalog img. Teraz jest to na przykład: ../img/jakis_plik.jpg trzeba je wszystkie zmienić na img/jakis_plik.jpg ( przez usunięcie ../ )</li>
<li>Opcjonalnie, ale zalecałbym to, można stworzyć obraz - miniaturę template'a. Powinien mieć rozmiar 300x225 pikseli oraz format PNG. Nazwa musi brzmieć: screenshot.png i musi byc umieszczony tam gdzie plik style.css.</li>
<li>Cięcie/Gięcie<br />
Głównym plikiem naszego template'a jest index.php, ale skąd go wziąć? Zmienić rozszerzenie pliku index.html na php<br />
To jednak nie wystarczy. Trzeba go teraz odrobinę pociąć na kawałki, w najprostszym wypadku będą to pliki:<br />
header.php - plik zawierający definicje nagłówka strony<br />
footer.php - plik zawierający stopkę strony<br />
my dodamy jeszcze sidebar.php&nbsp;</p>
<p>Nazwy tych plików są ważne, ponieważ dzięki temu WordPress sam znajdzie te pliki, bez potrzeby ich definiowania. W kolejnych punktach opiszę każdy z nich.</p>
<p>Plik index.php zawiera jeszcze definicje tak zwanego "loop" czyli takiej "karuzeli", która pokazuje odpowiednie posty/wpisy na stronie głównej. O tym również później.</li>
<li>header.php<br />
Najpierw przykładowy plik header.php:&nbsp;</p>

<div class="wp_codebox"><table><tr id="p18824"><td class="code" id="p188code24"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html <span style="color: #000000; font-weight: bold;">&lt;?php</span> language_attributes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>meta charset<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;?php bloginfo( 'charset' ); ?&gt;&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>phpglobal <span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$paged</span><span style="color: #339933;">;</span>
&nbsp;
wp_title<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'|'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'right'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
bloginfo<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'name'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$site_description</span> <span style="color: #339933;">=</span> get_bloginfo<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'description'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'display'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$site_description</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span> is_home<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> is_front_page<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot; | <span style="color: #006699; font-weight: bold;">$site_description</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$paged</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$page</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">2</span> <span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">' | '</span> <span style="color: #339933;">.</span> <a href="http://www.php.net/sprintf"><span style="color: #990000;">sprintf</span></a><span style="color: #009900;">&#40;</span> __<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Page %s'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'twentyten'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/max"><span style="color: #990000;">max</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$paged</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>link rel<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;profile&quot;</span> href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://gmpg.org/xfn/11&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>link rel<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;stylesheet&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/css&quot;</span> media<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;all&quot;</span> href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;?php bloginfo( 'stylesheet_url' ); ?&gt;&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>link rel<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pingback&quot;</span> href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;?php bloginfo( 'pingback_url' ); ?&gt;&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> is_singular<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> get_option<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'thread_comments'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
wp_enqueue_script<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'comment-reply'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
wp_head<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>body <span style="color: #000000; font-weight: bold;">&lt;?php</span> body_class<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Jest on pełny znaczników w języku PHP, które rozpoznaje WordPress po czym wypełnia je zawartością dynamiczną, np:</p>
<p><?php bloginfo( 'stylesheet_url' ); ?> opisuje lokalizację pliku style.css ( nie definiujemy nazwy, bo jest on domyślny dla WordPress'a )</p>
<p>wp_head(); powoduje wyświetlenie nagłówka HTML na stronie<br />
pozostałe zmienne są w większości przypadków dość jasno opisane przez swoje nazwy.</li>
<li>footer.php<br />
Przykładowa zawartość pliku footer.php:</p>

<div class="wp_codebox"><table><tr id="p18825"><td class="code" id="p188code25"><pre class="html" style="font-family:monospace;">﻿&lt;div id=&quot;foot&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;?php wp_footer(); ?&gt;
&lt;/body&gt;
&lt;/html&gt;&amp;nbsp;</pre></td></tr></table></div>

<p>Zawiera on przeważnie definicję stopki zawartej jako jakiś element
<div></div>
<p> oraz wywołanie PHP: wp_footer(); - zawiera ono w sobie zmienne potrzebne przez wiele wtyczek WordPress'a, głównie odnoszące się do kodu JavaScript.</li>
<li>sidebar.php<br />
W nim umieścimy zawartość prawej kolumny naszego template'a, czyli w naszym przypadku trzeba wyciąć następujący kod z index.php i wkleić do sidebar.php:</p>

<div class="wp_codebox"><table><tr id="p18826"><td class="code" id="p188code26"><pre class="html" style="font-family:monospace;">&lt;ul id=&quot;nav&quot;&gt;
&lt;li&gt;&lt;a href=&quot;#Home&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#Archive&quot;&gt;Archive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#Link&quot;&gt;Links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#download&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#support&quot;&gt;Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#contact&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h2 style=&quot;margin-top:17px&quot;&gt;Recent Entries&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries1&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries2&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries3&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries4&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries5&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</pre></td></tr></table></div>

</li>
<li>index.php<br />
I znowu wracamy do głównego pliku naszego template'a: index.php. Zawiera on w sobie całą resztę kodu naszej strony, oczywiście po wycięciu z niego tych fragmentów, które zawarte są w pozostałych plikach PHP.&nbsp;</p>
<p>Nagłówek będzie zdefiniowany w header.php, a więc z index.php można usunąć wszystko od samej góry do znacznika <body> z nim włącznie. Zamiast tego co wytniemy trzeba wstawić:</p>

<div class="wp_codebox"><table><tr id="p18827"><td class="code" id="p188code27"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> get_header<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Kod prawej kolumny już przenieśliśmy do sidebar.php, teraz jest puste miejsce pomiędzy</p>

<div class="wp_codebox"><table><tr id="p18828"><td class="code" id="p188code28"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;right&quot;&gt; i &lt;/div&gt;</pre></td></tr></table></div>

<p>. Trzeba je wypełnić kodem PHP wordpress:</p>

<div class="wp_codebox"><table><tr id="p18829"><td class="code" id="p188code29"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> get_sidebar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Stopkę strony utworzymy poprzez usunięcie wszystkiego poczynając od ﻿</p>

<div class="wp_codebox"><table><tr id="p18830"><td class="code" id="p188code30"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;foot&quot;&gt;</pre></td></tr></table></div>

<p> do końca i zastąpienie przez:</p>

<div class="wp_codebox"><table><tr id="p18831"><td class="code" id="p188code31"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> get_footer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Teraz po otworzeniu panelu sterowania naszej strony WordPress i wejściu w menu Motywy zobaczymy nowy motyw o nazwie jaką mu nadaliśmy, po jego aktywacji zobaczymy nowy template w akcji. Na razie jednak nie wszystko działa tak jak powinno. Na przykład menu, o tym za chwilę.</li>
<li>Menu stron.<br />
W pliku index.php zmień kod pomiędzy:</p>

<div class="wp_codebox"><table><tr id="p18832"><td class="code" id="p188code32"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;menu&quot;&gt;&lt;ul&gt; i &lt;/ul&gt;&lt;/div&gt;</pre></td></tr></table></div>

<p> na kod PHP WordPress:&nbsp;</p>

<div class="wp_codebox"><table><tr id="p18833"><td class="code" id="p188code33"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_list_pages<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sort_column=menu_order&amp;amp;title_li='</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>W tym przypadku dodałem zmienną sort_column=menu_order aby menu korzystało z kolejności jaką mu narzucimy w panelu sterowania oraz title_li=  ( puste), ponieważ nie chcemy aby pokazywał się tytuł "Menu Główne".</p>
<p>Po odświeżeniu strony zobaczymy już Główne menu zawierające pozycje zdefiniowane przez nas w panelu administracyjnym. Reszta na razie nie jest jeszcze aktywna.</li>
<li>Dodatkowe menu w panelu bocznym.<br />
Dodanie drugiego menu pozwoli na stworzenie drugiego menu, zawierającego inne elementy niż głowne. Najpierw należy stworzyć plik functions.php o zawartości:&nbsp;</p>

<div class="wp_codebox"><table><tr id="p18834"><td class="code" id="p188code34"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> add_theme_support<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'menus'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>co doda pozycję "Menu" w dziale "Wygląd" w panelu administracyjnym, w którym to miejscu będzie można zdefiniować i dodać kolejne menu do naszej strony.</p>
<p>W sidebar.php zamień kod:</p>

<div class="wp_codebox"><table><tr id="p18835"><td class="code" id="p188code35"><pre class="html" style="font-family:monospace;">&lt;li&gt;&lt;a href=&quot;#Home&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#Archive&quot;&gt;Archive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#Link&quot;&gt;Links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#download&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#support&quot;&gt;Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#contact&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt;</pre></td></tr></table></div>

<p>na:</p>

<div class="wp_codebox"><table><tr id="p18836"><td class="code" id="p188code36"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_nav_menu<span style="color: #009900;">&#40;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'sort_column'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'menu_order'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>gdzie sort_column wymusza kolejność w menu taką jak w panelu administracyjnym.</p>
<p>Dodatkowo, żeby wszystko się tak samo wyświetlało dodaj do style.css następującą linijkę:</p>

<div class="wp_codebox"><table><tr id="p18837"><td class="code" id="p188code37"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#nav</span> ul <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">list-style-type</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>list-style-image<span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>gdzieś w okolicy definicji #nav</p>
<p>Po dodaniu elementów z poziomu panelu pojawią się one w wybranym przez nas miejscu w panelu bocznym.</li>
<li>Panel boczny po raz drugi: box<br />
W dolnej części panelu bocznego znajduje się box zawierający linki do ostatnich wpisów, aby go zrealizować dynamicznie zamień kod:&nbsp;</p>

<div class="wp_codebox"><table><tr id="p18838"><td class="code" id="p188code38"><pre class="html" style="font-family:monospace;">&lt;div class=&quot;box&quot;&gt;
&lt;h2 style=&quot;margin-top:17px&quot;&gt;Recent Entries&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries1&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&nbsp;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries2&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries3&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries4&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Recent Entries5&lt;/a&gt; &lt;i&gt;01 Des 06&lt;/i&gt;&lt;/li&gt;
&nbsp;
&lt;/ul&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>na:</p>

<div class="wp_codebox"><table><tr id="p18839"><td class="code" id="p188code39"><pre class="html" style="font-family:monospace;">&lt;div class=&quot;box&quot;&gt;
&lt;h2 style=&quot;margin-top:17px&quot;&gt;Recent Entries&lt;/h2&gt;
&lt;ul&gt;
&lt;?php
global $post;
$args = array( 'numberposts' =&gt; 5, 'offset'=&gt; 0, 'orderby'=&gt;'post_date');
$myposts = get_posts( $args );
foreach( $myposts as $post ) :    setup_postdata($post); ?&gt;
&lt;li&gt;&lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt; &lt;/a&gt; &lt;i&gt; &lt;?php the_date(); ?&gt;&lt;/i&gt;&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>To spowoduje wyświetlenie linków do 5-ciu ostatnich postów, w kolejności chronologicznej ich publikacji.</li>
<li>Loop<br />
Jest to taka karuzela, czyli sposób w jaki wyświetlane są posty na głównej stronie, jeśli nie jest ona statyczna.<br />
Przykładowy kod, jaki użyję w tym template'cie:<br />
zamiast:&nbsp;</p>

<div class="wp_codebox"><table><tr id="p18840"><td class="code" id="p188code40"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;left&quot;&gt;
&lt;h2&gt;Welcome to LoadFoO [V1]&lt;/h2&gt;
&lt;p&gt;Text Content Text &lt;a href=&quot;#&quot;&gt;Content Text&lt;/a&gt; Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ul-li test.&lt;/li&gt;
&nbsp;
&lt;li&gt;ul-li test.&lt;/li&gt;
&lt;li&gt;ul-li test.&lt;/li&gt;
&lt;li&gt;ul-li test.&lt;/li&gt;
&lt;li&gt;ul-li test.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Functionality or performance&lt;/h2&gt;
&nbsp;
&lt;p&gt;Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content Text Content.
&lt;/p&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>użyj:</p>

<div class="wp_codebox"><table><tr id="p18841"><td class="code" id="p188code41"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;left&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> have_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> have_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> the_post<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #339933;">&lt;</span>h2<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;?php the_permalink() ?&gt;&quot;</span> rel<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;bookmark&quot;</span> title<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Permanent Link to &lt;?php the_title_attribute(); ?&gt;&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php the_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;&lt;/</span>h2<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;?php</span> the_content<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>p<span style="color: #339933;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endwhile</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">else</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">&gt;</span>Brak postów<span style="color: #339933;">.&lt;/</span>p<span style="color: #339933;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

</li>
<li>Szablon wpisu<br />
Musimy jeszcze zdefiniować szablon wpisu ( Post ), a robi się to w pliku:</li>
<li>Drobne  poprawki.<br />
a) W przypadku tego tematu postanowiłem usunąć kod odpowiadający za powiększanie/pomniejszanie tekstu:&nbsp;</p>

<div class="wp_codebox"><table><tr id="p18842"><td class="code" id="p188code42"><pre class="html" style="font-family:monospace;">&lt;div style=&quot;float: right;&quot;&gt;&lt;a href=&quot;javascript:ts('body',1)&quot;&gt;[+]&lt;/a&gt; | &lt;a
href=&quot;javascript:ts('body',-1)&quot;&gt;[-]&lt;/a&gt;&lt;/div&gt;</pre></td></tr></table></div>

<p>b) dodanie tytułu strony w górnej części poprzez zamianę w index.php:</p>
<p>LoadFoO [V2]</p>
<p>na:</p>

<div class="wp_codebox"><table><tr id="p18843"><td class="code" id="p188code43"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'name'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>c) mała zmiana w style.css aby nagłówki wpisów wyglądały tak jak w oryginale:</p>
<p>dodaj:</p>

<div class="wp_codebox"><table><tr id="p18844"><td class="code" id="p188code44"><pre class="css" style="font-family:monospace;">h2 a <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#9F9F9F</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>To by było na tyle, no przynajmniej na początek. Teraz cały dalszy rozwój i życie template'a zależy od Ciebie drogi czytelniku :)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/konwersja-statycznej-strony-html-do-wordpress/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zadania Cron wszystkich użytkowników</title>
		<link>http://wasil.org/zadania-cron-wszystkich-uzytkownikow</link>
		<comments>http://wasil.org/zadania-cron-wszystkich-uzytkownikow#comments</comments>
		<pubDate>Sun, 20 Jun 2010 21:22:06 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[cron]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=168</guid>
		<description><![CDATA[Czasem pojawia się potrzeba wyświetlenia zadań Cron wszystkich użytkowników w systemie. for user in $&#40;cut -f1 -d: /etc/passwd&#41;; do crontab -u $user -l; done A dla konkretnego użytkownika można zastosować polecenie: for user in $&#40;cut -f1 -d: /etc/passwd &#124; grep USER&#41;; do crontab -u $user -l; done gdzie, USER = nazwa szukanego użytkownika]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Czasem pojawia się potrzeba wyświetlenia zadań Cron wszystkich użytkowników w systemie.</p>

<div class="wp_codebox"><table><tr id="p16847"><td class="code" id="p168code47"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> user <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-f1</span> -d: <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span> crontab  <span style="color: #660033;">-u</span> <span style="color: #007800;">$user</span>  -l; <span style="color: #000000; font-weight: bold;">done</span></pre></td></tr></table></div>

<p>A dla konkretnego użytkownika  można zastosować polecenie:</p>

<div class="wp_codebox"><table><tr id="p16848"><td class="code" id="p168code48"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> user <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-f1</span> -d: <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> USER<span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span> crontab  <span style="color: #660033;">-u</span> <span style="color: #007800;">$user</span>  -l; <span style="color: #000000; font-weight: bold;">done</span></pre></td></tr></table></div>

<p>gdzie, USER = nazwa szukanego użytkownika</p>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/zadania-cron-wszystkich-uzytkownikow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Squid transparent proxy</title>
		<link>http://wasil.org/squid-transparent-proxy</link>
		<comments>http://wasil.org/squid-transparent-proxy#comments</comments>
		<pubDate>Sun, 20 Jun 2010 17:23:40 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=148</guid>
		<description><![CDATA[Squid ( http://www.squid-cache.org ) jest oprogramowaniem umożliwiającym filtrowanie ruchu sieciowego, ale nie był to początkowy zamysł jego twórców. Z założenia Squid miał umożliwić tworzenie pamięci podręcznej treści ( grafik itp. ) pobieranych z Internetu przez użytkowników w czasie serfowania po nim. Jedną z możliwości oferowanych przez Squid jest filtrowanie stron jakie moga odwiedzać użytkownicy znajdujący [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Squid ( <a href="http://www.squid-cache.org/" target="_blank">http://www.squid-cache.org</a> ) jest oprogramowaniem umożliwiającym filtrowanie ruchu sieciowego, ale nie był to początkowy zamysł jego twórców. Z założenia Squid miał umożliwić tworzenie pamięci podręcznej treści ( grafik itp. ) pobieranych z Internetu przez użytkowników w czasie serfowania po nim.</p>
<p>Jedną z możliwości oferowanych przez Squid jest filtrowanie stron jakie moga odwiedzać użytkownicy znajdujący się w naszej sieci.</p>
<p>Więc po kolei :)</p>
<p>Zwyczajowo, to znaczy domyślnie, Squid korzysta z portu 3128, ale na nasze potrzeby to nie jest wystarczające. Dlaczego? Oznacza to, że jak już wszystko skonfigurujemy, ustawimy i będzie działało to i tak niewiele nam po tym, bo użytkownicy naszej sieci będą musieli dobrowolnie ustawić w swoich przeglądarkach  ustawienia adresu naszego serwera Squid oraz portu. Przyznam szczerze, że jakoś nie widzę u nich zachwytu, kiedy zorientują się, że owocuje to niczym więcej poza ograniczeniami nałożonymi przez nas. I tutaj nadchodzi czas na wytłumaczenie drugiego słowa z tytułu niniejszego artykułu: transparent. Jest to magiczne słowo oznaczające "przezroczysty". Co to oznacza dla nas? W największym uproszczeniu cały ruch sieciowy WWW zostanie domyślnie przekierowany tak, aby przechodził przez nasz serwer proxy Squid i to w dodatku bez potrzeby żadnej konfiguracji po stronie użytkowników, a co więcej - nie będą mogli nic na to poradzić :)</p>
<p>Oczywiście można ustawić proxy korzystając wyłącznie z domyślnego trybu Squid'a i wymusić na użytkownikach korzystanie z niego ( czyli przymus konfiguracji przeglądarki ) na zasadzie: nie skonfigurujesz - nie masz dostępu do stron WWW. Uważam, że takie rozwiązanie jest nieeleganckie i dużo bardziej kłopotliwe w praktyce. O wiele łatwiej sterować dostępem centralnie, na naszym serwerze, w konfiguracji Squid'a.</p>
<p>Po tym przydługim wstępie zabieramy się do pracy :)</p>
<p>1. Usługę Squid proxy stawiamy najlepiej na serwerze pełniącym rolę bramy ( ang. Gateway ) ale nie koniecznie. Na potrzeby tego artykułu przyjmę, że będzie ona zainstalowana właśnie na serwerze - bramie. Dodam, że</p>
<p>2. Instalacja odbywa się w sposób standardowy, z paczek binarnych właściwych dla naszej dystrybucji Linux'a lub ewentualnie ( czego osobiście nie praktykuję ) dla Windows'a. Instalacja opisana jest dokładnie <a href="http://wiki.squid-cache.org/SquidFaq/BinaryPackages" target="_blank">tutaj</a> i nie wchodzi w zakres tego artykułu, chyba, że zaistnieje taka potrzeba, żeby go o te informacje wzbogacić.</p>
<p>3. Konfiguracja usługi Squid odbywa się poprzez edycje pliku /etc/squid/squid.conf ( dla Debian'a, lub analogicznie w przypadku innych dystrybucji Linux'a ).</p>
<p>UWAGA: <strong>opcje są wczytywane po  kolei od początku pliku konfiguracyjnego do końca!</strong></p>
<p>Jest to ważne, ponieważ można się łatwo pogubić i doszukiwać przyczyny nie działania zdefiniowanych przez nas filtrów, ale to wyjdzie w praktyce.</p>
<p>Najpierw należy definiować zasady szczegółowe, a potem ogólne, ponieważ Squid bierze pod uwagę pierwszą regułę jaką napotka i nie szuka dalej, więc jeśli najpierw umieścimy pozwolenie na dostęp dla wszystkich, a potem zasady szczegółowe, to zostaną one zignorowane, ponieważ Squid "zadowoli" się regułką ogólną, którą napotkał wcześniej w pliku konfiguracyjnym.</p>
<p>4. Pierwszą rzeczą jaką należy ustawić jest kto z naszej sieci będzie miał dostęp do usługi Squid, czyli inaczej mówiąc czyj ruch będzie filtrowany i kto nie zostanie zablokowany całkowicie :)</p>

<div class="wp_codebox"><table><tr id="p14855"><td class="code" id="p148code55"><pre class="bash" style="font-family:monospace;">acl moja_siec src X.X.X.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span>
http_access allow moja_siec</pre></td></tr></table></div>

<p>gdzie X.X.X.0/24 to nasza sieć, np. 10.0.1.0/24</p>
<p>Ten zapis pozwoli wszystkim komputerom w naszej sieci na korzystanie ze Squid'a. To nie do końca jest nasz cel, ponieważ na tym etapie konfiguracji wszystko będzie śmigało bez żadnych ograniczeń w tę i z powrotem bez żadnej kontroli.</p>
<p>5. Teraz pora na kilka ograniczeń :)</p>
<p>Najlepiej ustawiać ograniczenia za pomocą odpowiednich plików konfiguracyjnych z listami domen WWW, np:</p>
<p>domeny zabronione: /etc/squid/domeny_zabronione</p>
<p>domeny w tym pliku umieszczamy po jednej w każdej linijce.</p>
<p>w pliku konfiguracyjnym Squid przed ( czyli wyżej, jak kto woli ) poprzednimi wpisami definiującymi dostęp dla całej sieci, dodajemy linijki:</p>

<div class="wp_codebox"><table><tr id="p14856"><td class="code" id="p148code56"><pre class="bash" style="font-family:monospace;">acl domeny_zabronione dstdomain <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;/etc/squid/domeny_zabronione&quot;</span>
http_access denydomeny_zabronione</pre></td></tr></table></div>

<p>to spowoduje, że żaden komputer w naszej sieci nie będzie mógł otworzyć stron zdefiniowanych w tym pliku.</p>
<p>6. A teraz troszkę dokładniejszej konfiguracji :)</p>
<p>Załóżmy, że mamy w sieci jakiś komputer, który ma mieć inne zasady dostępu do sieci niż pozostałe, np. nie móc wejść na konkretną stronę, powiedzmy www.strona1.com, wtedy jeszcze wcześniej niż poprzednia definicja należy dodać:</p>

<div class="wp_codebox"><table><tr id="p14857"><td class="code" id="p148code57"><pre class="bash" style="font-family:monospace;">acl blokowany_komputer src X.X.X.21
&nbsp;
acl lista_domen dstdomain <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;/etc/squid/lista_domen&quot;</span>
&nbsp;
http_access deny blokowany_komputer lista_domen</pre></td></tr></table></div>

<p>a adres www.strona1.com umieścić w pliku /etc/squid/lista_domen</p>
<p>i już :)</p>
<p>przypominam jeszcze raz o kolejności wpisów w pliku konfiguracyjnym Squid'a.</p>
<p>7. Ostatnie szlify ( prawie )</p>
<p>Aby sprawić by Squid zachowywał się jako transparent, czyli przezroczysty należy dopisać jeszcze te opcje:</p>

<div class="wp_codebox"><table><tr id="p14858"><td class="code" id="p148code58"><pre class="bash" style="font-family:monospace;">http_port 127.0.0.1:<span style="color: #000000;">3128</span> transparent
http_port X.X.X.X:<span style="color: #000000;">3128</span>  transparent</pre></td></tr></table></div>

<p>gdzie X.X.X.X jest adresem naszego serwera, na którym zainstalowany jest Squid</p>
<p>8. Teraz już naprawdę ostatnie ustawienia :)</p>
<p>Pozostało ustawienie reguły iptables, tak aby kierowała cały ruch z portu 80 i 443, domyślnych dla stron WWW, na port 3128 Squid'a.</p>
<p>W moim przypadku trzeba skonfigurować ShoreWall, który zarządza regułami iptables:<br />
w /etc/shorewall/rules</p>

<div class="wp_codebox"><table><tr id="p14859"><td class="code" id="p148code59"><pre class="bash" style="font-family:monospace;">ACCEPT	<span style="color: #007800;">$FW</span>	net	tcp	www
REDIRECT	loc	<span style="color: #000000;">3128</span>	tcp	www</pre></td></tr></table></div>

<p>w przypadku zwykłego iptables:</p>

<div class="wp_codebox"><table><tr id="p14860"><td class="code" id="p148code60"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-i</span> eth0 <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> <span style="color: #660033;">-j</span> REDIRECT <span style="color: #660033;">--to-port</span> <span style="color: #000000;">3128</span>
&nbsp;
iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-i</span> eth0 <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">443</span> <span style="color: #660033;">-j</span> REDIRECT <span style="color: #660033;">--to-port</span> <span style="color: #000000;">3128</span></pre></td></tr></table></div>

<p>9. No i restart usługi: /etc/init.d/squid restart ( lub analogicznie dla innych dystrybucji )</p>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/squid-transparent-proxy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iptables i blokowanie stron WWW</title>
		<link>http://wasil.org/iptables-i-blokowanie-stron-www</link>
		<comments>http://wasil.org/iptables-i-blokowanie-stron-www#comments</comments>
		<pubDate>Mon, 28 Dec 2009 23:46:12 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[strony www]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=130</guid>
		<description><![CDATA[Dzisiaj zajmiemy się kwestią czasem bardzo potrzebną, to znaczy blokowaniem użytkownikom sieci lokalnej dostępu do konkretnych serwisów internetowych. Chodzi o sytuację, kiedy chcemy zablokować możliwość "wchodzenia" tylko na niektóre strony a nie odwrotnie, to znaczy zezwolić tylko na niektóre, a zablokować domyślnie wszystkie. Dodatkowym założeniem naszego projektu będzie to, że ruch zostanie przekierowany i użytkownik [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Dzisiaj zajmiemy się kwestią czasem bardzo potrzebną, to znaczy blokowaniem użytkownikom sieci lokalnej dostępu do konkretnych serwisów internetowych. Chodzi o sytuację, kiedy chcemy zablokować możliwość "wchodzenia" tylko na niektóre strony a nie odwrotnie, to znaczy zezwolić tylko na niektóre, a zablokować domyślnie wszystkie.</p>
<p>Dodatkowym założeniem naszego projektu będzie to, że ruch zostanie przekierowany i użytkownik zamiast trafić na stronę typu chomikuj.pl trafi na inną, zdefiniowaną przez nas, np. google.pl lub naszą stronę firmową.</p>
<p>Można to osiągnąć za pomocą tablicy PREROUTING w iptables:</p>

<div class="wp_codebox"><table><tr id="p13063"><td class="code" id="p130code63"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">-s</span> JAKAŚ_SIEĆ_LOKALNA \
<span style="color: #660033;">-d</span> ADRES_DOCELOWY <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> ADRES_PRZEKIEROWANIA:<span style="color: #000000;">80</span></pre></td></tr></table></div>

<p>i teraz tak:</p>
<p>JAKAŚ_SIEĆ_LOKALNA - nasza siec lokalna, np. 192.168.1.0/24<br />
ADRES_DOCELOWY - adres IP strony, na która chce wejść użytkownik<br />
ADRES_PRZEKIEROWANIA - adres IP, na jaki dostanie się użytkownik w wyniku działania naszej regułki</p>
<p>Wszystko pięknie i w ogóle, ale jak to zrobić jeśli adres, np rapidshare.com ma więcej niż jeden adres IP? tutaj z pomocą przychodzi BASH i skrypt w nim napisany, który wykonuje 2 rzeczy:</p>
<ol>
<li>zamienia adres domeny ( taki słowny ) na adres IP ( lub więcej adresów, jeśli takowe występują ). Czyni tę magię za pomocą polecenia host -t a NAZWA_DOMENY  oraz pętli FOR</li>
<li>dla każdego odnalezionego adresu stosuje regułkę, którą opisałem wcześniej, również za pomocą pętli FOR</li>
</ol>
<p>Żeby Was nie męczyć postanowiłem taki skrypt w BASH'u przygotować. Nie jest może perfekcyjny, ale z pewnością spełnia swoje przeznaczenie i jest wygodny w użyciu :) ( dla chętnych skrypt można ściągnąć <a title="skrypt blokowania stron" href="http://wasil.org/wp-content/uploads/2009/12/blokowanie_stron.txt" target="_blank">tutaj</a> ). Skrypt zamieszczam do wglądu poniżej, ale radzę nie kopiować ( albo robić to rozważnie), ponieważ mogą powstać nieścisłości wynikające z operacji kopiuj/wklej...</p>

<div class="wp_codebox"><table><tr id="p13064"><td class="line_numbers"><pre>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
</pre></td><td class="code" id="p130code64"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">TRYB</span>=<span style="color: #007800;">$1</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#zmienne skryptu</span>
<span style="color: #007800;">SIEC</span>=<span style="color: #ff0000;">&quot;192.168.1.0/24&quot;</span> <span style="color: #666666; font-style: italic;">#siec lokalna, ktora ma nie meic dostepu do nizej wymienionych stron</span>
<span style="color: #007800;">PORT</span>=<span style="color: #ff0000;">&quot;80&quot;</span>
<span style="color: #666666; font-style: italic;">#port 80 = WWW</span>
&nbsp;
<span style="color: #007800;">PRZEKIEROWANIE_NA</span>=<span style="color: #ff0000;">&quot;209.85.135.147&quot;</span> <span style="color: #666666; font-style: italic;">#ustawilem domyslne przekierowanie na strone Google</span>
<span style="color: #007800;">PORT_NA</span>=<span style="color: #ff0000;">&quot;80&quot;</span> <span style="color: #666666; font-style: italic;">#jak wyzej</span>
<span style="color: #007800;">LISTA_STRON</span>=<span style="color: #ff0000;">&quot;chomikuj.pl wrzuta.pl rapidshare.com megaupload.com&quot;</span> <span style="color: #666666; font-style: italic;">#lista oddzielona spacjami</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#domyslnie nie sa wyswietlane reguly w czasie dzialania programu</span>
<span style="color: #007800;">VERBOSE</span>=<span style="color: #ff0000;">&quot;0&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #007800;">VERBOSE</span>=<span style="color: #007800;">$2</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #007800;">$TRYB</span> <span style="color: #000000; font-weight: bold;">in</span>
<span style="color: #ff0000;">&quot;on&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$LISTA_STRON</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #000000; font-weight: bold;">for</span> STRONY <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #800000;">${LISTA_STRON}</span>; <span style="color: #000000; font-weight: bold;">do</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VERBOSE</span>&quot;</span> = <span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$STRONY</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #007800;">ADRESY</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span>host <span style="color: #660033;">-t</span> a <span style="color: #007800;">$STRONY</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{ printf &quot;%s &quot;, $4 }'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$ADRESY</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #000000; font-weight: bold;">for</span> STRONY_IP <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #800000;">${ADRESY}</span>; <span style="color: #000000; font-weight: bold;">do</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VERBOSE</span>&quot;</span> = <span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;iptables -t nat -A PREROUTING -p tcp -s <span style="color: #007800;">$SIEC</span> -d <span style="color: #007800;">$STRONY_IP</span> --dport <span style="color: #007800;">$PORT</span> -j DNAT --to <span style="color: #007800;">$PRZEKIEROWANIE_NA</span>:<span style="color: #007800;">$PORT_NA</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">-s</span> <span style="color: #007800;">$SIEC</span> <span style="color: #660033;">-d</span> <span style="color: #007800;">$STRONY_IP</span> <span style="color: #660033;">--dport</span> <span style="color: #007800;">$PORT</span> <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> <span style="color: #007800;">$PRZEKIEROWANIE_NA</span>:<span style="color: #007800;">$PORT_NA</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$VERBOSE</span>&quot;</span> = <span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #ff0000;">&quot;info&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
iptables <span style="color: #660033;">--list</span> PREROUTING <span style="color: #660033;">-t</span> nat
<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #ff0000;">&quot;off&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
iptables <span style="color: #660033;">--flush</span> PREROUTING <span style="color: #660033;">-t</span> nat
<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #ff0000;">&quot;-h&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Program przyjmuje zmienne: &quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;-h pomoc&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;on wlaczenie regul&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;off wylaczenie regul&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;info informacje o regulach&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;0/1 w trybie 'on' ukrywanie/wyswietlanie komunikatow&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;usage: ./blokowanie_stron on 1&quot;</span>
<span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Nie podano zmiennej trybu. (on/off/info)&quot;</span>
<span style="color: #7a0874; font-weight: bold;">exit</span>
<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">esac</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://wasil.org/iptables-i-blokowanie-stron-www/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Samba i Windows 7</title>
		<link>http://wasil.org/samba-i-windows-7</link>
		<comments>http://wasil.org/samba-i-windows-7#comments</comments>
		<pubDate>Sun, 06 Dec 2009 11:51:25 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Samba]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=102</guid>
		<description><![CDATA[Windows 7 ma często kłopoty z połączeniem z udziałami Samby na serwerze z zainstalowanym Linux'em i nie pozwala nam się zalogować do udziału Samby ( lub np. mapować dysku sieciowego ). Aby temu zaradzić należy ustawić dwie opcje ( jako użytkownik z uprawnieniami administratora ): Panel Sterowanie \ Narzędzia administracyjne \ Zasady Zabezpieczeń Lokalnych i [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Windows 7 ma często kłopoty z połączeniem z udziałami Samby na serwerze z zainstalowanym Linux'em i nie pozwala nam się zalogować do udziału Samby ( lub np. mapować dysku sieciowego ).</p>
<p>Aby temu zaradzić należy ustawić dwie opcje ( jako użytkownik z uprawnieniami administratora ):</p>
<ul>
<li>Panel Sterowanie \ Narzędzia administracyjne \ Zasady Zabezpieczeń Lokalnych i następnie: Zasady Lokalne -&gt; Opcje Zabezpieczeń -&gt; <code>Zabezpieczenia Sieci: poziom uwierzytelniania LAN Manager</code> i opcja: Wyślij odpowiedzi LM i NTLM</li>
<li>Panel Sterowanie \ Narzędzia administracyjne \ Zasady Zabezpieczeń Lokalnych i następnie: Zasady Lokalne -&gt; Opcje Zabezpieczeń -&gt; <code>Zabezpieczenia Sieci:minimalne zabezpieczenie sesji dla klientów opartych na NTLM SSP</code> i odznaczyć opcję: Wymagaj szyfrowania 128-bitowego</li>
<li>Panel Sterowanie \ Narzędzia administracyjne \ Zasady Zabezpieczeń Lokalnych i następnie: Zasady Lokalne -&gt; Opcje Zabezpieczeń -&gt; <code>Zabezpieczenia Sieci:minimalne zabezpieczenie sesji dla serwerów opartych na NTLM SSP</code> i odznaczyć opcję: Wymagaj szyfrowania 128-bitowego</li>
</ul>
<p>To powinno umożliwić pełną współpracę serwera Samba z systemem Windows 7</p>
<p>Mapowanie dysku sieciowego odbywa się przez adres: <code>\\nazwa_serwera\nazwa_udzialu</code> i następnie poprzez podanie nazwy użytkownika i hasła.</p>
<p>Jeśli jednak nadal nie działa to sprawdź czy wszystko masz ustawione wg. tego schematu:</p>
<p>Przypuśćmy, że mamy taki udział zdefiniowany w Sambie:</p>
<p><code><br />
[nazwa_udzialu]<br />
path = /sciezka/do/udzialu<br />
comment = komentarz<br />
available = yes<br />
browseable = yes<br />
public = no<br />
writable = yes<br />
valid users = samba-user<br />
write list = samba-user<br />
read list = samba-user<br />
</code></p>
<p>Użytkownicy systemu Windows 7 będą widzieli ten udział, ale nie będą mogli się z nim połączyć pomimo podawania hasła. W takiej sytuacji należy sprawdzić kilka zmiennych w pliku <code>smb.conf</code>:</p>
<ol>
<li>czy jest ustawiona opcja uwierzytelniania poprzez użytkowników a nie udziały, tzn:<br />
<code>security = user</code><br />
edit: powinno działać również jako <code>security = share</code>, ale polecam ten tryb tylko w przypadku chęci udostępniania udziału publicznego z dostępem dla wszystkich</li>
<li>czy jest ustawiona opcja dotycząca szyfrowania haseł:<br />
<code> encrypt passwords = true</code></li>
<li>czy jest ustawiona opcja przechowywania danych o użytkownikach:<br />
<code>passdb backend = tdbsam</code><br />
( może być również opcja przechowywania tych danych w pliku <code>/etc/samba/smbpasswd</code>, ale jej nie polecam )</li>
<li>oraz czy ustawiona jest opcja synchronizacji haseł Samby z hasłami systemowymi:<br />
<code>unix password sync = yes</code></li>
</ol>
<p>Oczywiście ważne jest aby połączeń z serwerem Samba nie blokował ani firewall zainstalowany w tym serwerze ( np. <code>iptables</code> ) ani firewall w systemie Windows 7 ( wbudowany, lub oprogramowanie zewnętrzne ).</p>
<p>Dodawanie użytkowników do Samby jest proste, trzeba tylko pamiętać, że użytkownik Samba musi najpierw istnieć w systemie, ale jeśli ma dostęp tylko do udziałów samby to nie musi mieć swojego katalogu domowego ani dostępu do powłoki.</p>
<ol>
<li>z poziomu powłoki systemowej ( jako <code>root</code> lub przez polecenia <code>su/sudo</code> ) należy wpisać:<br />
<code>smbpasswd -a nazwa_użytkownika</code><br />
, a następnie podać ( i powtórzyć ) hasło, tylko należy pamiętać, aby było ono takie samo jak hasło tego użytkownika w systemie ( serwerze, na którym znajduje się Samba )</li>
<li>drugim krokiem jest aktywacja użytkownika w Sambie poprzez polecenie:<br />
<code>smbpasswd -e nazwa_użytkownika</code></li>
<li>przeładowanie ustawień Samby przez polecenie:<br />
<code>/etc/init.d/samba reload</code><br />
lub inne polecenie służące do zarządzania usługami systemowymi, np. <code>service samba restart</code></li>
<li>usuwanie użytkowników odbywa się za pomocą polecenia:<br />
<code>smbpasswd -x nazwa_użytkownika</code></li>
</ol>
<p>Można zobaczyć listę użytkowników dodanych do Samby poprzez polecenie:<br />
<code>pdbedit -w -L</code><br />
lub jeśli używamy pliku <code>/etc/samba/smbpasswd</code> - poprzez jego edycję/podgląd.</p>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/samba-i-windows-7/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Instalacja Symfony Framework &#8211; Debian</title>
		<link>http://wasil.org/instalacja-symfony-framework-debian</link>
		<comments>http://wasil.org/instalacja-symfony-framework-debian#comments</comments>
		<pubDate>Sun, 08 Nov 2009 18:42:28 +0000</pubDate>
		<dc:creator>Piotrek</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[wszystkie wpisy]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://wasil.org/?p=64</guid>
		<description><![CDATA[Postanowiłem spróbować szczęścia z Symfony na moim serwerze z systemem Debian Linux, ale okazało się, że to nie jest takie proste. Stąd pomysł, żeby to opisać dla potomnych :) Założenie: używam Symfony w wersji 1.2 oraz ORM Doctrine a nie Propel 1. najpierw trzeba ściągnąć cały framework ze strony Symfony na swój serwer ( lub [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=c4f7eba1b091276f51d22ef24b2a2ac1&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=40 height=40/><p>Postanowiłem spróbować szczęścia z <a title="Symfony Framework" href="http://www.symfony-project.org" target="_blank">Symfony</a> na moim serwerze z systemem Debian Linux, ale okazało się, że to nie jest takie proste. Stąd pomysł, żeby to opisać dla potomnych :)</p>
<p>Założenie: używam Symfony w wersji 1.2 oraz ORM Doctrine a nie Propel</p>
<p>1. najpierw trzeba ściągnąć cały framework ze strony <a href="http://www.symfony-project.org/installation" target="_blank">Symfony</a> na swój serwer ( lub tak do, którego masz dostęp z poziomu powłoki ), a następnie:</p>
<p>a) stwórz katalog z nazwą swojego projektu, a następnie w nim stwórz katalog lib/vendor, czyli:</p>
<p style="padding-left: 30px;"><code>mkdir -p NAZWA_PROJEKTU/lib/vendor</code></p>
<p>b) rozpakuj plik tgz za pomocą poleceń:</p>
<pre style="padding-left: 30px;"><code>cd lib/vendor
tar zxpf symfony-1.2.9.tgz
mv symfony-1.2.9 symfony
rm symfony-1.2.9.tgz
</code></pre>
<p>2. teraz czas sprawdzić, czy mamy zainstalowane całe oprogramowanie wymagane przez Symfony:</p>
<pre style="padding-left: 30px;"><code>cd ../..
php lib/vendor/symfony/data/bin/check_configuration.php
</code></pre>
<p>3. i tutaj zaczęły się problemy.</p>
<p>zmiany w php.ini to nie problem, ale trzeba pamiętać, że ( tak jak skrypt nas uprzedza ) plik php.ini, który jest sprawdzany przez skrypt może nie być tym samym plikiem, który "obsługuje" serwer WWW - u mnie właśnie tak było.</p>
<p>Większy problem pojawił się w momencie kiedy chciałem zająć się instalacją PDO, a dokładniej jak chciałem sobie poradzić z komunikatem o braku sterowników do rzeczonego PDO. Potrzebowałem sterownik do mysql, ale szukając przez aptitude nic nie udało mi się znaleźć w pakietach Debian'a. Wyjściem okazało się użycie systemu instalacji dodatków do PHP: pecl.</p>
<p>a) aby z niego skorzystać najpierw należy wykonać polecenie ( jako root ):</p>
<p style="padding-left: 30px;"><code><br />
aptitude install php-pear</code></p>
<p>b) a potem zainstalować PDO wraz ze sterownikami do np mysql, lub innymi dostępnymi:</p>
<p style="padding-left: 30px;"><code>pecl install pdo<br />
pecl install pdo_mysql<br />
pecl install pdo_sqlite</code></p>
<p>c) potem pozostaje tylko dodanie odpowiednich wpisów do php.ini lub jak w moim przypadku do /etc/php5/pdo.ini:</p>
<p style="padding-left: 30px;"><code>extension=pdo.so<br />
extension=pdo_mysql.so<br />
extension=pdo_sqlite.so</code></p>
<p>d) i na koniec restart serwera WWW, np:</p>
<p style="padding-left: 30px;"><code>/etc/init.d/apache2 restart</code></p>
<p>To u mnie zadziałało bez problemu z wyjątkiem jednego błędu przy kompilacji pdo_mysql. W trakcie przeprowadzania sprawdzania przed kompilacją okazało się, że nie mam mysql_config i bez tego nie da rady przejść dalej. Aby to naprawić trzeba zainstalować jedną paczkę przez aptitude:</p>
<p style="padding-left: 30px;"><code>aptitude install libmysqlclient15-dev</code></p>
<p>i sprawa załatwiona.</p>
<p>Potem dopiero się dowiedziałem, że istnieje o wiele prostszy sposób na instalacje brakujących sterowników do PDO:</p>
<p style="padding-left: 30px;"><code>aptitude install php5-common php5-mysql php5-sqlite</code></p>
<p>a samo PDO jest zawarte w pakiecie<code> php5-common</code></p>
<p>I to by było na tyle: Symfony jest zainstalowane i gotowe do stworzenia aplikacji w tym framework'u.</p>
]]></content:encoded>
			<wfw:commentRss>http://wasil.org/instalacja-symfony-framework-debian/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.416 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-20 14:34:27 -->

