UNIVERZITA PARDUBICE Ústav Elektrotechniky a Informatiky
PROJEKT MONO Semestrální práce z předmětu Správa Webserveru
[email protected]
Březen 2007
Karel Dytrych
Karel Dytrych Projekt Mono
Obsah Obsah ............................................................................................ 2 Co je to projekt Mono ......................................................................... 3 Součásti projektu Mono .................................................................... 3 Ecma – 334 ................................................................................. 3 Ecma – 335 Common Language Infrastructure........................................ 3 Technologie .NET .............................................................................. 3 .NET Framework............................................................................. 3 Zásadní změna v přístupu k prostředkům systému .................................. 4 Schéma .NET Frameworku............................................................... 4 Hlavní rysy projektu Mono .................................................................... 5 Mono na Windows ........................................................................... 5 Příklad kompilace programu ............................................................ 5 Grafické aplikace ......................................................................... 6 Vlastní implementace Windows.Forms ................................................ 6 Instalace na Linux ........................................................................... 6 Mono na zkoušku............................................................................. 6 VMware image – openSUSE Linux ....................................................... 7 Live CD – Ubuntu Linux .................................................................. 7 Vývojové prostředí pro Mono aplikace ...................................................... 7 Cíle MonoDevelopu do budoucna.......................................................... 7 MonoDevelop vs Visual Studio ............................................................. 7 Převod aplikací na Mono ...................................................................... 8 Webové aplikace ASP.NET a Mono ........................................................... 9 ASP.NET hosting s Apachem ............................................................... 9 Instalace modulu mod_mono, konfigurace Apache .................................10 ASP.NET hosting pouze na webserveru XSP.............................................11 Konfigurace XSP..........................................................................11 Některé parametry konfigurace XSP serveru ........................................12 Závěr............................................................................................12 Literatura ......................................................................................12
2/13
Karel Dytrych Projekt Mono
Co je to projekt Mono Mono je sada open source programů a nástrojů umožňující vývoj a provoz aplikací založených na technologiích .NET i mimo operační systém Windows. Aplikace lze pomocí Mona provozovat na operačních systémech Linux , Solaris, Mac OS X, Windows, a Unix. Jde především o desktopové aplikace, a serverové aplikace vyvíjené v prostředí ASP.NET. Projekt Mono vede firma Novell, která ho převzala po firmě Ximian. Projekt odstartoval v roce 2001, ale první stabilní verze 1.0 se dočkal až ve druhém čtvrtletí 2004. Projektu se ve velké míře věnuje zakladatel společnosti Ximian Miguel de Icaza (v současné době zaměstnanec Novellu), který stál u zrodu desktopového prostředí Gnome. Jeho plánem do budoucna je Gnome kompletně postavené na technologii Mono.
Součásti projektu Mono V Monu jsou implementovány mezinárodní standardy ECMA (European Computer Manufacturers Association) použité v .NET a některé základní nástroje. Především jde o kompilátor jazyka C#, a Common Language Runtime - základní kámen .NET.
Ecma – 334 Standard specifikující jazyk C# - syntaxe, pravidla pro interpretaci, a omezující vlastnosti.
Ecma – 335 Common Language Infrastructure Mezinárodní standard definující základní jazykovou infrastrukturu (CLI) pro aplikace napsané v několikanásobně vyšších jazycích, které mohou být spuštěny v různých systémových prostředích bez potřeby jakkoliv tyto aplikace upravovat.
Technologie .NET .NET („dotnet“) je název pro sadu technologií, které tvoří celou platformu od firmy Microsoft. Technologie .NET zahrnuje webové XML služby, servery, a klientské aplikace. .NET je velice podobný s Javou. Obě technologie sdílí ideu, že výsledkem kompilace programů není strojový kód pro daný procesor, ale jakýsi mezikód (v případě .NET je to Microsoft Intermediate Language - MSIL). MSIL je nezávislý na operačním systému i typu procesoru. Mezikód se spouští virtuálním strojem s využitím .NET prostředků, jehož výsledkem jsou instrukce pro daný procesor. .NET má oproti Javě výhodu v možnosti použití různých programovacích jazyků pro kompilaci do mezikódu.
.NET Framework .NET Framework zprostředkovává prostředí nezbytné pro běh aplikací založených na .NET technologiích. Poskytuje knihovny a rozhraní pro tyto aplikace. Microsoft
3/13
Karel Dytrych Projekt Mono tento framework vydává jako část operačního systému, která se dá zdarma stáhnout a nainstalovat. Je tedy určený pouze pro operační systémy Windows. .NET Framework v podstatě představuje funkční abstraktní vrstvu pro .NET aplikace.
Zásadní změna v přístupu k prostředkům systému Hlavní rozdíl ve vývoji aplikací je v tom, že dříve program vytvořený v prostředí Visual C++ za pomocí Windows Forms používal MFC (Microsoft Foundation Classes), které přímo volaliWin32 API. Programy nyní využívají prostředky .NET Frameworku. Tento přístup zaručuje systémovou nezávislost. .NET Framework zpracovává nízkoúrovňové části aplikací, s kterými běžný programátor ani nepřijde do styku. Jde především o následující služby: • • • •
Tvorba, a správa zpracování vláken kódu. Správa paměti, dealokace objektů. Bezpečnost, kontrola oprávnění k prováděným operacím. Správa knihoven a komponent.
Tyto operace spravuje část zvaná Common Language Runtime (CLR). Base Class Library (BCL) je knihovna tříd dostupná všem jazykům používajících .NET Framework. BCL poskytuje třídy, které zapouzdřují nejčastější pomocné funkce – práce se soubory, interakce s databázemi, zobrazování grafiky, třídění, síťovou komunikaci apod. ADO.NET je knihovna určená k manipulaci s daty a XML. Windows Forms jsou knihovny pro vývoj uživatelského prostředí (GUI) aplikací. ASP.NET jsou knihovny pro vývoj webových aplikací.
Schéma .NET Frameworku
Obrázek 1 Technologie .NET, Zdroj: Zive.cz
4/13
Karel Dytrych Projekt Mono Podporované jazyky .NET Frameworku APL, C++, C#, Cobol, Component Pascal, Curriculum, Eiffel, Forth, Fortran, Haskell, Java Language, Microsoft JScript, Mercury, Mondrian, Oberon, Oz, Pascal, Perl, Python, RPG, Scheme, Small Talk, Standard ML, Microsoft Visual Basic
Hlavní rysy projektu Mono • • • • • •
Podpora ASP.NET a Windows Forms aplikací. Nezávislost na použité platformě. Základ položený na standardech ECMA/ISO. Možnost provozu .NET, Javy, Pythonu, a dalších jazyků. Otevřené zdrojové kódy, svobodný software. Komerčně podporovaný (Novell).
Mono na Windows Mono lze nainstalovat na operační systém Windows souběžně s .NET frameworkem. Pro uživatele to znamená, že má na svém počítači dva podobné prostředky. Stačí stáhnou ze stránek Mono projektu instalátor, který vše bez problémů zařídí. Po instalaci je nutné se ujistit, že podadresář \bin Mona je v systémové proměnné PATH. Standardně se na systému využívá .NET frameworku, je výchozí. Nejsnáze lze použít Mono z příkazové řádky.
Příklad kompilace programu Mějme jednoduchý zdrojový kód konzolové aplikace v jazyce C# v souboru zdrojak.cs. V příkazové řádce poté můžeme program zkompilovat příkazy: •
csc /out:program_net.exe zdroj.cs (použije MS .NET C# kompilátor)
•
mcs –out:program_mono.exe zdroj.cs (použije Mono C# kompilátor)
Výsledkem máme 2 spustitelné soubory stejné velikosti. Jednotlivé byty souborů jsou ale různé, přesto program pracuje stejně. Mono Když spustíme program_mono.exe vykoná se program kompilovaný Mono kompilátorem pod .NET frameworkem. Když chceme program spustit pomocí Mono frameworku použijeme příkaz: mono program_mono.exe. Tento příkaz použije Just In Time (JIT) kompilátor k přeložení mezikódu do nativního kódu cílové platformy. Výsledek kompilace uchová v paměti pro příští spuštění. Mint Mint je také interpret pro vykonávání Mono aplikací. Nikdy nepoužívá JIT, projde vždy celý kód, přeloží ho a vykoná. Protože se program kompiluje pokaždé bývá použití mint pomalejší než mono. Nicméně JIT kompilace bývá na začátku pomalejší, a malé aplikace tak mohou být s mint rychlejší než při použití mono. Navíc se mint hodí pro použití na OS X, kde není k dispozici JIT. S Mono frameworkem můžeme spustit obě verze programu. 5/13
Karel Dytrych Projekt Mono
Grafické aplikace S grafickými aplikacemi je to složitější. Oproti konzolové aplikaci nestačí jen zkompilovat mcs kompilátorem. Když si např. ve Visual Studiu .NET připravíme jednoduchou formulářovou aplikaci a pokusíme se jí zkompilovat dostaneme zhruba následující výstup. mcs -out:app_mono.exe Form1.cs Form1.cs(13,23): error CS0234: The type or namespace name `Windows' does not exist in the namespace `System'. Are you missing an assembly reference? Compilation failed: 1 error(s), 0 warnings
Důvod neúspěchu kompilace tkví v tom, že Mono neimplementuje CLI úplně. Grafické .NET aplikace využívají jmenný prostor System.Windows.Forms, a ten obsahuje sadu prvků, které jsou navrženy speciálně pro Windows. Tento problém se dá řešit použitím Gtk. Gtk Gtk byl původně navržen pro podporu programu Gimp. Nyní existuje verze Gtk#, která je distribuovaná společně s Mono projektem jako jmenný prostor Gtk a GtkSharp. V Gtk jsou téměř všechny widgety, komponenty, atributy, události a metody (Label, Button, clicked, …) pojmenovány stejně jako ve windows.forms. Proto je díky Gtk zaručena přenositelnost grafických aplikací. Gtk jde nainstalovat i na systém Windows. Program s Gtk kompilujeme s parametrem -pkg:gtk-sharp. Grafické aplikace s Gtk lze provozovat pod .NETem stejně jako v Mono. Před prvním použitím je potřeba .NET framework nastavit pro použití s Gtk.
Vlastní implementace Windows.Forms Autorům později přišlo využívání Gtk# nebo alternativního Qt# jako špatné. Začali vyvíjet vlastní implementaci Windows.Forms. V současné době je téměř hotová a ve fázi testování. Ke stažení je na stránkách projektu jako nestabilní verze Mona. .NET framework 1.1 byl již téměř celý implementován včetně WinForms, u verze 2.x jsou vývojáři zhruba na 96 %. Lze kdykoliv ověřit na adrese: http://mono.ximian.com/class-status/
Instalace na Linux Na webu projektu Mono je k dispozici několik rpm balíčků. Především pro distribuce SUSE, Red Hat, a Fedora Core. Stažený balíček stačí nainstalovat příkazem rpm –Uvh –nodeps *.rpm. .NET aplikace se po instalaci na Linux spouštějí i kompilují stejně jako na Windows. Jednou zkompilované aplikace pomocí csc fungují bez potřeby dalších úprav.
Mono na zkoušku Nechcete-li si na svůj počítač instalovat Mono ani žádné jeho součásti, ale přesto ho chcete vyzkoušet, máte dvě možnosti. 6/13
Karel Dytrych Projekt Mono
VMware image – openSUSE Linux Přímo na stránkách projektu je k dispozici ke stažení VMware image operačního systému openSUSE s kompletně nainstalovanými nástroji a programy pro podporu Mono aplikací. Je to velice jednoduchá a pohodlná cesta jak vyzkoušet Mono v praxi. Hned po instalaci je k dispozici spousta ASP.NET a klasických aplikací včetně zdrojových kódů.
Live CD – Ubuntu Linux Druhá možnost jak otestovat Mono je využít projektu mono-live.com. Je to Live distribuce Ubuntu s velice podobným obsahem jako image openSUSE. Některé části hlavně u ASP.NET aplikací však nefungovali zcela správně. Na vyzkoušení rozhodně spíš doporučuji VMware image.
Vývojové prostředí pro Mono aplikace MonoDevelop je volně šiřitelné GNOME vývojové prostředí vyvinuté z SharpDevelop. Primárně bylo navrženo pro C# a ostatní .NET jazyky, ale je otevřeno jakémukoliv jazyku. MonoDevelop se snaží být víc než jen IDE, chce být co nejvíce otevřený a rozšiřitelný nástroj pro vývoj aplikací. MonoDevelop lze spustit na Windows i Mac.
Cíle MonoDevelopu do budoucna • • •
Být nejlepší vývojové prostředí na Unix systémy pro Mono. Podporovat a vylepšovat nadále Gtk#. Integrace kvalitního debuggeru a dokumentačních nástrojů.
MonoDevelop vs Visual Studio MonoDevelop poskytuje jak textový editor pro psaní zdrojového kódu s doplňováním a zvýrazňováním syntaxe, tak designer pro návrh grafických aplikací. Obzvláště designer je velice jednoduchý a neumí spoustu věcí v porovnání s Visual Studiem. S Visual Studiem má podobnou, a zdařilou správu projektů (solutions). Veliké plus pro MonoDevelop je, že umí importovat a pracovat s projekty Visual Studia .NET 2005. MonoDevelop mi během testování při psaní tří jednoduchých aplikací několikrát zhavaroval. Vždy bez nějaké vypsané chyby se odporoučel i s neuloženými daty. Celkově v porovnání obou IDE jde o rozdíl asi jako mezi Superbem (VS) a Felicií (MD). Aplikace pod Mono frameworkem bych asi vyvíjel ve Visual Studiu s následným importem a kompilací v MonoDevelopu.
7/13
Karel Dytrych Projekt Mono
Obrázek 2 Screenshot z Monodevelop
Převod aplikací na Mono Při převodu aplikací na Mono je důležité myslet na některé nekompatibility, např. neimplementované metody, třídy popř. ještě nestabilní třídy. V současné době jde především o System.Windows.Forms. K převodu aplikací lze využít program Mono Migration Analyzer, který umí analyzovat aplikace napsané pro .NET. Pomáhá odhalit volání dosud neimplementovaných metod, a sporných částí kódu. Použití tohoto nástroje by mělo sloužit jako vstupní bod při převodu aplikací. Dále je třeba myslet na rozdíly v operačních systémech jako je rozlišování velikosti znaků v názvech souborů, oddělovač adresářů v cestách k souborům („/“ vs „\“), a další. U ASP.NET aplikací také nefungují dosud neimplemetované Enterprise Services a cross-process transakce. Naproti tomu obvykle není potřeba velkých změn u databází. Mono podporuje mnoho běžných a dostupných databází, včetně MS SQL.
8/13
Karel Dytrych Projekt Mono
Obrázek 3 Mono Migration Analyzer
Webové aplikace ASP.NET a Mono K provozu webových aplikací založených na ASP.NET je potřeba XSP server a popř. modul do Apache mod_mono. Máme dvě hlavní možnosti: • •
Apache hosting: využívající mod_mono a XSP. XSP: jednoduchý samostatný webový server napsaný v C#, pro hostování ASP.NET aplikací. Jednoznačná volba pro začátek.
Pro ostrý provoz aplikací doporučují samotní autoři použít mod_mono Apache. Poskytuje široké možnosti v nastavení, a dodává tak velkou flexibilitu. Pro rychlý začátek nebo testování je ale XSP ideální řešení. Více pokročilí uživatelé mohou použít také HttpListener.
ASP.NET hosting s Apachem Webový server Apache (http://httpd.apache.org) je nejrozšířenější webový server současnosti. Podle serveru Netcraft.vom drží 60% podíl webserverů (02/2007). Mono tak přiblíží ASP.NET velkému procentu vývojářů. Mod_mono běží uvnitř Apache, a obsluhuje všechny ASP.NET požadavky voláním externího programu „mod-mono-server“, což je speciální verze XSP. K provozu je potřeba nainstalovat Mono, mod_mono a xsp komponenty. Mod_mono představuje část spolupracující s Apachem a XSP obsahuje engine pro ASP.NET. Vše se dá stáhnout ze stránek projektu Mono.
9/13
Karel Dytrych Projekt Mono
Instalace modulu mod_mono, konfigurace Apache Dříve než je možné pustit se do samotné instalace modulu mod_mono musíme mít nainstalován následující software: • • •
Mono XSP Apache
Instalace mod_mono 1. Nejdříve musíme stáhnou zdrojové kódy modulu z webu Mono projektu. 2. Zdrojové kódy rozbalíme příkazem: tar –xvzf mod_mono_source.tar.gz. 3. V adresáři do kterého se nám modul rozbalil nakonfigurujeme instalaci příkazem ./configure --prefix=/usr (Nastavení adresáře). 4. Vykonáme příkaz make, a poté make install. Konfigurace Apache • Nejdříve otevřeme konfigurační soubor Apache – http.conf. • Potřebujeme aby Apache zavedl modul do paměti, toho docílíme přidáním následujícího řádku: LoadModule mono_module /usr/modules/mod_mono.so (cesta k modulu může být různá). • Vytvoříme v Apache Alias pro adresář kde máme umístěny ASP.NET stránky. Alias /AspNet "/home/kjn/aspnet_stranky" MonoApplications "/AspNet:/home/kjn/aspnet_stranky"
•
Dále musíme nastavit jaký modul má Apache použít pro obsluhu požadavků. #Pro Apache 1.3
SetHandler mono DirectoryIndex index.aspx #Apache 2
SetHandler mono
•
Aby vše fungovalo server XSP musí poskytovat výstup ASP.NET aplikace, viz. konfigurace XSP. xsp --applications /AspNet:/home/kjn/aspnet_stranky/
Spuštěná aplikace je nyní přístupná pod adresami http://localhost/AspNet (Apache), nebo http://localhost:8080/AspNet přímo přes XSP.
10/13
Karel Dytrych Projekt Mono Konfigurace VirtualHostů
DocumentRoot /www_asp ServerName www.example.com MonoApplications default "/:/www_asp" MonoDocumentRootDir "/www_asp" SetHandler mono
Nastavení Handleru pro více přípon souborů AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx .axd
Ovládací panel modulu mod_mono
SetHandler mono-ctrl Order deny,allow Deny from all Allow from 127.0.0.1
ASP.NET hosting pouze na webserveru XSP XSP je samostatný webový server napsaný v C#, pro hostování ASP.NET aplikací s minimálním úsilím. XSP funguje jak s .NET na Windows, tak s Monem. XSP stačí spustit jeho spouštěcím souborem a již naslouchá na svém výchozím portu 8080 (Linuxu) nebo 8088 (Windows). XSP podporuje SSL i TLS.
Konfigurace XSP Webserver XSP se konfiguruje pomocí parametrů při spouštění serveru, nebo pomocí XML souborů s příponou config v adresáři s instalací XSP. Příklad konfiguračního souboru
11/13
Karel Dytrych Projekt Mono
Některé parametry konfigurace XSP serveru --Parametr
appSettings v XML
Hodnota
port N
MonoServerPort
address N root ADR appconfigfile S appconfigdir D
MonoServerAddress MonoServerRootDir MonoApplicationsConfigFil e MonoApplicationsConfigDir
N představuje TCP port na kterém XSP naslouchá N je IP adresa na které XSP naslouchá Server automaticky změní adresář na tento Načte konfiguraci z XML souboru S
applications A
MonoApplications
nonstop
Přidá nastavení z XML souborů nalezených adresáři D (soubory s příponou .webapp) Čárkou oddělený seznam virtuálních adresářů pro aplikace běžící na serveru. Nezastavuje server po stisku Enteru.
Závěr Mono je velice zajímavý projekt kterému bych osobně přál úspěch. Řeší veliký problém s přenositelností software mezi operačními systémy. Její prosazení nebude nikterak jednoduché, má velikou konkurenci v podobě hodně rozšířené Javy. Java má již velikou podporu (Sun, Oracle, …) a komunitu. Naopak Mono by mohlo díky své kompatibilitě s .NETem částečně těžit i z jeho úspěchu. Mono má nyní výhodu že se neustále a rychle vyvíjí. Vznikají podpory pro další jazyky a smazává se rozdíl mezi ním a .NET frameworkem. Určitě časem přiláká spoustu vývojářů. Já už nyní jsem jeden z nich.
Literatura Ecma International: Standard ECMA-334 [online]. URL: http://www.ecmainternational.org/publications/standards/Ecma-334.htm Ecma International: Standard ECMA-334 [online]. URL: http://www.ecmainternational.org/publications/standards/Ecma-335.htm Microsoft: Definice základních součástí .NET [online]. URL: http://www.microsoft.com/cze/net/basics/whatis.asp Redakce Živě a Microsoft: Začínáme s ASP.NET 2.0 [online]. URL: http://www.zive.cz/h/Programovani/AR.asp?ARI=125787 Startvbdotnet: .NET Framework and Languages [online]. URL: http://www.startvbdotnet.com/dotnet/languages.aspx Wikipedia: .NET Framework [online]. URL: http://en.wikipedia.org/wiki/.NET_Framework Wikipedia: Mono (software) [online]. URL: http://en.wikipedia.org/wiki/Mono_(software) Monodevelop: Monodevelop [online]. URL: http://www.monodevelop.com/ Mono: Mono [online]. URL: http://www.mono-project.com/
12/13
Karel Dytrych Projekt Mono NetCraft: February 2007 Web Server Survey [online]. URL: http://news.netcraft.com/archives/2007/02/02/february_2007_web_server_surve y.html The Code Project: MONO: an alternative for the .NET framework [online]. URL: http://www.codeproject.com/cpnet/mono-merta.asp Brian Delahunty: Introduction to Mono - ASP.NET with XSP and Apache [online]. URL: http://www.codeproject.com/cpnet/introtomono2.asp
13/13