In Genesis 9 we read the story of Noah being found drunk and naked, by his son Ham. Ham went to tell his brothers about this and their reaction was to cover their father discreetly. When Noah wakes up and hear of Ham’s behaviour, he curses Ham’s son Canaan (verses 18-27).
It’s not easy to read the story with a “ancient mind” – in other words, we don’t precisely understand the social issues associated to this story. If a friend became drunk and took his clothes off today, we’d probably laugh about it, but in ancient Hebrew times, nakedness was still strongly associated to shame (see Genesis 3:7 & 21). Maybe a good comparison today would be uploading a video of your wife, naked, drunk and swearing, to YouTube and sending the link to all the church elders. Ham has said to his brothers, “Oy! Lads! Look at this! *guffaw guffaw*.” The brothers are shocked and treat Noah with appropriate respect where Ham has dishonoured his father greatly. So this is the context for Noah’s reaction.
Next, it seems that Noah’s reaction is borne out of anger. The bible reports a lot of things that it does not condone, David’s adultery being a classic example. Noah cursed Canaan, but we should not necessarily infer that this was an appropriate or proportionate response to the offence. In fact we already know that Noah is in a bad place, because the bible explicitly discourages drunkenness (perhaps for this very reason). So we can try to understand why Noah cursed Canaan without this then instructing us that we ought to behave similarly.
Generational angst might have been on Noah’s mind. We know that God later said (in Exodus 20:5-6), “I… am a jealous God, punishing the children for the sin of the fathers to the third and fourth generation of those who hate me, but showing love to a thousand generations of those who love me and keep my commandments.” The emphasis here is not that God is in any way vindictive, but that successive generations live with the consequences of the sin (or righteousness) of previous generations. Although what Noah says may be read as a curse, to me it reads more like a prophecy: i.e. If this is the kind of man that Ham is, then these are the inevitable consequences for his children. You reap what you sow. Ironically by bypassing Ham, Noah has avoided the embarrassment of indirectly blaming himself for his own son’s (Ham’s) sin. Then when Noah goes on to bless his other sons, he is by analogy giving himself a pat on the back!
The “NIV” and “New International Version” trademarks are registered in the United States Patent and Trademark Office by Biblica. Use of either trademark requires the permission of Biblica.
In my final “how-to” guide on self-hosted web design, I gave a special mention to a relatively new PHP framework, Laravel. I’m very familiar with CodeIgniter, but due to some of its limitations (including concerns over licensing, going forward), many developers have been moving to Laravel. Laravel has been on my “must try it out” list for some time. In this article, I’ll take you through initial installation and some of the issues I faced.
Prerequisites
Since this “how-to” follows my DIY web hosting series, I’m going to assume we’re starting with a similar setup: a virtual web site powered by Apache and PHP on Linux. Other environments work too. See the Laravel documentation for more details.
Installation
The Laravel setup guide is a little unclear about the correct location for its files. Here’s what I’ve found to work. This guide is for Laravel 3.2, but I suspect it will also hold true for later versions in due course. (At the time of writing, 4.0 is still in beta.)
If you’ve created a virtual web site with Virtualmin, you’ll have a new public_html directory at, for example, /home/fred.bloggs/domains/my.funky.site/public_html. Change to the directory above public_html (e.g. /home/fred.bloggs/domains/my.funky.site and proceed as follows, from an SSH login. Make sure you perform these steps as the web site owner (e.g. su fred.bloggs):
If you read the Laravel installation instructions linearly, you’ll see that you need to make a change to application/config/application.php. It contains a line like:
'key' => 'YourSecretKeyGoesHere!',
The recommendation is that you insert 32+ random characters in place of YourSecretKeyGoesHere!. There’s another way of doing this, if (and only if) the key field is blank. Laravel comes with a CLI (command line interface) called Artisan. If you issue the command php artisan key:generate, a random key will be generated for you automatically and inserted into the file.
To remove “index.php” from your URLs, edit that same file (application/config/application.php). Find the line 'index' => 'index.php', and change it to 'index' => '',. Laravel comes with a .htaccess file in the public directory, which contains the necessary Apache magic to make this all work.
Having done the above, fire up your web browser and point it at your new site. You should arrive at a default introductory Laravel page:
Other frameworks
Now would be a good time put to put Twitter’s Bootstrap and jQuery in place, if you’re planning to use them. Check the download URLs are current before you do this:
I use NetBeans for development. If you don’t already have a preferred IDE (integrated development environment), I recommend you check it out. Another favourite is Eclipse. You could use an ordinary text editor, but then you’d be missing out on a lot of things that can make your coding more comfortable and efficient.
Having installed Laravel and the other frameworks on my web server, next I use NetBeans to pull the code across to my development environment. Before you do this, still in your SSH shell, you may wish to delete some of the typical directories that Virtualmin creates but which you don’t really need:
rmdir cgi-bin/ homes/
In the NetBeans “New Project” wizard, select the option “PHP Application from Remote Server”. In the remote configuration, ensure that you choose as your “upload directory”, the directory above public_html, since that contains the private (non-web-accessible) Laravel directories, which we will also be playing with.
Once the code has copied across, you’ll want to exclude a couple of Virtualmin-generated directories from further synchronisation. In the project’s properties, go to “Ignored folders”. Add there /logs and /public_html/stats.
Where next
I’m slowly writing additional tutorials, while I take time to learn the framework. See the contents list above for other posts in this series. I also recommend you check out Dayle Rees’ tutorials. Happy coding!
What do Christians have to say about the existence of dinosaurs?
Answer
There are quite a few differing views within the Christian community, ranging from those who believe the fossil records were placed there by God as a test of our faith, to those who believe that the bible must be reinterpreted in the light of the findings of science.
I suppose the biggest perceived hurdle is the assumption that the bible insists the earth is no more than a few thousand years old whereas science insists that dinosaurs became extinct many millions of years ago. I deal with this separately in my How Old is the Earth article. Suffice it to say here that the bible has several references to large and otherwise unidentified creatures such as “leviathan” (e.g. Job 41:1, Psalm 74:14). I do not have a strong view on the time scales within which these creatures existed, but I do not find their existence incompatible with a belief in the truth of the bible.
In the last post in this series, I looked at some options for creating a website with relative ease. Perhaps the word “easily” should not be present in the title of this, the last episode.
If you’re a budding geek/hacker, sooner or later running WordPress blogs is going to get old. You could spend a lifetime learning how to bend WordPress to your will (which would be like dancing on shifting sand – it’s constantly changing underneath you and you’ll die from exhaustion) or you could set your mind to doing the thing from scratch. Or near enough from scratch.
I first got into programming (at the age of 11 or so) when the “hacker” community demographic genuinely consisted of bearded recluses. Social skills were an inconvenience. If you couldn’t say it with ones and zeroes, it wasn’t worth saying. Later on, when I took Computer Science at university (along with Law), little had changed. Less than three percent of the people in my year for CompSci were women. Less than three percent had discovered personal hygiene products. It wasn’t the same three percent, by the way.
I say this by way of apology. My path to web development was long and winding. I had experience with many different programming languages before my eyes were opened to the wonders of web-centric coding. This gave me quite an advantage. Diving into this material can be intimidating, if you’ve little or no experience of code. Let me just reassure you: all you need to do is assimilate a little bit of knowledge at a time. Eventually it will all start to hang together. With the tools I’ll show you, you’ll be hammering out awesome code before you can say Xyzzy.
Disclaimer: proceeding down this path may not turn you into a geek. Or cause you to grow a beard. Please try to contain your disappointment, if so.
The building blocks
Many (but by no means all) web sites are built using a combination of:
HTML: the language which describes the components of a web page. It has much more to do with layout/structure than with how things actually look. HTML is probably the easiest bit to learn. In your browser, you can right-click on most web pages and select “view source”. What you’ll be looking at is largely HTML code. Start learning HTML at W3Schools. Whenever I need a quick reference for HTML, I go here.
CSS: Cascading Style Sheets describe how a web page should look. Colour, positioning, borders, etc. Reference here. Tutorials here. Learn how to do fancy things with CSS at CSS Play and goggle at others’ CSS prowess in the CSS Zen Garden.
JavaScript: There seems to be an increasing trend to use “CamelCase” when writing “JavaScript”, these days. When I started learning, it was simply “javascript” – not to be confused with Java. JavaScript is a true programming language, which runs in your browser. It is loaded along with the HTML and CSS and actions are performed on the basis of the JavaScript code instructions. Reference here. Tutorials here.
PHP: A hugely popular server-side (so-called because it runs at the web server end, not in the browser) programming language. PHP is by no means the only – nor necessarily the best – web programming language out there. Ruby, Python, Java and ASP.NET all have a strong presence in modern web sites. PHP is the one with which I and many other far superior web developers are familiar. It’s idiosyncratic and inconsistent at times, but I have found it to be easy to learn and for the most part well documented. The official PHP site is an excellent reference tool. If you learn PHP, you’ll be using this site’s function search box regularly. The W3Schools tutorials don’t cut the grade for me here. Start learning PHP at the home of PHP.
MySQL: one of the most popular database management systems on the planet. If you need to store a lot of data (or even a little), you’ll benefit from a database engine powering your web site. Learn about using MySQL within PHP here. The official reference is here.
Gasp. That’s a lot to get hold of, isn’t it? Don’t worry – you’ll see that a lot of this learning dovetails together. For example, once you’ve learnt some JavaScript, picking up PHP will be that bit easier, because they have much in common.
Frameworks
You can get by, just knowing the building blocks. But if you want to create efficient, reusable code, without continually reinventing the wheel, you’d do well to make use of some frameworks. Each language has many frameworks and you could spend a lifetime trying them all out. I will steer you in the direction of a small few, but by all means try out as many as you have time for. Each is different from the other, which can be bewildering, but it also means you’re likely to find frameworks which fit or even enhance your style of working.
Twitter’s Bootstrap: built by the mighty Twitter, Bootstrap gives you consistent CSS styles, which (amongst other things) help to ensure your web sites look very similar in different browsers. Sooner or later you’ll be stung by cross-browser differences. Making use of a CSS framework such as Bootstrap will reduce the impact of this pain. Bootstrap is more than just a CSS framework, it also has JavaScript plugins. There’s much to explore here and unless you’re already a CSS/design guru, it will make your web sites look better.
jQuery: a phenomenal JavaScript library – it enables you to do phenomenal things on the browser side, with very little coding, which would otherwise take you hours of work. jQuery is not the only such library, but it is one of the best. It is further enhanced visually by the excellent jQuery UI.
CodeIgniter: I have built many web sites with this PHP development platform. It was my first introduction to the MVC (Model, View, Controller) paradigm, where you split out your database work (Models) from your presentation/pages (Views) and your application/business logic (Controllers). CodeIgniter has some flaws, including the suggestion (a view shared by many) that it would benefit from a ground-up rewrite. But it is well-built, fast, solid and will help you to concentrate on the unique features of your web site, without having to reinvent the wheel all the time. Your resulting code will be easier to understand and maintain.
Special mention
There’s a rapidly up-and-coming PHP framework that deserves some attention at this point, Laravel. I have not personally had chance to experiment with it yet, but I intend to use it for my next web application. I understand it addresses many of the shortcomings of other PHP frameworks and apparently CodeIgniter developers are flocking to it in droves.
Graphics
As I’m sure you can tell, graphic design is not my strong suit. I am amongst other things a web developer, not a web designer. It’s rare to find someone who’s good at both. Nevertheless, even if you’re not graphically inclined, there are still a lot of things you can do to give yourself a “leg up”. Here are my top graphics tips:
Don’t be afraid to copy. There are very few genuine innovators out there. Most fashion is a rehash of other fashion. It’s fine not to be original. See what works, figure out why it works, and put your own spin on it.
Get a good graphics package. Don’t be put off by its name; download GIMP. It’s like Adobe Photoshop at the great price of free. If you’re not short of cash, I can also recommend Adobe Fireworks, which is an excellent but expensive web-focussed design package.
The bible seems to indicate that the earth and the universe are less than a few tens of thousands of years old. Science talks in terms of billions of years. Which is right?
Answer
For reasons that escape me, “science” is perceived as having fixed, reliable and universally agreed views on the age of the earth and the universe. This does not reflect the reality that science is always a developing field of knowledge and enquiry; we frequently see today’s “facts” becoming tomorrow’s jokes (cf. flat earthism). Moreover, although there may appear to be a general consensus within the scientific community, we should never equate consensus with knowledge. Nor should we suppose that any one particular scientist holds the same view as all other scientists, nor that those views have in all cases been arrived at by personal impartial examination of the primary evidence.
Although this is merely scraping the surface of the body of knowledge on dating methods, it too often appears that (for example) the geological method is used to confirm the radiocarbon method and vice versa. Such circular proof is no proof at all and certainly demands closer scrutiny. Furthermore, the fact that a particular dating method appears to hold good over a period of a few hundred years cannot give us an assurance that it can also hold true over many millennia. This gigantic extrapolation involves what I can only describe as a breathtaking leap of faith.
We know that the speed of light appears to be a constant and that we can observe stars that appear to be millions of light years away. The contemporary view of most astronomers would be that the light reaching us (from a supernova for example) shows us a picture millions of years old. To this, a young earth creationist might respond that the point of creation involved such a massive injection of divine power that these supernovae occurred rapidly, while the universe expanded rapidly (say to its present size within a matter of hours) making it appear as though those events occurred long ago.
It is clear to see that these widely differing viewpoints both rely on baseline assumptions: “today’s science has got it right” versus “the bible tells us that the earth is very young”.
For my own part, I hold neither view. It is not really an important question for me, since my faith is based on a personal relationship with someone who I know and whose influence on my life I have witnessed first hand. It is necessary for me to have source scriptures that are reliable, but I will be the first to admit that I do not always understand what they are saying and that they can easily be misinterpreted, not the least because we English speakers receive them by way of translation. That said, it was recently pointed out to me that there is a particular interpretation of Genesis that may shed some light on the apparent age discrepancy between science’s view and young earth creationism’s. Interestingly, it comes down in favour of science.
At the very beginning of the bible, we read that in the beginning, God created “the heavens” and “the earth”. The next verse has traditionally been translated “The earth was formless and empty” or words to that effect. But it can also validly be translated “the earth became formless and empty”, perhaps implying a cataclysmic event immediately preceding the “re-making” of the earth and the creation of man. Thus the universe could have pre-existed the creation story by an undefined period of time.
Additionally, note that in the first verse of Genesis 1 attention is fixed on “the heavens and the earth”, a Hebrew idiom for everything, i.e. the universe. But in verse 2, the focus of the narrative dramatically narrows to concentrate merely on earth and its immediate environs. This too may explain why there appears to be a discrepancy in timing.
In truth, no one knows the true age of the universe for sure. No one now living was present at the moment of creation, whether that was a Big Bang or some other impressive manifestation. We would do well to choke down our arrogance and admit that it is not possible to know all things beyond a shadow of doubt. Unless, of course, you’re God.
Much as I am constitutionally disposed to resist being pigeon-holed, I guess you could describe me as a conservative Charismatic. Although I am a firm believer that the gifts of the Holy Spirit are rightly in active use today, I am troubled by some of the excesses witnessed in modern churches, blamed on “moves of the Spirit”. I would align myself with all mainstream orthodox (little ‘o’) Christian beliefs and creeds. So that sets out my stall/bias in writing this article.
Many years ago, a dear friend of mine took a turn – maybe it was a gradual turning – in his Christian walk, into a movement known as “Universal Reconciliation” (UR). I have attempted subsequently to understand what Universal Reconciliationists believe and to what extent (if any) my fellowship with them might be affected. Early on, I instinctively felt that a doctrinal chasm had opened up between us, but I do not trust my instincts, except in the sense that they reveal to me my deeper emotions. And I know that emotions can be misleading.
What is it?
The name is a fairly accurate although perhaps simplistic description of the characteristic belief of Universal Reconciliationists. To expand this slightly, they believe that all people will ultimately achieve salvation through Jesus Christ, if not in this life then in the next. This would include all those persons traditionally cited as “evil beyond redemption” – Hitler, Stalin, Genghis Khan, etc. This of necessity disallows the concept of eternal punishment/hell. More on that anon.
The need for grace
I think that God must find it very saddening when Christians focus more on what divides them than on what unites them. One way in which this is evident is the use of name-calling. Evangelicals sometimes call fundamentalist Christians “fundies”. Fundamentalists may call Charismatics “Charismaniacs”, and so on. An unfortunate trend I have seen amongst Universal Reconciliationists is to cover the rest of Christendom with the blanket term “ET-ers”, where the “ET” stands for “Eternal Torment”.
Granted, many Christians outside UR do believe that non-believers are destined to spend eternity/the afterlife in some form of perpetual and ever lasting punishment. But what we should remember here is that in the case of UR, “Universal Reconciliation” describes the point at which the movement departs from mainstream Christianity. For many (non-UR) Christians, eternal torment is not a major tenet of their beliefs. Admittedly, it’s in there somewhere, but this is not, I don’t think, the key focus of their spiritual lives. So it is unfair to pick one arguably secondary doctrine and make this the defining characteristic of those believers. Furthermore, calling them “ET-ers” implies a negative focus whereas I would suggest that this is not the focus or experience of the majority. And finally, note the difference: Universal Reconciliationists have (broadly speaking) chosen this label for themselves; the rest of Christendom has not (to my knowledge) chosen the label ET-ers.
So may I call for grace from Universal Reconciliationists towards your brothers and sisters in the Lord? Can we drop the name-calling?
If I am going to speak about grace, I must go on to express my dismay at the way non-UR believers have treated Universal Reconciliationists in so many cases. We should look to the fundamental primary doctrines held by these people and the fruit of their spiritual lives. I would submit that the differences are much smaller than the heresy-hunters wish to make out.
It is difficult, but necessary, when engaging in theological debate, that we focus on the issues, not on the people. We are called to love one another whether friends, enemies, those in our particular branch of the Church or those outside it. The vitriol unleashed by people on both sides of this debate is alarming, unloving, unrighteous and generally not worthy of a direct response. It is acceptable to demolish ideas; it is not acceptable to demolish people.
If you research UR online, you do not have to dig very deep to discover websites that have large sections devoted to UR (apologetically for or against). The attitudes of some of the contributors to and maintainers of those websites can be deeply saddening. Personal attacks are rife and this is extremely unbecoming for anyone who claims to be devoted to an all-loving God. UR particularly emphasises the love of God, making personal attacks all the more incongruous in those quarters. Whatever the case, it is incumbent upon all who seek to engage on this topic to do so with the utmost respect for each others’ dignity as creatures made in God’s image.
Examining the scriptural evidence
Since we’re talking about matters of doctrine, we must start with our source text, the Bible. It is important not to impose one’s presuppositions on the text. Beginning with an assumption that UR is either a correct or an incorrect position will inevitably result in the view that certain scriptures shore up that assumption. The Bible is an ancient document, which we see through the lenses of translation and dynamically shifting cultures.
I am hampered though; I do come to the text with presuppositions and fettered by my culture. Moreover, I am not trained in ancient languages and cultures, nor indeed in theology (except through limited self-study). Nevertheless, I will make the best fist I can, of examining the scriptural evidence both for and against UR and – who knows – perhaps something somewhere will ring true for my readers. I ask the Holy Spirit to guide my thoughts as I write and yours as you read.
Examining evidence is something with which I am well acquainted, having spent some 14 years in the study and practice of the law. Perhaps my approach will seem clumsy to some, but to me it is second nature. To the evidence, then.
The scriptural case for UR
I do not have the resources to conduct a thorough biblical study, but let us address a few of the typical texts used in support of UR.
For as in Adam all die, so in Christ all will be made alive.
1 Corinthians 15:22
The UR conclusion from this passage is that all people for all time will be “made alive”, that is, saved. To evaluate this critically from a non-UR perspective: while most Christians would agree that all people are “in Adam”, we cannot with certainty say that all people are “in Christ”. There is a subtle difference between the UR reading and the non-UR reading. To illustrate this better, compare, “as in Adam all [people ever born] die, so in Christ all [people ever born] will be made alive” (UR) with “as [of those people who are] in Adam all die, so [of those people who are] in Christ all will be made alive” (non-UR). Both are arguably valid renderings of the text. This verse on its own is insufficient therefore to support either position fully. Further evidence from the text is required.
On the basis that “a text out of context is a pretext for a proof text” we should at least examine the immediate context surrounding the verse in question. In verse 23, Paul goes on to say, “But each in his own turn: Christ, the firstfruits; then, when he comes, those who belong to him.” This seems to beg the question whether there will be those who don’t belong to him. Further, this raises the suggestion that the previous verse is not intended to indicate that the “all” referred to in connection with Christ is universal. This verse taken in isolation supports neither the UR nor the non-UR view.
Consequently, just as the result of one trespass was condemnation for all men, so also the result of one act of righteousness was justification that brings life for all men.
Romans 5:18
As with the previous verse, the UR position is tied up in the use of that word “all” – “life for all men”. Analysing the context, we see in verse 19: “For just as through the disobedience of the one man the many were made sinners, so also through the obedience of the one man the many will be made righteous.” That there is a difference between “all” and “many” is undeniable (two different Greek words are used and those words are not synonyms). On a plain reading, verse 19 gives an indication that not all people will be made righteous.
Some might argue that the “many” people referred to in verse 19 could logically include “all” people. If all people were together, that would indeed be “many”! But although the logic follows, it seems rather awkward to impose such a reading on the verse. “Many” just as logically (and more commonly) can mean “less than all”.
In verse 18 the assertion that Christ “brings life for all” does not necessarily imply that all receive life. Nor does it expand on the nature, extent or duration of that “life”. Once more, neither the UR, nor the non-UR position is conclusively proven.
For God was pleased to have all his fulness dwell in [Christ], and through him to reconcile to himself all things, whether things on earth or things in heaven, by making peace through his blood, shed on the cross.
Colossians 1:19-20
This undoubtably is a key scripture for Universal Reconcilationists, not least because of the appearance of the phrase “reconcile to himself all things”. The UR position concludes that all people are ultimately reconciled with God, where “reconciliation” implies eternal blessed life, free from further punishment. This is compelling. Some difficulties present themselves, however:
“all things” – is Paul implying that reconciliation/eternal life awaits everything, whether animal, igneous rock, body corporate, item of stationery, ideology, software product, termite mound or interstellar gas? One supposes not.
“things in heaven” – is Paul suggesting that reconciliation and eternal punishment-free life await Satan?
“reconciled” – does reconciled mean that for all time any deserved punishment is removed, suspended, negated or past?
If the emphasis in this verse is placed on “through him” (non-UR) rather than on “all things” (UR), a valid reading becomes, “All things which are reconciled to God are reconciled through Christ.” So although this verse might lead some to reach a UR position, we can see that a UR position does not arise from it of necessity. This verse is better evidence in support of UR, but not sufficient in itself to build a doctrine.
So far, much has been made of one small word, translated “all”. In each of these verses, the word “all” comes from a Greek word transliterated “pas” (Strong’s number 3956). Interestingly, this same word is used in 1 Timothy 6:10, which is a very familiar passage:
For the love of money is a root of all kinds of evil. Some people, eager for money, have wandered from the faith and pierced themselves with many griefs.
! Timothy 6:10
Earlier versions such as the KJV tended to translate this as “love of money is the root of all evil”. The New KJV now favours “the love of money is a root of all kinds of evil”. There is not currently a complete consensus amongst translators, but the differences of opinion should be enough to suggest that a dogmatic insistence on one particular rendering would be unwise. That said, the rendering that includes “all kinds” seems more consistent with the remaining corpus of scripture and makes good sense (in that there are certainly many evils for which money is not the root). Applying this back into the previous scriptures, where “all things” are reconciled, might this not properly be rendered, “all kinds of things” are reconciled? And so on.
That if you confess with your mouth, Jesus is Lord, and believe in your heart that God raised him from the dead, you will be saved.
Romans 10:9
and
and every tongue confess that Jesus Christ is Lord, to the glory of God the Father.
Philippians 2:11
I juxtapose these two as others have done elsewhere, in support of UR. The conclusion invited is that all people will ultimately confess that Jesus Christ is their Lord, thereby obtaining the salvation promised in Romans 10:9. The previous verse in Philippians states however, “at the name of Jesus every knee should bow…” This is a valid translation of the original and leaves open the possibility that while all should bow and confess, some will not.
… God our Saviour … wants all men to be saved and to come to a knowledge of the truth.
1 Timothy 2:3b-4
Perhaps we now come to the crux of it. A common line of reasoning for Universal Reconciliationists is thus: God is omnipotent. God is all-loving. God desires that all people be saved. Due to his omnipotence, everything he desires, he can bring into being, and since this would be consistent with being all-loving, all people will be saved. I do not propose to analyse that reasoning here, but returning to the scriptural evidence, we can ask: are God’s desires ever unfulfilled?
The Greek word translated here “wants” can be transliterated from the Greek as “thelo” or “ethelo” (Strongs number 2309). This word appears 210 times in the New Testament and the best place to answer our previous question is wherever the word is used in connection with God. One such instance is Romans 9:22:
What if God, choosing to show his wrath and make his power known, bore with great patience the objects of his wrath— prepared for destruction?
Romans 9:22
In this passage we see God’s wishes (“thelo” here translated “choosing”) being restrained by God himself. Taking an overview of the context in which this word is used (and precise meaning would normally vary with context), the meaning is no stronger used in connection with God than in connection with an individual. For example, “I wish to do a parachute jump,” communicates the desire without implying that this desire will definitely be fulfilled. I would suggest that this is how 1 Timothy 2:3b-4 should be taken. It is silent on the matter of whether God’s wish in this respect will ever be fulfilled.
There are many passages in scripture similar to those above. There are too many to list here, but of those I have analysed, a similarly inconclusive position arises. For the avoidance of doubt, I have not found any scripture that provides conclusive evidence in favour of UR, but please understand that this mere fact must not be taken as a positive assertion that UR is false. In that respect, we must next consider whether there is any scriptural evidence negating UR.
The scriptural case against UR
Since a principal tenet of UR is that punishment for unbelievers will be limited in time (or not happen at all), it is appropriate to examine those scriptures that touch on eternal punishment.
He will punish those who do not know God and do not obey the gospel of our Lord Jesus. They will be punished with everlasting destruction and shut out from the presence of the Lord and from the majesty of his power
2 Thessalonians 1:8-9
Everything turns on the correct translation of the word here rendered “everlasting”. Unsurprisingly, it transpires that this is an extremely contentious point between UR and non-UR believers. On the face of it, on a plain reading of the NIV at least, UR is obliterated by this translation, but is the translation correct?
Different translators have different views. Here are a few:
eternal destruction (NASB, NLT, ESV, CEV, ASV)
everlasting ruin (destruction and perdition) (Amplified)
everlasting destruction (KJV, NKJV, Darby, NIV)
destruction that continues forever (NCV)
everlasting pains (Wycliffe)
destroyed for ever (Worldwide English)
eternal exclusion (JB Phillips)
eternal exile (The Message)
destruction age-during (YLT)
Of the translations (and paraphrases) surveyed, there is a broad consensus that the duration of destruction/punishment will be eternal or everlasting. In those translations it is difficult to impute a cessation to the period of punishment, at least not without second guessing the translators. In a couple of the translations, the intensity of the punishment is moderated to “permanent exclusion”. It is still without temporal limit.
The UR counter to this stems from translations such as Young’s Literal Translation, which focuses on the “ages” translation of the Greek word “aionios”, viz “they will be punished for an age”. The majority of translators disagree with this conclusion, but it seems to me that the bible is the best arbitrator on the question. Where else is this word used? Aionios occurs 72 times in the New Testament. Interestingly it is used in connection with life as well as with punishment. For example:
Then they will go away to eternal punishment, but the righteous to eternal life.
Matthew 25:46
“Eternal” here is aionios in both cases. If the UR position is correct that “aionios” punishment is limited in duration, then it must also surely assert that the “aionios” life is similarly limited in duration. Any other approach would be inconsistent. So if 2 Thessalonians 1:8-9 does not conclusively support the non-UR position (if there is a valid question concerning the correct translation of aionios) it cannot support the UR position either, in the light of verses such as Matthew 25:46.
A third angel followed them and said in a loud voice: If anyone worships the beast and his image and receives his mark on the forehead or on the hand, he, too, will drink of the wine of God’s fury, which has been poured full strength into the cup of his wrath. He will be tormented with burning sulphur in the presence of the holy angels and of the Lamb. And the smoke of their torment rises for ever and ever. There is no rest day or night for those who worship the beast and his image, or for anyone who receives the mark of his name.
Revelation 14:9-11
This is one of many passages within Revelation concerning the punishment of the wicked. In this instance, the flavour of the passage conveys a permanent sacrifice-like punishment of a particular group of apostates. On a plain reading of the text, one must emerge with an impression of a devastating outpouring of God’s judgment upon some unbelievers. Words such as “fury”, “wrath”, “torment” and “sulphur” enhance that impression. I would advise caution here however: Revelation must be approached with great care. It contains much that is allegorical, much that is prophetic, much that appears poetic even. Extracting a clear prediction of the future (to the extent that Revelation may contain as yet unfulfilled prophecy) is beyond me. I accept Revelation as one of those mysteries of God, to be revealed at his good pleasure.
So, the evidential strength of Revelation 14:9-11 may legitimately be brought into question by UR believers. That it is evidence against their cause cannot be called in question. That it is perhaps not utterly compelling may be.
There are many scriptures that say similar things to those we have studied thus far. One scriptural concept deserves particular attention before we wrap up this section however: that of the unpardonable sin:
I tell you the truth, all the sins and blasphemies of men will be forgiven them. But whoever blasphemes against the Holy Spirit will never be forgiven; he is guilty of an eternal sin.
Mark 3:28-29
I cannot play Devil’s advocate with these verses. I must simply pray that I never stumble into such error.
The problem of free will
I do not wish to stray far from my biblical studies approach to this debate, but I do wish to express some thoughts on the topic of free will. It presents philosophical difficulties for me when I address Universal Reconciliation. My understanding may be coarse and inelegantly expressed, but for me, the Universal Reconciliationist says this: you will be saved whether you want to be or not. If you reject God initially, it is inevitable that you will ultimately repent and return to him.
In this eternal, UR view, free will becomes illusory. If a person’s choice (of God) is inevitable, predictable and effectively impossible to avoid, how can we reconcile this with what we instinctively know and feel (and believe the bible teaches moreover) about free will?
There is another problem: if it is inevitable that people will choose God, over the eternal time scale, is it not also inevitable that they will subsequently choose to reject him again? Or is it impossible, having chosen God, to reject him (thus negating free will once more)? The matter of salvation becomes bound up in the works of the individual, rather than in the sacrifice of Christ. This, compounded with the dismantling of free will, makes the UR position one that would require very careful scrutiny indeed, were one to choose to embark down that path.
Does UR present a case to answer?
Taking all things together, UR does indeed have a case to answer. Whilst I maintain that if we take an orthodox view of scripture whereby it is internally consistent, a non-UR position appears to emerge more strongly, this is not to say that UR views should be dismissed summarily. They rightly challenge the non-UR approach to scripture and this challenge must be met with grace and dignity.
It is not my objective to reach a conclusion on this subject, although my own position remains unchanged having conducted this study. For the reader, further material may be of interest. Might I suggest two starting points – in the interests of balance, one from each camp:
There are many different ways of approaching web design and development, ranging from packages that do all the hard work for you, to coding the thing from scratch. If you were of the former persuasion, then I suspect you wouldn’t be reading this series, so we’re going to look at two different DIY approaches: moderate DIY (requiring little or no programming) and geek/hacker (getting your hands dirty with code). We’ll concentrate on the former, today.
Moderate DIY: Content Management Systems
I’ve been through the loop a few times with several different content management systems. These are software packages that typically provide a high level of functionality for your website, without involving you in lots of programming. There are some big names in this field, in both the commercial and open source worlds. In the latter case, the “big players” include:
There are hundreds of CMSes out there. By all means, experiment and try a few out. They have many things in common, so you’ll learn useful skills whatever you do. If you want to hit the ground running though, I would recommend checking out WordPress. Each iteration of WordPress is becoming more friendly to the web developer as well as the end user (content editor). The installation is a breeze. If your target website is a blog or a simple corporate website, WordPress is a great choice. There are some caveats, however.
WordPress may well be the most popular and most widely deployed CMS on the planet. This has pros and cons. On the one hand, you will find a large community of helpful and knowledgeable users, lots of documentation and a decent rate of product improvement. On the other hand, WordPress’s success makes it a large target. WordPress has suffered from some fairly high-profile security flaws. Because it drives so many web sites, WordPress is a tempting target for spammers and identity thieves alike. In short, if you plan to use WordPress (and I think you should), you’ll need to be committed to keeping up to date with security patches. Fortunately, applying WordPress patches is simplicity itself. You shouldn’t find it too onerous to keep it up to date – unless you are managing a hundred WP websites; but even then, there are tools for that
For the remainder of this section, I’ll proceed along the basis that you’ve selected WordPress as your CMS of choice. I’ll also assume that you are setting this up on the server created by following the earlier parts of this series (that is, you are using Virtualmin as your server/website management solution).
Installation
The installation of WordPress is well documented on the WordPress website, so I’ll not rehash that here. Let me suggest a couple of things to assist your installation though.
First, for each WordPress site, it is easiest to start from scratch, setting up a new site/domain within Virtualmin. If this is the very first site you’ve set up with Virtualmin, you will also be creating your first “user”. Virtualmin can handle multiple users on a single server, where each user is a kind of “mini administrator” of the website(s) within his or her control.
Virtualmin will by default create a username that corresponds to the first part of the domain you specify. So if your domain is “fredbloggs.changeip.com”, your user name will be “fredbloggs”. Virtualmin will also create (by default) a new MySQL database of the same name (“fredbloggs”). This MySQL user will have full control over the database.
If however, this is the not the first website you’ve created with Virtualmin, you have the option of adding the website to an existing user’s profile (in which case, you need to ensure you’re creating a sub- server), or creating a new user/domain/MySQL database. If you go down the sub-server route, you’ll be using the original username for your credentials, but your MySQL database name will be different (again, corresponding to the first part of the domain, by default).
To flesh this out a bit, you might do the following:
Site 1
Type: Virtual Server
Domain: fredbloggs.changeip.com
Username: fredbloggs
MySQL database: fredbloggs
MySQL username: fredbloggs
Web site root directory: /home/fredbloggs/public_html
Site 2
Type: Virtual Sub-server
Domain: funkyshop.changeip.com
Username: fredbloggs
MySQL database: funkyshop
MySQL username: fredbloggs
Web site root directory: /home/fredbloggs/domains/funkyshop.changeip.com/public_html
Note the different root directories (where the web site’s files are stored). I’d recommend the following procedure for obtaining and extracting the WordPress files:
Make a note of the URL for the “tar.gz” download. This is a Linux-friendly compressed archive. At the moment the address is http://wordpress.org/latest.tar.gz, but that may of course change.
Fire up an SSH connection to your server.
Navigate to the web site root directory.
If you logged on as root, use “su” to change to the website owner: su fredbloggs
Use the command “wget” to download the WordPress archive file: wget http://wordpress.org/latest.tar.gz
Extract the files: tar zxf latest.tar.gz
Move the extracted files out of the newly-created “wordpress” directory into the current directory: mv wordpress/* .
Tidy up the archive file and the now empty directory: rmdir wordpress; rm latest.tar.gz
Restyling a CMS is never a trivial task. If you are creating a commercial site, it may well be best to engage the services of an experienced WordPress designer. Until then, you have some other options. For starters, there are a lot of WordPress themes freely available which will completely change the look and feel of your site. Most of these themes can be customised in various ways, from adding your own logo, to changing the colour scheme. If you’re handy with CSS, you can tailor them even further, through the built-in CSS editor.
The problem is of course that your website will end up looking like a lot of other websites out there. For a personal blog, that’s probably not a big deal. If that doesn’t statisfy you though, you have a couple of ways of creating something a bit more personalised.
Several theme frameworks are available for WordPress. They are essentially skeleton themes, which come with instructions for customising to your own design. This tends to come with a steep learning curve. You’ll do well to avoid this until you’re reasonably fluent in HTML, CSS and PHP.
I recently came across a software package called Artisteer, which provides a WYSIWYG environment for designing themes for WordPress and many other CMSes. I have had a brief look at it, following a recommendation elsewhere. It too comes with a learning curve, though not as steep as beginning with a framework theme. Also, it is not free. But if you think you’d like to make your name designing cool WordPress sites, Artisteer (or something like it) would most likely speed up the design process.
Plug-ins
One of the great advantages of using a CMS, is that other people create generic plug-ins, which extend and enhance the functionality of the site. WordPress is no exception, with thousands of plug-ins available on its website. There are far too many plug-ins to list here, but here are a few that I would install straight away, on most WordPress sites I create:
Cookie Law Info: “A simple way to show how your website complies with the EU Cookie Law. Implied Consent. Style it to match your own website.”
Google XML Sitemaps: “[Generate an] XML-Sitemap compliant sitemap of your WordPress blog. This format is supported by Ask.com, Google, YAHOO and MSN Search.”
JetPack: an official WordPress plugin, which supercharges the commenting system, adds mobile-friendly themes, adds great stats and much more.
This is all you need to know, to get a massively featured website up and running in relatively no time, using pre-built tools. In the next and final article in this series, I’ll look at doing the whole thing more or less from scratch.
This is one of the few scripture verses I can remember (Ishmael made it into a handy song). Proverbs 14:14 – “A backslider gets bored with himself, but a godly man’s life is exciting.” (The Living Bible) Or, “The backslider in heart will be filled with the fruit of his ways, and a good man will be filled with the fruit of his ways.” (ESV)
The bible doesn’t really expand on what “backslider” means. For me, a simple definition would be “a person who formerly claimed to be a Christian but whose life is not bearing the fruit one might expect of a Christian”. I would describe two types of backslider:
A Christian whose life is currently dominated by sin.
A person who never was a Christian and who has reverted to type.
I wouldn’t dare to call the apostle Paul a “backslider”, but his self-effacing remarks in Romans 7:15-24 hint at type 1 backsliding:
15 For I do not understand my own actions. For I do not do what I want, but I do the very thing I hate. 16 Now if I do what I do not want, I agree with the law, that it is good. 17 So now it is no longer I who do it, but sin that dwells within me. 18 For I know that nothing good dwells in me, that is, in my flesh. For I have the desire to do what is right, but not the ability to carry it out. 19 For I do not do the good I want, but the evil I do not want is what I keep on doing. 20 Now if I do what I do not want, it is no longer I who do it, but sin that dwells within me.
21 So I find it to be a law that when I want to do right, evil lies close at hand. 22 For I delight in the law of God, in my inner being, 23 but I see in my members another law waging war against the law of my mind and making me captive to the law of sin that dwells in my members. 24 Wretched man that I am! Who will deliver me from this body of death?
ESV
If Paul felt this way, then for sure, backsliding is something we all experience in our lives, from time to time. These days though, I’m starting to wonder if most people you’d describe as “backsliders” were in fact never Christians at all. Check out 1 John 1:5-10:
5 This is the message we have heard from him and proclaim to you, that God is light, and in him is no darkness at all. 6 If we say we have fellowship with him while we walk in darkness, we lie and do not practise the truth. 7 But if we walk in the light, as he is in the light, we have fellowship with one another, and the blood of Jesus his Son cleanses us from all sin. 8 If we say we have no sin, we deceive ourselves, and the truth is not in us. 9 If we confess our sins, he is faithful and just to forgive us our sins and to cleanse us from all unrighteousness. 10 If we say we have not sinned, we make him a liar, and his word is not in us.
ESV
Once someone has the Holy Spirit indwelling, he is still capable of sin, but that goes against his new nature. This grieves the Holy Spirit. A Christian must inevitably show increased fruit of the Spirit – this is an unstoppable power at work in him. See Romans 8:11:
If the Spirit of him who raised Jesus from the dead dwells in you, he who raised Christ Jesus from the dead will also give life to your mortal bodies through his Spirit who dwells in you.
ESV
So generally for “backslider”, I read “wasn’t a Christian in the first place”. But that probably sounds harsh and I certainly don’t make it a rule. Ultimately only God truly knows the state of a man’s heart. 1 Samuel 16:7:
But the Lord said to Samuel, “Do not look on his appearance or on the height of his stature, because I have rejected him. For the Lord sees not as man sees: man looks on the outward appearance, but the Lord looks on the heart.”
Most SOHO routers are configured to prevent unsolicited inbound traffic. If you want people to be able to view web sites on your server therefore, you need to create a conduit through which web traffic can pass. This is usually called “port forwarding”. Broadly speaking, ports segregate different types of network traffic. Web traffic comes in on port 80 (TCP), SSH traffic on port 22 (TCP), encrypted web traffic (HTTPS) on port 443 (TCP) and so on. So you need to configure your router to forward port 80 traffic to the static IP address you configured for your server (see part 2). You may also wish to forward port 10000 (Webmin) and port 22 (SSH) so you can administer your server remotely, but be warned that as soon as you do, so-called “script kiddies” will start trying to break into your server. So proceed with caution, and read up on the risks. You’re pretty safe forwarding port 80, provided your web sites are well designed.
To find out how to set up port forwarding on your router, read the manual, or check out the references at portforward.com. Once you’ve done that, check that the port is forwarded by browsing to your network’s external IP address. How do you find that out? From within the network, browse to icanhazip.com.
If you’ve forwarded the port correctly, and if you’re not caught by the hairpin NAT gotcha (see below), you should see the default web page from your new web server. On my new server, the page looks like this:
It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.
Dynamic vs. Static IP addresses
If you are going to be hosting any kind of internet service (like a web server), it is easiest to have a static IP address. DNS (the Domain Name System) converts “human-friendly” web addresses such as “pomeroy.me” into “computer-friendly” IP addresses such as “178.248.39.218”. This is great if your network’s external IP address never changes, but for many customers on cable, broadband or dial-up connections, their IP address is “dynamic”, meaning that it might be different each time the modem or router reboots. There is a workaround for dynamic IP addresses (see the section on Dynamic DNS, below), but in the long run, it might be easiest simply to ask your ISP for a static IP address. In many cases that costs little or no more than a dynamic address.
Dynamic DNS
With Dynamic DNS (DDNS), your router or server contacts a DDNS service provider on the internet and reports its current external IP address. The DDNS server then transmits this information through the internet via the DNS system. Changes can take a while to take effect, but it’s better than nothing. My current DDNS provider of choice is changeip.com. ChangeIP.com has a free service, where you use a sub-domain from one of several domains they have available (e.g. fredbloggs.changeip.org).
Many routers can speak DDNS, meaning that as soon as the router reboots, it can check in with the DDNS provider and let it know if the IP address has changed. See your router’s manual for more information. If your router doesn’t directly support this, you can install software on your server that will periodically update the DDNS service. Read ChangeIP.com’s page on DDNS clients. You’ll need to install one of the scripts on your server, and set up a cron job to run the script as often as you like (providing you don’t breach the DDNS provider’s terms of service). You can of course use Webmin to set up your cron job.
Regular DNS
If you have your own domain registered, like me, and you’re using a static IP address, all you need to do is point your domain to your external IP address. Log into your domain host and add “A records” as needed.
Note: Did you know that the customary “www.” prefix on many websites is an unnecessary hangover from earlier in the internet’s history? You can use www.mydomain.com if you like, or simply mydomain.com. Note however that when you set up a “mydomain.com” web site using Virtualmin, Virtualmin automatically makes a “www.mydomain.com” alias, so that either will resolve to the same web site code. If you want DNS to work with both, you’ll need to add two A records: one for “@” and one for “www”.
Hairpin NAT
For most people, that’s it. You should now be able to create web sites on your server, use DNS or DDNS to broadcast those web sites to the outside world, and receive visitors from all around the world. But there’s a very significant “gotcha” with some routers, when you’re attempting to browse your web site from your LAN. If you’re on the same physical network as your web server, when you enter the web address in your browser, it should attempt to browse to your network’s external IP address. In other words, your web query goes out and attempts to come back in again. This out-and-back-again behaviour is known as “hairpin NAT” and not all routers can handle it.
If you’re one of the unlucky ones and you don’t want to swap your router for a better one, you have two main options. Technically, the best option is to run your own private DNS server (which you can do on the same server), but that is complicated and a bit of a hassle. If you’re only browsing from a single PC, the quick-and-dirty solution is to edit your hosts file. This file is located somewhere like “C:\Windows\System32\drivers\etc\hosts”. There are a lot of resources on the internet that will explain to you more about this file, but let me help you over one little hurdle: if you’re using Windows Vista or later, you need to edit this file as an Administrator. To do that, right-click Notepad and choose “Run as Administrator”. Then open the hosts file from within Notepad. You’ll need to change the files filter to “*.* (All files)”.
The default hosts file contains details about the format of entries. Suffice it to say that you’ll put here the DNS name of your web site and the internal LAN IP address of your web server. Your web browser, when looking up an IP address, should check the hosts file first, so in this scenario, you won’t be going out and back again. If you then take that computer somewhere else (e.g. it’s a laptop and you’ve taken it to work), you’ll need to remove the relevant hosts file entries, in order to browse to the external IP address of your network.
Networking is a complicated area and I have only scratched the surface here, in an effort to get most people up and running quickly. By all means if you’re stuck at a particular point, post a comment and, time permitting, I’ll try to point you in the right direction. In the meantime, stay tuned for part 4 of this series in which I will provide some initial pointers on building your own web site.
If you followed part 1 of this series, you’ll now have a physical machine ready for installation of your new server operating system and applications. In this post, part 2 of the series, I’ll be focusing on the operating system and one application – the application which will provision your websites.
Operating system
Although you’ll most likely be very familiar with Microsoft Windows or Apple’s OS X, we will be using Linux to power this server. Linux is an operating system well suited to web servers, but most compellingly, you can freely download it and don’t need to worry about costs or client/device access licences.
Note: some people prefer you to refer to the operating system as “GNU/Linux”. I am not promoting any particular viewpoint here; I simply feel this article would become even more cumbersome to read if I wrote “GNU/Linux” all the time. I shall stick to “Linux”, which is also the term with which most people are familiar, for better or worse.
There are many, many flavours (“distributions”) of Linux available. I’ve been through this loop quite a few times, so let me save you some time and point you in the direction of a distribution that I have found most suitable for this “home web server” scenario: Ubuntu. There are several editions of Ubuntu, but the most appropriate is Ubuntu Server, which you can download here. Make sure you download the 32-bit version, if you’re not running a 64-bit machine.
Why Ubuntu?
There are many reasons for choosing Ubuntu for this project, but here are my top five:
The apache2-suexec-custom package: This is delving into detail very early, so for now just take my word for it that this Ubuntu package is going to make your life a lot easier when we set up Virtualmin (see below). Other Linux distributions lack this package and you end up having to recompile the Apache server to enable virtual hosting. For most readers, that’s an unnecessary complication.
Community support: at the time of writing, the official Ubuntu forums had heading towards two million members. That translates into a huge pool of knowledgeable people willing to help with problems.
Heritage: Ubuntu is based on Debian, one of the granddaddy Linux distributions. Ubuntu’s mission was to bring Linux into the mainstream, making it more user-friendly, without sacrificing the features that make Debian such a robust and stable system.
Long-term support: each iteration of Ubuntu has an “LTS” version, confirming it will remain in support for five years from the date of first release. Most significantly, this means that one can expect security patches to be available for a predictable period of time.
Simplicity: installing Ubuntu is usually very easy. It detects an extremely wide range of hardware and makes many sensible choices for the end user, which results in a straightforward installation process. Once installed, many packages are readily available to enhance and extend the features of the server.
Installation
So, you’ve downloaded Ubuntu Server and burnt your installation DVDs. There are many places on the internet that take you through the installation of your Ubuntu server. Here, I will simply concentrate on the critical settings and options that will ensure your server is ready to host websites from day 1.
Network configuration
The first “gotcha” relates to networking. If you connect your server to a network on which a DHCP server is running, Ubuntu will automatically use DHCP. You could later change this, but it’s much easier to get it right during the installation. With 12.04, very early on in the installation wizard, and just after DHCP configuration has taken place, you’ll see a dialogue box headed “Configure the network”. This has a “Hostname” field and a “Go Back” button. After you’ve entered your desired host name, I recommend choosing the “Go Back” button. This in fact takes you to a screen you’ve not seen previously in the installation, which contains an option to configure the network manually. Choose that option and then give your server a static IP address on your LAN.
Software selection
At The basic software selection wizard screen, make sure you choose at least the following:
OpenSSH server
LAMP server
Mail server
You may also wish to install the PostgreSQL database, if you’re supporting that in addition to, or instead of MySQL.
Postfix (email server)
At the Postfix Configuration screen, you probably want to choose “Internet with smarthost”. We’ll deal with the detailed configuration of Postfix later. When asked for the SMTP relay host, enter the address of the mail server that will accept outward-bound email from this system (your ISP’s mail server, or an Exchange server already on your LAN, for example).
Post-installation
You now have a functioning server. At this point you should be able to disconnect the mouse, keyboard and monitor you borrowed previously and connect via SSH. When I need a command line/shell, I use PuTTY and PuTTY Connection Manager to connect to most of the Linux and Unix servers I administer, but any SSH-capable terminal emulator will do.
root
At the moment, you can’t log on as the all-powerful root user. You’re supposed to use sudo as a non-privileged user, to avoid inadvertent damage to your server. But the way we’ll be using this server, you’ll quickly find that a pain. So log in as the user you created during installation and then issue the following command: sudo passwd root
You can set a password for root and log on as root from that point onwards.
Note: I don’t recommend doing this on a production server or in any environment where security is a particular concern.
Package manager
Ubuntu comes with a lot (I mean a phenomenal quantity) of “packages” (programs) that you can freely install to enhance the functionality of your server. We use a package manager to add, remove and upgrade these packages.
This server does not have a graphical user interface installed, but that doesn’t mean we have to use a command line to install every package we want, or to process updates. Start by issuing this command: apt-get upgrade -y; apt-get install aptitude -y
You may need to reboot your server after this, particularly if the Linux kernel (the core of your operating system) has been upgraded during this process.
You now have a console based semi-graphical package manager at your disposal called aptitude. At the command line, issue the following command: aptitude
Once aptitude has loaded, take some time to explore the help facility to learn how to use it (press ?).
Packages to install
I recommend installing at least the following packages (several of which will be needed by Webmin – see below):
apache2-suexec-custom
any php5 modules you think you’ll need (search for “php5”)
a console-based text editor; I prefer vim, which should already be installed, but “joe” has a much gentler learning curve
libnet-ssleay-perl
libauthen-pam-perl
libio-pty-perl
apt-show-versions
libapt-pkg-perl
bind9
webalizer
How to find stuff
Most Linux distributions are configured with “locate”. This command helps you to track down files by name. Typically, the locate database updates overnight. You can force an update by running the command “updatedb”. You could then use that (for example) to find the file we’re about to edit in the next step.
Configure the apache2-suexec-custom package
On my test system, the suexec configuration file is at /etc/apache2/suexec/www-data. The first line probably contains the text “/var/www”. We need to be able to serve up web pages under the /home directory, so change that line to “/home” and save the file.
Enable additional Apache modules
Virtualmin depends on some otherwise optional modules for Apache (the web server program). Enable these modules and force Apache to load them with the following commands: a2enmod suexec
a2enmod actions
service apache2 restart
Virtual hosting application: Virtualmin
There are a few virtual hosting applications around – software that helps you to host multiple websites on a single server, without having to edit Apache’s config files by hand. My favourite application is Virtualmin, which has community and professional variants. The free community variant is more than sufficient for our purpose.
Virtualmin is actually a module for the server management software, Webmin, so we’ll be installing both. Again, Webmin is one of many tools available, which allow you to administer your server remotely. Once Webmin is installed, you’ll very rarely need to use the command line.
Install Webmin
The instructions for downloading and installing Webmin are here. If the reference to Debian confuses you, remember that Ubuntu is based on Debian. You can download the software anywhere you like on your server, but I’ve taken to creating a folder at /root/installed-packages, so I can easily track what I’ve installed outside the package management system. On my test system, I’m issuing the following commands: mkdir /root/installed-packages
cd /root/installed-packages
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.610_all.deb
dpkg --install webmin_1.610_all.deb
Note: you can use the Webmin APT repository to install Webmin and instructions are on the same page, but it’s a bit more fiddly.
Install Virtualmin
The Webmin site includes some instructions for installing Virtualmin here, but I think there’s a better way. Copy the link from that page for the “Virtualmin module in Webmin format” – ignore the Debian module. Then, browse to the Webmin interface (https://your.server’s.ip.address:10000) and go to Webmin–>Webmin Configuration–>Webmin Modules. Select the radio button next to “From ftp or http URL” and paste the link you copied into the field. Then click “Install Module”. Do the same for the link for the “Virtualmin theme in Webmin format”.
After the install, go to Webmin–>Webmin Configuration–>Webmin Themes. From the drop-down box, choose “Virtualmin framed theme” and click “Change”. Ignore the “Post-Installation Wizard” for now, and hit F5 to refresh your browser and use the Virtualmin theme for Webmin.
Post-installation Wizard
You may need to go through this wizard several times, fixing issues as you go along. Here are the things I needed to fix. After fixing each item, go back to the wizard. Eventually you’ll be using the “Check Configuration” wizard; a kind of post-post-install routine…
MySQL
You need to enter your MySQL username and password.
DNS zones
We won’t be running a DNS server initially, so in the wizard, click “Skip check for resolvability”. Within Virtualmin’s “Features and Plugins” page, uncheck “BIND DNS domain”.
Postfix
You’ll probably see an error message when you run the “Check configuration” wizard that says “A problem was found with your Postfix virtual maps : No map sources were found in the Postfix configuration”. To fix this, follow the “Postfix configuration” link, then click the “Virtual Domains” icon. Set “Domain mapping lookup tables” to “hash:/etc/postfix/virtual”.
Apache
I’ve found that Virtualmin can complain that certain modules (which we enabled earlier) are not available. Fix this by going to: Webmin–>Servers–>Apache Webserver–>Configure Apache Modules. You shouldn’t need to change anything – just click the “Enable Selected Modules” button.
Deal with this error message: “Apache configuration file /etc/apache2/mods-enabled/php5.conf contains SetHandler lines that prevent PHP from running with domain owner permissions. These lines must be removed.” as follows by editing the file in question (using your command-line text editor installed earlier). You’ll probably see some text along the following lines:
<FilesMatch "\.ph(p3?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
Delete that in its entirety and save the file. Then issue the following command: service apache2 reload
Final check/refresh configuration
Your final “Check configuration” will run successfully, but may issue two warnings: one about the IP address of the web server and another about FTP access. You can safely ignore both of these.
Next steps
Great! Now your server is ready to host multiple websites. Explore the “Create Virtual Server” link within Virtualmin to see the options now available to you.
Of course you want these websites to be accessible from the internet, so in part 3, I’ll deal with the hurdles you’ll need to jump before you can inflict your new web sites on the unsuspecting public. Until then, happy tinkering!
This website uses cookies to improve your experience. I will assume you're ok with this, but you can opt-out if you wish.AcceptRejectRead More
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.