<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Dominig&amp;feed=atom&amp;limit=50&amp;target=Dominig&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Dominig&amp;feed=atom&amp;limit=50&amp;target=Dominig&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Dominig"/>
		<updated>2013-06-19T10:19:23Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/UMMS_User_Manual</id>
		<title>UMMS User Manual</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/UMMS_User_Manual"/>
				<updated>2013-02-05T13:32:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Source code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UMMS User Manual and Sample code =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This page is the user manual and some sample code for the Universal Multi Media Service (UMMS).&amp;lt;br&amp;gt;&lt;br /&gt;
The UMMS general description is on the '''[[Umms|main page]]'''. &lt;br /&gt;
== Source code ==&lt;br /&gt;
You can get the code from: &lt;br /&gt;
git://gitorious.org/meego-middleware/umms.git&lt;br /&gt;
&lt;br /&gt;
Mailing for question&lt;br /&gt;
https://lists.tizen.org/listinfo/general&lt;br /&gt;
&lt;br /&gt;
== Service Name ==&lt;br /&gt;
com.UMMS&lt;br /&gt;
&lt;br /&gt;
== Objects and Interfaces ==&lt;br /&gt;
''ObjectManager'': Object to create and remove ''MediaPlayer'' object.&lt;br /&gt;
  Path:      /com/UMMS/ObjectManager&lt;br /&gt;
  Interface: com.UMMS.ObjectManager.iface&lt;br /&gt;
&lt;br /&gt;
''MediaPlayer'': Player object to control the playback of media assets.&lt;br /&gt;
  Path:      Returned by ''ObjectManager''&lt;br /&gt;
  Interface: com.UMMS.MediaPlayer&lt;br /&gt;
&lt;br /&gt;
''AudioManager'': Object to manage the system audio output.&lt;br /&gt;
  Path:      /com/UMMS/AudioManager&lt;br /&gt;
  Interface: com.UMMS.AudioManger&lt;br /&gt;
&lt;br /&gt;
''VideoOutput'': Object to control the display.&lt;br /&gt;
  Path:      /com/UMMS/VideoOutput&lt;br /&gt;
  Interface: com.UMMS.VideoOutput&lt;br /&gt;
&lt;br /&gt;
''PlayingContentMetadataViewer'': Object to provide the metadata of all currently playing content.&lt;br /&gt;
  Path:      /com/UMMS/PlayingContentMetadataViewer&lt;br /&gt;
  Interface: com.UMMS.PlayingContentMetadataViewer&lt;br /&gt;
&lt;br /&gt;
== API Reference ==&lt;br /&gt;
* '''''Interface com.UMMS.ObjectManager.iface'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
&lt;br /&gt;
   '''RequestMediaPlayer(s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in attended-execution mode. The ''ObjectManager'' will create a new ''MediaPlayer'' object,&lt;br /&gt;
     register the object on the bus and return the object path to client.&lt;br /&gt;
     Parameters: &lt;br /&gt;
         object_path(out): The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RequestMediaPlayerUnattended(d: time_to_execution, s(out): token, s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in unattended-execution mode. The ''ObjectManager'' will create a new ''MediaPlayer'' object,&lt;br /&gt;
     register it on the bus and return the object path to client.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                time_to_execution: Times in seconds for which this ''MediaPlayer'' object keep alive.&lt;br /&gt;
                token(out):        The unique token belongs to this execution. Application can use it to identify the execution log file which &lt;br /&gt;
                                   named by the token. &lt;br /&gt;
                object_path(out):  The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RequestScheduledRecorder(d: start_time, d: duration, s: uri, s: location, s(out): token, s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in unattended-execution mode and schedule it to record the media pointed by &amp;quot;uri&amp;quot;. The ''ObjectManager'' will create a &lt;br /&gt;
     new ''MediaPlayer'' object, register it on the bus and return the object path to client.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                start_time:        The delay to start recording in seconds.&lt;br /&gt;
                duration:          How long to record, in seconds.&lt;br /&gt;
                uri:               Specify the media to record.&lt;br /&gt;
                location:          Location to store the recorded media.&lt;br /&gt;
                token(out):        The unique token belongs to this execution. Application can use it to identify the execution log file which &lt;br /&gt;
                                   named by the token. &lt;br /&gt;
                object_path(out):  The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RemoveMediaPlayer(s: object_path)'''&lt;br /&gt;
     Remove the ''MediaPlayer'' object which was exposed on the object_path.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                object_path: The path on which this object was exposed.&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''''Interface com.UMMS.MediaPlayer'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
&lt;br /&gt;
   '''SetUri(s: uri)'''&lt;br /&gt;
     Set URI to UMMS.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                uri: URI to set.&lt;br /&gt;
&lt;br /&gt;
   '''SetSubtitleUri(s: sub_uri)'''&lt;br /&gt;
     Set subtitle URI to UMMS.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                sub_uri: URI to identify the subtitle file.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentUri(s(out): current_uri)'''&lt;br /&gt;
     Get current URI.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_uri(out): current URI.&lt;br /&gt;
&lt;br /&gt;
   '''SetTarget(i: type, a{sv}: param)'''&lt;br /&gt;
     Set video target and pass all target parameters to UMMS. The video target is where your decoded video data should be rendered.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                type:  The type of video target.&lt;br /&gt;
                       0:XWindow,       the video data will be rendered on the X Window.&lt;br /&gt;
                       1:DataCopy,      the video data will be copied to a memory instead of directly rendering. E.g. copied to a GL Texture. &lt;br /&gt;
                       2:Socket,        the video data will sent to a socket.&lt;br /&gt;
                       3:ReservedType0, reserved for custom target.&lt;br /&gt;
                       4:ReservedType1, reserved for custom target.&lt;br /&gt;
                       5:ReservedType2, reserved for custom target.&lt;br /&gt;
                       6:ReservedType3, reserved for custom target.&lt;br /&gt;
                param: The list of key-value pair to specify the attributes of the target. The definition of attribute structure is &lt;br /&gt;
                       target-specific and up to the implementor. The UMMS framwork just defined the XWindow target attribute: &lt;br /&gt;
                       Key          Value&lt;br /&gt;
                       &amp;quot;window-id&amp;quot;  value of &amp;quot;i&amp;quot; type indicates the window id. &lt;br /&gt;
&lt;br /&gt;
   '''Play()'''&lt;br /&gt;
&lt;br /&gt;
   '''Pause()'''&lt;br /&gt;
&lt;br /&gt;
   '''Stop()'''&lt;br /&gt;
&lt;br /&gt;
   '''SetPosition(x: pos)'''&lt;br /&gt;
     Seek to position.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pos: Stream position in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetPosition(x(out): pos)'''&lt;br /&gt;
     Get the current position of stream in millisecond.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pos(out): The current stream position.&lt;br /&gt;
&lt;br /&gt;
   '''SetPlaybackRate(d: rate）'''&lt;br /&gt;
      Set the playback rate. &lt;br /&gt;
     Parameters:&lt;br /&gt;
                rate: rate to playback the media asset.&lt;br /&gt;
&lt;br /&gt;
   '''GetPlaybackRate(d(out): rate）'''&lt;br /&gt;
      Get current playback rate.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                rate(out): The current playback rate.&lt;br /&gt;
&lt;br /&gt;
   '''SetVolume(i: volume)'''&lt;br /&gt;
&lt;br /&gt;
   '''GetVolume(i(out): volume)'''&lt;br /&gt;
&lt;br /&gt;
   '''SetVideoSize(u: x, u: y, u: w, u: h)'''&lt;br /&gt;
     Set video dimension.&lt;br /&gt;
     Paramters:&lt;br /&gt;
               x: X coordinate of top-left.&lt;br /&gt;
               y: Y coordinate of top-left.&lt;br /&gt;
               w: Width of video rectangle.&lt;br /&gt;
               h: Height of video rectangle.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoSize(u(out): w, u(out): h)'''&lt;br /&gt;
     Get current width and height of video rectangle.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                w(out): Width of current video rectangle.&lt;br /&gt;
                h(out): Height of current video rectangle.&lt;br /&gt;
&lt;br /&gt;
   '''GetBufferedTime(x(out): length_time)'''&lt;br /&gt;
     Get the approximate duration of playable data downloaded so far in millisecond.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                length_time(out): amount of playable data downloaded so far in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetBufferedBytes(x(out): length_byte)'''&lt;br /&gt;
     Get the approximate amount of playable data downloaded so far in bytes. &lt;br /&gt;
     Parameters:&lt;br /&gt;
                length_byte(out): amount of playable data downloaded so far in byte.&lt;br /&gt;
&lt;br /&gt;
   '''GetMediaSizeTime(x(out): duration)'''&lt;br /&gt;
     Get the duration of the media.&lt;br /&gt;
     Parameters: &lt;br /&gt;
                duration(out): duration in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetMediaSizeBytes(x(out): size)'''&lt;br /&gt;
     Get the total size of the media file.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                size(out): total size of the media file.&lt;br /&gt;
&lt;br /&gt;
   '''HasVideo(b(out): has_video)'''&lt;br /&gt;
     Indicates the existance of video stream in the media asset.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                has_video(out): True if media asset has video. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''HasAudio(b(out): has_audio)'''&lt;br /&gt;
     Indicates the existance of audio stream in the media asset.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                has_audio(out): True if media asset has audio. False otherwise. &lt;br /&gt;
&lt;br /&gt;
   '''IsStreaming(b(out): is_stream)'''&lt;br /&gt;
     Indicates whether the URI represents a streaming media.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_stream(out): True for streamimg media. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''IsSeekable(b(out): is_seekable)'''&lt;br /&gt;
     Indicates whether this media asset is seekable.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_seekable(out): True for seekable. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''SupportFullScreen(b(out): support_fullscreen)'''&lt;br /&gt;
     Indicates whether the backend supports a fullscreen mode.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                support_fullscreen(out): True if backend supports fullscreen. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''GetPlayerState(i(out): current_state)'''&lt;br /&gt;
     Get current state of ''MediaPlayer'' object.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_state(out): &lt;br /&gt;
                                   0:Null,&lt;br /&gt;
                                   1:Stopped,&lt;br /&gt;
                                   2:Paused,&lt;br /&gt;
                                   3:Playing&lt;br /&gt;
&lt;br /&gt;
   '''Reply()'''&lt;br /&gt;
     Response the UMMS server’s heartbeat check. In the attended-execution mode, client should connect to NeedReply&lt;br /&gt;
     signal with a callback in which Reply() method should be called.&lt;br /&gt;
&lt;br /&gt;
   '''SetProxy(a{sv}: param)'''&lt;br /&gt;
     Set proxy stuffs.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                param: A list of key-value pair to sepcify the proxy attributes.&lt;br /&gt;
                       The attribute structure is defined as:&lt;br /&gt;
                       Key          Value&lt;br /&gt;
                       &amp;quot;proxy-uri&amp;quot;  value of &amp;quot;s&amp;quot; type indicates HTTP proxy server URIl&lt;br /&gt;
                       &amp;quot;proxy-id&amp;quot;   value of &amp;quot;s&amp;quot; type indicates HTTP proxy user id for authentication.&lt;br /&gt;
                       &amp;quot;proxy-pw&amp;quot;   value of &amp;quot;s&amp;quot; type indicates HTTP proxy user password for authentication&lt;br /&gt;
&lt;br /&gt;
   '''Suspend()'''&lt;br /&gt;
     Suspend current execution of player. After this invoking, all the resources ocuppied by this session will be released.&lt;br /&gt;
&lt;br /&gt;
   '''Restore()'''&lt;br /&gt;
     Play the media asset from the position at where it suspended.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentVideo(i(out): current_video)'''&lt;br /&gt;
     Get current playing video stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_video(out): stream number of current playing video.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentAudio(i(out): current_audio)'''&lt;br /&gt;
     Get current playing audio stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_audio(out): stream number of current playing audio.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentSubtitle(i(out): current_sub)'''&lt;br /&gt;
     Get current playing subtitle stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_sub(out): stream number of current playing subtitle.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentVideo(i: current_video)'''&lt;br /&gt;
     Choose the video stream to play.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_video: stream number of video stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentAudio(i: current_audio)'''&lt;br /&gt;
     Choose the audio stream to play.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_audio: stream number of audio stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentSubtitle(i: current_sub)'''&lt;br /&gt;
     Choose the subtitle stream to play. This method is for the media asset with embedded subtitle.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_sub: stream number of subtitle stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoNum(i(out): video_num)'''&lt;br /&gt;
     Get total number of video streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                video_num(out): Total number of video streams.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioNum(i(out): audio_num)'''&lt;br /&gt;
     Get total number of audio streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                audio_num(out): Total number of audio streams.&lt;br /&gt;
        &lt;br /&gt;
   '''SetBufferDepth(i: format, x: buf_depth)'''&lt;br /&gt;
     Set buffer depth when buffering network streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                format: 0 for Time, 1 for Btye.&lt;br /&gt;
                buf_depth: The depth to buffer data. &lt;br /&gt;
&lt;br /&gt;
   '''GetBufferDepth(i: format, x(out): buf_depth)'''&lt;br /&gt;
     Get buffer depth.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                format: 0 for Time, 1 for Btye.&lt;br /&gt;
                buf_depth(out): The depth to buffer data. &lt;br /&gt;
&lt;br /&gt;
   '''SetMute(i: is_mute)'''&lt;br /&gt;
     Mute the audio.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_mute: 0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
   '''IsMute(i(out): is_mute)'''&lt;br /&gt;
      Get the mute state.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 is_mute(out): 0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
   '''SetScaleMode(i: mode)'''&lt;br /&gt;
      Set the scale mode.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 mode: &lt;br /&gt;
                      0: do not scale.&lt;br /&gt;
                      1: fill entire target, regardless of original video aspect ratio.&lt;br /&gt;
                      2: scale the video with respect to original video aspect ratio.&lt;br /&gt;
                      3: fill the whole screen but keep the ratio, some part of video may out of screen.&lt;br /&gt;
&lt;br /&gt;
   '''GetScaleMode(i(out): mode)'''&lt;br /&gt;
      Get the scale mode.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 mode(out): &lt;br /&gt;
                      0: do not scale.&lt;br /&gt;
                      1: fill entire target, regardless of original video aspect ratio.&lt;br /&gt;
                      2: scale the video with respect to original video aspect ratio.&lt;br /&gt;
                      3: fill the whole screen but keep the ratio, some part of video may out of screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoCodec(i: num, s(out): video_codec)'''&lt;br /&gt;
      Get the codec of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 num: video stream number.&lt;br /&gt;
                 video_codec(out): codec string.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioCodec(i: num, s(out): audio_codec)'''&lt;br /&gt;
      Get the codec of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 num: audio stream number.&lt;br /&gt;
                 audio_codec(out): codec string.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoBitrate(i: num, i(out): video_bitrate)'''&lt;br /&gt;
     Get the bitrate of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 num: video stream number.&lt;br /&gt;
                 video_bitrate(out): bitrate of the video stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioBitrate(i: channel, i(out): audio_bitrate)'''&lt;br /&gt;
     Get the bitrate of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 num: audio stream number.&lt;br /&gt;
                 audio_bitrate(out): bitrate of the audio stream.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''GetEncapsulation(s(out): encapsulation)'''&lt;br /&gt;
     Get the container format.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                encapsulation(out): the container format.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioSampleRate(i: num, i(out): sample_rate)'''&lt;br /&gt;
     Get the sample rate of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:              audio stream number.&lt;br /&gt;
                sample_rate(out): sample rate of the audio stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoFrameRate(i: num, i(out): frame_rate_num, i(out): frame_rate_denum)'''&lt;br /&gt;
     Get the frame rate of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:                   video stream number.&lt;br /&gt;
                frame_rate_num(out):   numerator of frame rate.&lt;br /&gt;
                frame_rate_denum(out): denumerator of frame rate.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoResolution(i: num, i(out): width, i(out): height)'''&lt;br /&gt;
     Get the original resolution of the video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:         video stream number.&lt;br /&gt;
                width(out):  width of video.&lt;br /&gt;
                height(out): height of video.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoAspectRatio(i: num, i(out): ratio_num, i(out): ratio_denum)'''&lt;br /&gt;
     Get the original aspect ratio of the video stream specified by the &amp;quot;num&amp;quot;.      &lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:              video stream number.&lt;br /&gt;
                ratio_num(out):   numerator of the aspect ratio.&lt;br /&gt;
                ratio_denum(out): denumerator of the aspect ratio.&lt;br /&gt;
&lt;br /&gt;
   '''GetProtocolName(s(out): protocol_name)'''&lt;br /&gt;
     Get the tranport protocol name.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                protocol_name(out): name of the protocol.&lt;br /&gt;
&lt;br /&gt;
   '''Record(b: to_record, s: location)'''&lt;br /&gt;
     Start or stop the recording of current playing DVB stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                to_record: True to start recording, False to stop recording.&lt;br /&gt;
                location:  path to store the record file.&lt;br /&gt;
&lt;br /&gt;
   '''GetPat(aa{sv}(out): pat)'''&lt;br /&gt;
     Get the &amp;quot;Program Association Table&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pat(out): the &amp;quot;Program Association Table&amp;quot;. &lt;br /&gt;
                          The structure of pat is a list of mapping table. Each mapping table has two key-value pairs:&lt;br /&gt;
                          Key               Value&lt;br /&gt;
                          &amp;quot;program-number&amp;quot;  value of &amp;quot;u&amp;quot; type which indicates the program number. &lt;br /&gt;
                          &amp;quot;pid&amp;quot;:            value of &amp;quot;u&amp;quot; type which indicates the pid of the pat.&lt;br /&gt;
&lt;br /&gt;
   '''GetPmt(u(out): program_number, u(out): pcr_pid, aa{sv}(out): stream_info)'''&lt;br /&gt;
     Get the &amp;quot;Program Map Table&amp;quot; of current playing DVB program.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                program_number(out): the number of current playing program.&lt;br /&gt;
                pcr_pid(out):        the pcr pid.&lt;br /&gt;
                stream_info(out):    the information of all elementary streams multiplexed in this program.&lt;br /&gt;
                                     The structure of stream_info is a list of mapping table. Each mapping table has two key-value pairs:&lt;br /&gt;
                                     Key            Value&lt;br /&gt;
                                     &amp;quot;stream-type&amp;quot;  value of &amp;quot;u&amp;quot; type indicates the stream type.&lt;br /&gt;
                                     &amp;quot;pid&amp;quot;          value of &amp;quot;u&amp;quot; type indicates the pid of the elementary stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetAssociatedDataChannel(s(out): ip, i(out): port)'''&lt;br /&gt;
     Get the ip and port from which the client can retrive DVB associated data(ts packets).&lt;br /&gt;
     Parameters:&lt;br /&gt;
                ip(out):   ip string&lt;br /&gt;
                port(out): port string&lt;br /&gt;
&lt;br /&gt;
Signals:&lt;br /&gt;
   '''Initialized'''&lt;br /&gt;
     Pipeline engine initialized.&lt;br /&gt;
&lt;br /&gt;
   '''Eof'''&lt;br /&gt;
     End of file or stream.&lt;br /&gt;
&lt;br /&gt;
   '''Error(u: id, s: message)'''&lt;br /&gt;
     Error happened.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                id:      error id.&lt;br /&gt;
                message: error message.&lt;br /&gt;
&lt;br /&gt;
   '''Buffering(i: percent)'''&lt;br /&gt;
     Buffering percent, from 0 to 100.&lt;br /&gt;
&lt;br /&gt;
   '''Seeked'''&lt;br /&gt;
    Seeking done.&lt;br /&gt;
&lt;br /&gt;
   '''Stopped'''&lt;br /&gt;
    Player stopped.&lt;br /&gt;
&lt;br /&gt;
   '''PlayerStateChanged(i: old_state, i: new_state)'''&lt;br /&gt;
    Player state changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               old_state: previous state of player, value definition is the same as state parameter of GetPlayerState. &lt;br /&gt;
               new_state: current state of player, value definition is the same as state parameter of GetPlayerState.&lt;br /&gt;
&lt;br /&gt;
   '''NeedReply'''&lt;br /&gt;
    Singal to request the client to reply. This is used for client existence checking. The client should call the Reply() method to response this &lt;br /&gt;
    signal.&lt;br /&gt;
&lt;br /&gt;
   '''Suspended'''&lt;br /&gt;
    The player has been suspended. That means all the resources ocuppied by this player has been released.&lt;br /&gt;
&lt;br /&gt;
   '''Restored'''&lt;br /&gt;
    The player restored from suspened.&lt;br /&gt;
&lt;br /&gt;
   '''NoResource'''&lt;br /&gt;
    Resource unavailable.&lt;br /&gt;
&lt;br /&gt;
   '''VideoTagChanged(i: video_number)'''&lt;br /&gt;
    The metadata of a video stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               video_number: video stream number.&lt;br /&gt;
&lt;br /&gt;
   '''AudioTagChanged(i: audio_number)'''&lt;br /&gt;
    The metadata of a audio stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               audio_number: audio stream number.&lt;br /&gt;
&lt;br /&gt;
   '''TextTagChanged(i: text_number)'''&lt;br /&gt;
    The metadata of a text stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               text_number: text stream number.&lt;br /&gt;
&lt;br /&gt;
   '''RecordStart'''&lt;br /&gt;
    The recording started.&lt;br /&gt;
&lt;br /&gt;
   '''RecordStop'''&lt;br /&gt;
    The recording stopped.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.AudioManger'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''SetVolume(i: output_type, i: volume)'''&lt;br /&gt;
     Set the global audio volume on audio output specified by &amp;quot;output_type&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_type: output type id.&lt;br /&gt;
                             0, hdmi&lt;br /&gt;
                             1, spidf&lt;br /&gt;
                             2, i2s0&lt;br /&gt;
                             3, i2s1&lt;br /&gt;
                volume:      volume to set, range [0, 100]&lt;br /&gt;
&lt;br /&gt;
   '''GetVolume(i: output_type, i(out): volume)'''&lt;br /&gt;
     Set the global audio volume on audio output specified by &amp;quot;output_type&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_type: output type id.&lt;br /&gt;
                volume(out): current volume.&lt;br /&gt;
&lt;br /&gt;
   '''SetState(i: output_type, i: state)'''&lt;br /&gt;
     Mute/Unmute the audio output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 output_type: output type id.&lt;br /&gt;
                 state:       0 to unmute, 1 to mute.&lt;br /&gt;
&lt;br /&gt;
   '''GetState(i: output_type, i(out): state)'''&lt;br /&gt;
     Get the mute state of audio output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 output_type: output type id.&lt;br /&gt;
                 state(out):  0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.VideoOutput'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''GetValidVideoOutput(as(out): outputs)'''&lt;br /&gt;
     Get name of all the outputs.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                outputs(out): output names.&lt;br /&gt;
&lt;br /&gt;
   '''GetValidMode(s:output_name, as(out): modes)'''&lt;br /&gt;
     Get valid display modes of a output specified by output_name&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                modes(out):  valid display modes.&lt;br /&gt;
&lt;br /&gt;
   '''SetMode(s:output_name, s: mode)'''&lt;br /&gt;
     Set display mode of the output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                mode:       mode to set.&lt;br /&gt;
&lt;br /&gt;
   '''GetMode(s:output_name, s(out): mode)'''&lt;br /&gt;
     Get current display mode of the output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                mode(out):   current display mode.&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.PlayingContentMetadataViewer'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''GetPlayingContentMetadata(aa{sv}(out): playing_content_metadata)'''&lt;br /&gt;
     Get the current playing content metadata.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                playing_content_metadata(out): media content metadata&lt;br /&gt;
                                              The structure of playing_content_metadata is a list of mapping table. Each mapping table has 3 key-value pairs:&lt;br /&gt;
                                              Key                 Value&lt;br /&gt;
                                              &amp;quot;URI&amp;quot;               Value of &amp;quot;s&amp;quot; type indicates the current playing URI.&lt;br /&gt;
                                              &amp;quot;Title&amp;quot;             Value of &amp;quot;s&amp;quot; type indicates the title of the playing media content&lt;br /&gt;
                                              &amp;quot;Artist&amp;quot;            Value of &amp;quot;s&amp;quot; type indicates the artist of the playing media content&lt;br /&gt;
&lt;br /&gt;
Signals:&lt;br /&gt;
   '''MetadataUpdated(aa{sv}: metadata)'''&lt;br /&gt;
     Emitted when a metadata changed. e.g. A new player is requested to play a video.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                metadata: The same as playing_content_metadata&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
This is a sample application written in Python to play a URI by requesting an attended-execution media player instance. You can get the latest code from: git://gitorious.org:meego-middleware/umms.git&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import dbus&lt;br /&gt;
import dbus.mainloop.glib&lt;br /&gt;
import dbus.glib&lt;br /&gt;
&lt;br /&gt;
player_iface = None&lt;br /&gt;
loop = None&lt;br /&gt;
&lt;br /&gt;
def need_reply_cb ():&lt;br /&gt;
    player_iface.Reply()&lt;br /&gt;
&lt;br /&gt;
def eof_cb ():&lt;br /&gt;
  print &amp;quot;EOF....&amp;quot;&lt;br /&gt;
  loop.quit()&lt;br /&gt;
&lt;br /&gt;
#event loop&lt;br /&gt;
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)&lt;br /&gt;
&lt;br /&gt;
#get the system message deamon&lt;br /&gt;
bus=dbus.SystemBus()&lt;br /&gt;
&lt;br /&gt;
#get the 'com.UMMS.ObjectManager.iface'&lt;br /&gt;
bus_obj=bus.get_object('com.UMMS', '/com/UMMS/ObjectManager')&lt;br /&gt;
obj_mngr=dbus.Interface(bus_obj, 'com.UMMS.ObjectManager.iface')&lt;br /&gt;
&lt;br /&gt;
#request a media player for attended-execution&lt;br /&gt;
player_obj_path = obj_mngr.RequestMediaPlayer()&lt;br /&gt;
player_obj = bus.get_object(&amp;quot;com.UMMS&amp;quot;, player_obj_path)&lt;br /&gt;
player_iface =  dbus.Interface(player_obj, 'com.UMMS.MediaPlayer')&lt;br /&gt;
&lt;br /&gt;
#for the attended-execution, we must connect to the &amp;quot;NeedReply&amp;quot; signal&lt;br /&gt;
player_iface.connect_to_signal(&amp;quot;NeedReply&amp;quot;, need_reply_cb)&lt;br /&gt;
&lt;br /&gt;
#connect other signals you want&lt;br /&gt;
player_iface.connect_to_signal(&amp;quot;Eof&amp;quot;, eof_cb)&lt;br /&gt;
&lt;br /&gt;
#play a URI&lt;br /&gt;
player_iface.SetUri(&amp;quot;/tmp/sample.mp4&amp;quot;)&lt;br /&gt;
player_iface.Play()&lt;br /&gt;
&lt;br /&gt;
#event loop &lt;br /&gt;
loop = gobject.MainLoop()&lt;br /&gt;
loop.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/UMMS_User_Manual</id>
		<title>UMMS User Manual</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/UMMS_User_Manual"/>
				<updated>2013-02-05T13:32:26Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Source code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UMMS User Manual and Sample code =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This page is the user manual and some sample code for the Universal Multi Media Service (UMMS).&amp;lt;br&amp;gt;&lt;br /&gt;
The UMMS general description is on the '''[[Umms|main page]]'''. &lt;br /&gt;
== Source code ==&lt;br /&gt;
You can get the code from: &lt;br /&gt;
git://gitorious.org/meego-middleware/umms.git&lt;br /&gt;
&lt;br /&gt;
Mialing for question&lt;br /&gt;
https://lists.tizen.org/listinfo/general&lt;br /&gt;
&lt;br /&gt;
== Service Name ==&lt;br /&gt;
com.UMMS&lt;br /&gt;
&lt;br /&gt;
== Objects and Interfaces ==&lt;br /&gt;
''ObjectManager'': Object to create and remove ''MediaPlayer'' object.&lt;br /&gt;
  Path:      /com/UMMS/ObjectManager&lt;br /&gt;
  Interface: com.UMMS.ObjectManager.iface&lt;br /&gt;
&lt;br /&gt;
''MediaPlayer'': Player object to control the playback of media assets.&lt;br /&gt;
  Path:      Returned by ''ObjectManager''&lt;br /&gt;
  Interface: com.UMMS.MediaPlayer&lt;br /&gt;
&lt;br /&gt;
''AudioManager'': Object to manage the system audio output.&lt;br /&gt;
  Path:      /com/UMMS/AudioManager&lt;br /&gt;
  Interface: com.UMMS.AudioManger&lt;br /&gt;
&lt;br /&gt;
''VideoOutput'': Object to control the display.&lt;br /&gt;
  Path:      /com/UMMS/VideoOutput&lt;br /&gt;
  Interface: com.UMMS.VideoOutput&lt;br /&gt;
&lt;br /&gt;
''PlayingContentMetadataViewer'': Object to provide the metadata of all currently playing content.&lt;br /&gt;
  Path:      /com/UMMS/PlayingContentMetadataViewer&lt;br /&gt;
  Interface: com.UMMS.PlayingContentMetadataViewer&lt;br /&gt;
&lt;br /&gt;
== API Reference ==&lt;br /&gt;
* '''''Interface com.UMMS.ObjectManager.iface'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
&lt;br /&gt;
   '''RequestMediaPlayer(s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in attended-execution mode. The ''ObjectManager'' will create a new ''MediaPlayer'' object,&lt;br /&gt;
     register the object on the bus and return the object path to client.&lt;br /&gt;
     Parameters: &lt;br /&gt;
         object_path(out): The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RequestMediaPlayerUnattended(d: time_to_execution, s(out): token, s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in unattended-execution mode. The ''ObjectManager'' will create a new ''MediaPlayer'' object,&lt;br /&gt;
     register it on the bus and return the object path to client.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                time_to_execution: Times in seconds for which this ''MediaPlayer'' object keep alive.&lt;br /&gt;
                token(out):        The unique token belongs to this execution. Application can use it to identify the execution log file which &lt;br /&gt;
                                   named by the token. &lt;br /&gt;
                object_path(out):  The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RequestScheduledRecorder(d: start_time, d: duration, s: uri, s: location, s(out): token, s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in unattended-execution mode and schedule it to record the media pointed by &amp;quot;uri&amp;quot;. The ''ObjectManager'' will create a &lt;br /&gt;
     new ''MediaPlayer'' object, register it on the bus and return the object path to client.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                start_time:        The delay to start recording in seconds.&lt;br /&gt;
                duration:          How long to record, in seconds.&lt;br /&gt;
                uri:               Specify the media to record.&lt;br /&gt;
                location:          Location to store the recorded media.&lt;br /&gt;
                token(out):        The unique token belongs to this execution. Application can use it to identify the execution log file which &lt;br /&gt;
                                   named by the token. &lt;br /&gt;
                object_path(out):  The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RemoveMediaPlayer(s: object_path)'''&lt;br /&gt;
     Remove the ''MediaPlayer'' object which was exposed on the object_path.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                object_path: The path on which this object was exposed.&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''''Interface com.UMMS.MediaPlayer'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
&lt;br /&gt;
   '''SetUri(s: uri)'''&lt;br /&gt;
     Set URI to UMMS.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                uri: URI to set.&lt;br /&gt;
&lt;br /&gt;
   '''SetSubtitleUri(s: sub_uri)'''&lt;br /&gt;
     Set subtitle URI to UMMS.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                sub_uri: URI to identify the subtitle file.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentUri(s(out): current_uri)'''&lt;br /&gt;
     Get current URI.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_uri(out): current URI.&lt;br /&gt;
&lt;br /&gt;
   '''SetTarget(i: type, a{sv}: param)'''&lt;br /&gt;
     Set video target and pass all target parameters to UMMS. The video target is where your decoded video data should be rendered.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                type:  The type of video target.&lt;br /&gt;
                       0:XWindow,       the video data will be rendered on the X Window.&lt;br /&gt;
                       1:DataCopy,      the video data will be copied to a memory instead of directly rendering. E.g. copied to a GL Texture. &lt;br /&gt;
                       2:Socket,        the video data will sent to a socket.&lt;br /&gt;
                       3:ReservedType0, reserved for custom target.&lt;br /&gt;
                       4:ReservedType1, reserved for custom target.&lt;br /&gt;
                       5:ReservedType2, reserved for custom target.&lt;br /&gt;
                       6:ReservedType3, reserved for custom target.&lt;br /&gt;
                param: The list of key-value pair to specify the attributes of the target. The definition of attribute structure is &lt;br /&gt;
                       target-specific and up to the implementor. The UMMS framwork just defined the XWindow target attribute: &lt;br /&gt;
                       Key          Value&lt;br /&gt;
                       &amp;quot;window-id&amp;quot;  value of &amp;quot;i&amp;quot; type indicates the window id. &lt;br /&gt;
&lt;br /&gt;
   '''Play()'''&lt;br /&gt;
&lt;br /&gt;
   '''Pause()'''&lt;br /&gt;
&lt;br /&gt;
   '''Stop()'''&lt;br /&gt;
&lt;br /&gt;
   '''SetPosition(x: pos)'''&lt;br /&gt;
     Seek to position.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pos: Stream position in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetPosition(x(out): pos)'''&lt;br /&gt;
     Get the current position of stream in millisecond.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pos(out): The current stream position.&lt;br /&gt;
&lt;br /&gt;
   '''SetPlaybackRate(d: rate）'''&lt;br /&gt;
      Set the playback rate. &lt;br /&gt;
     Parameters:&lt;br /&gt;
                rate: rate to playback the media asset.&lt;br /&gt;
&lt;br /&gt;
   '''GetPlaybackRate(d(out): rate）'''&lt;br /&gt;
      Get current playback rate.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                rate(out): The current playback rate.&lt;br /&gt;
&lt;br /&gt;
   '''SetVolume(i: volume)'''&lt;br /&gt;
&lt;br /&gt;
   '''GetVolume(i(out): volume)'''&lt;br /&gt;
&lt;br /&gt;
   '''SetVideoSize(u: x, u: y, u: w, u: h)'''&lt;br /&gt;
     Set video dimension.&lt;br /&gt;
     Paramters:&lt;br /&gt;
               x: X coordinate of top-left.&lt;br /&gt;
               y: Y coordinate of top-left.&lt;br /&gt;
               w: Width of video rectangle.&lt;br /&gt;
               h: Height of video rectangle.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoSize(u(out): w, u(out): h)'''&lt;br /&gt;
     Get current width and height of video rectangle.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                w(out): Width of current video rectangle.&lt;br /&gt;
                h(out): Height of current video rectangle.&lt;br /&gt;
&lt;br /&gt;
   '''GetBufferedTime(x(out): length_time)'''&lt;br /&gt;
     Get the approximate duration of playable data downloaded so far in millisecond.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                length_time(out): amount of playable data downloaded so far in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetBufferedBytes(x(out): length_byte)'''&lt;br /&gt;
     Get the approximate amount of playable data downloaded so far in bytes. &lt;br /&gt;
     Parameters:&lt;br /&gt;
                length_byte(out): amount of playable data downloaded so far in byte.&lt;br /&gt;
&lt;br /&gt;
   '''GetMediaSizeTime(x(out): duration)'''&lt;br /&gt;
     Get the duration of the media.&lt;br /&gt;
     Parameters: &lt;br /&gt;
                duration(out): duration in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetMediaSizeBytes(x(out): size)'''&lt;br /&gt;
     Get the total size of the media file.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                size(out): total size of the media file.&lt;br /&gt;
&lt;br /&gt;
   '''HasVideo(b(out): has_video)'''&lt;br /&gt;
     Indicates the existance of video stream in the media asset.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                has_video(out): True if media asset has video. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''HasAudio(b(out): has_audio)'''&lt;br /&gt;
     Indicates the existance of audio stream in the media asset.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                has_audio(out): True if media asset has audio. False otherwise. &lt;br /&gt;
&lt;br /&gt;
   '''IsStreaming(b(out): is_stream)'''&lt;br /&gt;
     Indicates whether the URI represents a streaming media.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_stream(out): True for streamimg media. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''IsSeekable(b(out): is_seekable)'''&lt;br /&gt;
     Indicates whether this media asset is seekable.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_seekable(out): True for seekable. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''SupportFullScreen(b(out): support_fullscreen)'''&lt;br /&gt;
     Indicates whether the backend supports a fullscreen mode.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                support_fullscreen(out): True if backend supports fullscreen. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''GetPlayerState(i(out): current_state)'''&lt;br /&gt;
     Get current state of ''MediaPlayer'' object.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_state(out): &lt;br /&gt;
                                   0:Null,&lt;br /&gt;
                                   1:Stopped,&lt;br /&gt;
                                   2:Paused,&lt;br /&gt;
                                   3:Playing&lt;br /&gt;
&lt;br /&gt;
   '''Reply()'''&lt;br /&gt;
     Response the UMMS server’s heartbeat check. In the attended-execution mode, client should connect to NeedReply&lt;br /&gt;
     signal with a callback in which Reply() method should be called.&lt;br /&gt;
&lt;br /&gt;
   '''SetProxy(a{sv}: param)'''&lt;br /&gt;
     Set proxy stuffs.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                param: A list of key-value pair to sepcify the proxy attributes.&lt;br /&gt;
                       The attribute structure is defined as:&lt;br /&gt;
                       Key          Value&lt;br /&gt;
                       &amp;quot;proxy-uri&amp;quot;  value of &amp;quot;s&amp;quot; type indicates HTTP proxy server URIl&lt;br /&gt;
                       &amp;quot;proxy-id&amp;quot;   value of &amp;quot;s&amp;quot; type indicates HTTP proxy user id for authentication.&lt;br /&gt;
                       &amp;quot;proxy-pw&amp;quot;   value of &amp;quot;s&amp;quot; type indicates HTTP proxy user password for authentication&lt;br /&gt;
&lt;br /&gt;
   '''Suspend()'''&lt;br /&gt;
     Suspend current execution of player. After this invoking, all the resources ocuppied by this session will be released.&lt;br /&gt;
&lt;br /&gt;
   '''Restore()'''&lt;br /&gt;
     Play the media asset from the position at where it suspended.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentVideo(i(out): current_video)'''&lt;br /&gt;
     Get current playing video stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_video(out): stream number of current playing video.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentAudio(i(out): current_audio)'''&lt;br /&gt;
     Get current playing audio stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_audio(out): stream number of current playing audio.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentSubtitle(i(out): current_sub)'''&lt;br /&gt;
     Get current playing subtitle stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_sub(out): stream number of current playing subtitle.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentVideo(i: current_video)'''&lt;br /&gt;
     Choose the video stream to play.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_video: stream number of video stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentAudio(i: current_audio)'''&lt;br /&gt;
     Choose the audio stream to play.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_audio: stream number of audio stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentSubtitle(i: current_sub)'''&lt;br /&gt;
     Choose the subtitle stream to play. This method is for the media asset with embedded subtitle.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_sub: stream number of subtitle stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoNum(i(out): video_num)'''&lt;br /&gt;
     Get total number of video streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                video_num(out): Total number of video streams.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioNum(i(out): audio_num)'''&lt;br /&gt;
     Get total number of audio streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                audio_num(out): Total number of audio streams.&lt;br /&gt;
        &lt;br /&gt;
   '''SetBufferDepth(i: format, x: buf_depth)'''&lt;br /&gt;
     Set buffer depth when buffering network streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                format: 0 for Time, 1 for Btye.&lt;br /&gt;
                buf_depth: The depth to buffer data. &lt;br /&gt;
&lt;br /&gt;
   '''GetBufferDepth(i: format, x(out): buf_depth)'''&lt;br /&gt;
     Get buffer depth.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                format: 0 for Time, 1 for Btye.&lt;br /&gt;
                buf_depth(out): The depth to buffer data. &lt;br /&gt;
&lt;br /&gt;
   '''SetMute(i: is_mute)'''&lt;br /&gt;
     Mute the audio.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_mute: 0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
   '''IsMute(i(out): is_mute)'''&lt;br /&gt;
      Get the mute state.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 is_mute(out): 0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
   '''SetScaleMode(i: mode)'''&lt;br /&gt;
      Set the scale mode.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 mode: &lt;br /&gt;
                      0: do not scale.&lt;br /&gt;
                      1: fill entire target, regardless of original video aspect ratio.&lt;br /&gt;
                      2: scale the video with respect to original video aspect ratio.&lt;br /&gt;
                      3: fill the whole screen but keep the ratio, some part of video may out of screen.&lt;br /&gt;
&lt;br /&gt;
   '''GetScaleMode(i(out): mode)'''&lt;br /&gt;
      Get the scale mode.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 mode(out): &lt;br /&gt;
                      0: do not scale.&lt;br /&gt;
                      1: fill entire target, regardless of original video aspect ratio.&lt;br /&gt;
                      2: scale the video with respect to original video aspect ratio.&lt;br /&gt;
                      3: fill the whole screen but keep the ratio, some part of video may out of screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoCodec(i: num, s(out): video_codec)'''&lt;br /&gt;
      Get the codec of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 num: video stream number.&lt;br /&gt;
                 video_codec(out): codec string.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioCodec(i: num, s(out): audio_codec)'''&lt;br /&gt;
      Get the codec of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 num: audio stream number.&lt;br /&gt;
                 audio_codec(out): codec string.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoBitrate(i: num, i(out): video_bitrate)'''&lt;br /&gt;
     Get the bitrate of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 num: video stream number.&lt;br /&gt;
                 video_bitrate(out): bitrate of the video stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioBitrate(i: channel, i(out): audio_bitrate)'''&lt;br /&gt;
     Get the bitrate of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 num: audio stream number.&lt;br /&gt;
                 audio_bitrate(out): bitrate of the audio stream.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''GetEncapsulation(s(out): encapsulation)'''&lt;br /&gt;
     Get the container format.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                encapsulation(out): the container format.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioSampleRate(i: num, i(out): sample_rate)'''&lt;br /&gt;
     Get the sample rate of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:              audio stream number.&lt;br /&gt;
                sample_rate(out): sample rate of the audio stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoFrameRate(i: num, i(out): frame_rate_num, i(out): frame_rate_denum)'''&lt;br /&gt;
     Get the frame rate of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:                   video stream number.&lt;br /&gt;
                frame_rate_num(out):   numerator of frame rate.&lt;br /&gt;
                frame_rate_denum(out): denumerator of frame rate.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoResolution(i: num, i(out): width, i(out): height)'''&lt;br /&gt;
     Get the original resolution of the video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:         video stream number.&lt;br /&gt;
                width(out):  width of video.&lt;br /&gt;
                height(out): height of video.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoAspectRatio(i: num, i(out): ratio_num, i(out): ratio_denum)'''&lt;br /&gt;
     Get the original aspect ratio of the video stream specified by the &amp;quot;num&amp;quot;.      &lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:              video stream number.&lt;br /&gt;
                ratio_num(out):   numerator of the aspect ratio.&lt;br /&gt;
                ratio_denum(out): denumerator of the aspect ratio.&lt;br /&gt;
&lt;br /&gt;
   '''GetProtocolName(s(out): protocol_name)'''&lt;br /&gt;
     Get the tranport protocol name.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                protocol_name(out): name of the protocol.&lt;br /&gt;
&lt;br /&gt;
   '''Record(b: to_record, s: location)'''&lt;br /&gt;
     Start or stop the recording of current playing DVB stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                to_record: True to start recording, False to stop recording.&lt;br /&gt;
                location:  path to store the record file.&lt;br /&gt;
&lt;br /&gt;
   '''GetPat(aa{sv}(out): pat)'''&lt;br /&gt;
     Get the &amp;quot;Program Association Table&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pat(out): the &amp;quot;Program Association Table&amp;quot;. &lt;br /&gt;
                          The structure of pat is a list of mapping table. Each mapping table has two key-value pairs:&lt;br /&gt;
                          Key               Value&lt;br /&gt;
                          &amp;quot;program-number&amp;quot;  value of &amp;quot;u&amp;quot; type which indicates the program number. &lt;br /&gt;
                          &amp;quot;pid&amp;quot;:            value of &amp;quot;u&amp;quot; type which indicates the pid of the pat.&lt;br /&gt;
&lt;br /&gt;
   '''GetPmt(u(out): program_number, u(out): pcr_pid, aa{sv}(out): stream_info)'''&lt;br /&gt;
     Get the &amp;quot;Program Map Table&amp;quot; of current playing DVB program.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                program_number(out): the number of current playing program.&lt;br /&gt;
                pcr_pid(out):        the pcr pid.&lt;br /&gt;
                stream_info(out):    the information of all elementary streams multiplexed in this program.&lt;br /&gt;
                                     The structure of stream_info is a list of mapping table. Each mapping table has two key-value pairs:&lt;br /&gt;
                                     Key            Value&lt;br /&gt;
                                     &amp;quot;stream-type&amp;quot;  value of &amp;quot;u&amp;quot; type indicates the stream type.&lt;br /&gt;
                                     &amp;quot;pid&amp;quot;          value of &amp;quot;u&amp;quot; type indicates the pid of the elementary stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetAssociatedDataChannel(s(out): ip, i(out): port)'''&lt;br /&gt;
     Get the ip and port from which the client can retrive DVB associated data(ts packets).&lt;br /&gt;
     Parameters:&lt;br /&gt;
                ip(out):   ip string&lt;br /&gt;
                port(out): port string&lt;br /&gt;
&lt;br /&gt;
Signals:&lt;br /&gt;
   '''Initialized'''&lt;br /&gt;
     Pipeline engine initialized.&lt;br /&gt;
&lt;br /&gt;
   '''Eof'''&lt;br /&gt;
     End of file or stream.&lt;br /&gt;
&lt;br /&gt;
   '''Error(u: id, s: message)'''&lt;br /&gt;
     Error happened.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                id:      error id.&lt;br /&gt;
                message: error message.&lt;br /&gt;
&lt;br /&gt;
   '''Buffering(i: percent)'''&lt;br /&gt;
     Buffering percent, from 0 to 100.&lt;br /&gt;
&lt;br /&gt;
   '''Seeked'''&lt;br /&gt;
    Seeking done.&lt;br /&gt;
&lt;br /&gt;
   '''Stopped'''&lt;br /&gt;
    Player stopped.&lt;br /&gt;
&lt;br /&gt;
   '''PlayerStateChanged(i: old_state, i: new_state)'''&lt;br /&gt;
    Player state changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               old_state: previous state of player, value definition is the same as state parameter of GetPlayerState. &lt;br /&gt;
               new_state: current state of player, value definition is the same as state parameter of GetPlayerState.&lt;br /&gt;
&lt;br /&gt;
   '''NeedReply'''&lt;br /&gt;
    Singal to request the client to reply. This is used for client existence checking. The client should call the Reply() method to response this &lt;br /&gt;
    signal.&lt;br /&gt;
&lt;br /&gt;
   '''Suspended'''&lt;br /&gt;
    The player has been suspended. That means all the resources ocuppied by this player has been released.&lt;br /&gt;
&lt;br /&gt;
   '''Restored'''&lt;br /&gt;
    The player restored from suspened.&lt;br /&gt;
&lt;br /&gt;
   '''NoResource'''&lt;br /&gt;
    Resource unavailable.&lt;br /&gt;
&lt;br /&gt;
   '''VideoTagChanged(i: video_number)'''&lt;br /&gt;
    The metadata of a video stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               video_number: video stream number.&lt;br /&gt;
&lt;br /&gt;
   '''AudioTagChanged(i: audio_number)'''&lt;br /&gt;
    The metadata of a audio stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               audio_number: audio stream number.&lt;br /&gt;
&lt;br /&gt;
   '''TextTagChanged(i: text_number)'''&lt;br /&gt;
    The metadata of a text stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               text_number: text stream number.&lt;br /&gt;
&lt;br /&gt;
   '''RecordStart'''&lt;br /&gt;
    The recording started.&lt;br /&gt;
&lt;br /&gt;
   '''RecordStop'''&lt;br /&gt;
    The recording stopped.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.AudioManger'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''SetVolume(i: output_type, i: volume)'''&lt;br /&gt;
     Set the global audio volume on audio output specified by &amp;quot;output_type&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_type: output type id.&lt;br /&gt;
                             0, hdmi&lt;br /&gt;
                             1, spidf&lt;br /&gt;
                             2, i2s0&lt;br /&gt;
                             3, i2s1&lt;br /&gt;
                volume:      volume to set, range [0, 100]&lt;br /&gt;
&lt;br /&gt;
   '''GetVolume(i: output_type, i(out): volume)'''&lt;br /&gt;
     Set the global audio volume on audio output specified by &amp;quot;output_type&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_type: output type id.&lt;br /&gt;
                volume(out): current volume.&lt;br /&gt;
&lt;br /&gt;
   '''SetState(i: output_type, i: state)'''&lt;br /&gt;
     Mute/Unmute the audio output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 output_type: output type id.&lt;br /&gt;
                 state:       0 to unmute, 1 to mute.&lt;br /&gt;
&lt;br /&gt;
   '''GetState(i: output_type, i(out): state)'''&lt;br /&gt;
     Get the mute state of audio output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 output_type: output type id.&lt;br /&gt;
                 state(out):  0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.VideoOutput'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''GetValidVideoOutput(as(out): outputs)'''&lt;br /&gt;
     Get name of all the outputs.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                outputs(out): output names.&lt;br /&gt;
&lt;br /&gt;
   '''GetValidMode(s:output_name, as(out): modes)'''&lt;br /&gt;
     Get valid display modes of a output specified by output_name&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                modes(out):  valid display modes.&lt;br /&gt;
&lt;br /&gt;
   '''SetMode(s:output_name, s: mode)'''&lt;br /&gt;
     Set display mode of the output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                mode:       mode to set.&lt;br /&gt;
&lt;br /&gt;
   '''GetMode(s:output_name, s(out): mode)'''&lt;br /&gt;
     Get current display mode of the output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                mode(out):   current display mode.&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.PlayingContentMetadataViewer'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''GetPlayingContentMetadata(aa{sv}(out): playing_content_metadata)'''&lt;br /&gt;
     Get the current playing content metadata.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                playing_content_metadata(out): media content metadata&lt;br /&gt;
                                              The structure of playing_content_metadata is a list of mapping table. Each mapping table has 3 key-value pairs:&lt;br /&gt;
                                              Key                 Value&lt;br /&gt;
                                              &amp;quot;URI&amp;quot;               Value of &amp;quot;s&amp;quot; type indicates the current playing URI.&lt;br /&gt;
                                              &amp;quot;Title&amp;quot;             Value of &amp;quot;s&amp;quot; type indicates the title of the playing media content&lt;br /&gt;
                                              &amp;quot;Artist&amp;quot;            Value of &amp;quot;s&amp;quot; type indicates the artist of the playing media content&lt;br /&gt;
&lt;br /&gt;
Signals:&lt;br /&gt;
   '''MetadataUpdated(aa{sv}: metadata)'''&lt;br /&gt;
     Emitted when a metadata changed. e.g. A new player is requested to play a video.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                metadata: The same as playing_content_metadata&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
This is a sample application written in Python to play a URI by requesting an attended-execution media player instance. You can get the latest code from: git://gitorious.org:meego-middleware/umms.git&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import dbus&lt;br /&gt;
import dbus.mainloop.glib&lt;br /&gt;
import dbus.glib&lt;br /&gt;
&lt;br /&gt;
player_iface = None&lt;br /&gt;
loop = None&lt;br /&gt;
&lt;br /&gt;
def need_reply_cb ():&lt;br /&gt;
    player_iface.Reply()&lt;br /&gt;
&lt;br /&gt;
def eof_cb ():&lt;br /&gt;
  print &amp;quot;EOF....&amp;quot;&lt;br /&gt;
  loop.quit()&lt;br /&gt;
&lt;br /&gt;
#event loop&lt;br /&gt;
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)&lt;br /&gt;
&lt;br /&gt;
#get the system message deamon&lt;br /&gt;
bus=dbus.SystemBus()&lt;br /&gt;
&lt;br /&gt;
#get the 'com.UMMS.ObjectManager.iface'&lt;br /&gt;
bus_obj=bus.get_object('com.UMMS', '/com/UMMS/ObjectManager')&lt;br /&gt;
obj_mngr=dbus.Interface(bus_obj, 'com.UMMS.ObjectManager.iface')&lt;br /&gt;
&lt;br /&gt;
#request a media player for attended-execution&lt;br /&gt;
player_obj_path = obj_mngr.RequestMediaPlayer()&lt;br /&gt;
player_obj = bus.get_object(&amp;quot;com.UMMS&amp;quot;, player_obj_path)&lt;br /&gt;
player_iface =  dbus.Interface(player_obj, 'com.UMMS.MediaPlayer')&lt;br /&gt;
&lt;br /&gt;
#for the attended-execution, we must connect to the &amp;quot;NeedReply&amp;quot; signal&lt;br /&gt;
player_iface.connect_to_signal(&amp;quot;NeedReply&amp;quot;, need_reply_cb)&lt;br /&gt;
&lt;br /&gt;
#connect other signals you want&lt;br /&gt;
player_iface.connect_to_signal(&amp;quot;Eof&amp;quot;, eof_cb)&lt;br /&gt;
&lt;br /&gt;
#play a URI&lt;br /&gt;
player_iface.SetUri(&amp;quot;/tmp/sample.mp4&amp;quot;)&lt;br /&gt;
player_iface.Play()&lt;br /&gt;
&lt;br /&gt;
#event loop &lt;br /&gt;
loop = gobject.MainLoop()&lt;br /&gt;
loop.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Umms</id>
		<title>Umms</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Umms"/>
				<updated>2013-02-05T13:31:32Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Universal Multimedia Service (UMMS) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Universal Multimedia Service (UMMS) =&lt;br /&gt;
&lt;br /&gt;
  1 Short description of the need&lt;br /&gt;
---------------------------------&lt;br /&gt;
Linux in general, including MeeGo in particular, lacks a unified solution for playing multimedia content. Almost every application has its own solution, limiting the opportunity to benefit from new hardware capabilities provided by modern chipsets on non-PC platforms, and reducing the scope of usability of high value multimedia content, which is often protected using a proprietary codec.&lt;br /&gt;
It isn't the first time that Linux has had to break boundaries and change established solutions to drastically improve its support for new services. In the recent past, we've seen the adoption of CUPS (1999-2002) for printing and Sane (2000-2005) for scanning, enabling the use of Linux in the office environment, which, before these two, seemed only possible for the geek in search of a long night enjoying troubleshooting fun.&lt;br /&gt;
The current proposition has no less of an outrageous ambition than creating a Unified Multi Media Service (UMMS), which will enable playing audio and video (AV) from an application on any Linux platform (starting from MeeGo), without having to worry about anything more than its position on the screen and its possible initial transparency over the User Interface graphics.&lt;br /&gt;
  2 Purpose/audience&lt;br /&gt;
--------------------&lt;br /&gt;
The purpose of this document is to provide an understanding of a solution which could be used to deliver a unified service. This would enable a large community of developers to benefit from the best possible audio and video capabilities provided by various Linux implementations, without having to worry about the supporting HW.&lt;br /&gt;
It addresses the managers who wish to understand the requirements and the constraints required for such a solution, as well as the developers who will have to deliver a working implementation.&lt;br /&gt;
It focuses on an initial application for MeeGo TV, but it has been designed with the vision to expand, in a second phase, to all MeeGo verticals, starting with tablets. It is intended to go beyond TV and tablets and further, and experience a general adoption by the larger Linux community. Only MeeGo needs are described in this initial document.&lt;br /&gt;
  3 Overview&lt;br /&gt;
------------&lt;br /&gt;
MeeGo is an open source version of Linux which targets Netbooks, Tablets, Mobiles, Connected TV, and Automotive domains. MeeGo has the goals of delivering an optimized user experience and also enabling a community of developers to service applications across domains.&lt;br /&gt;
Unfortunately, not only does Linux not have a standard set of APIs to play audio and video (AV), but the existing main Linux AV Player APIs (Mplayer and Totem) do not cater to TV's needs:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Programming language independence&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Management of protected high value content (Pay TV)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GPL license isolation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Support of TV features (broadcast, sub-title, language selection, aspect ratio, trick play, …)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sophisticated transport independence (smooth streaming, forward error correction, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Multiple back-end video pipe support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Support of new generation HW feature (for example, video as an OpenGL texture)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This document explains the constraints introduced by these requirements and provides possible solutions and recommendations.&lt;br /&gt;
&lt;br /&gt;
  4 Documentation&lt;br /&gt;
----------------------------&lt;br /&gt;
&lt;br /&gt;
Specifications [[File:Meego_Unified_MultiMedia_Service_V0.4.odt]] &amp;lt;br&amp;gt;&lt;br /&gt;
* [[UMMS_Architecture | General Architecture]] &amp;lt;br&amp;gt;&lt;br /&gt;
* [[UMMS_User_Manual | User Manual and Sample code]] &amp;lt;br&amp;gt;&lt;br /&gt;
* [[media:LinuxCon_2011_umms_introduction.pdf|Slides from Linux Conference Oct11 and Nov 11]]&lt;br /&gt;
&lt;br /&gt;
Javascript API&lt;br /&gt;
* [[TV Browser]]&lt;br /&gt;
&lt;br /&gt;
Mailing list is run on Tizen-general&lt;br /&gt;
https://lists.tizen.org/listinfo/general&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  5 Where is the code&lt;br /&gt;
-----------------&lt;br /&gt;
Visit MeeGo OBS and search for UMMS&lt;br /&gt;
https://build.meego.com&lt;br /&gt;
&lt;br /&gt;
or directly the GIT repo&lt;br /&gt;
git://gitorious.org/meego-middleware/umms.git&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/UMMS_User_Manual</id>
		<title>UMMS User Manual</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/UMMS_User_Manual"/>
				<updated>2013-01-24T09:39:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= UMMS User Manual and Sample code =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This page is the user manual and some sample code for the Universal Multi Media Service (UMMS).&amp;lt;br&amp;gt;&lt;br /&gt;
The UMMS general description is on the '''[[Umms|main page]]'''. &lt;br /&gt;
== Source code ==&lt;br /&gt;
You can get the code from: &lt;br /&gt;
git://gitorious.org/meego-middleware/umms.git&lt;br /&gt;
&lt;br /&gt;
== Service Name ==&lt;br /&gt;
com.UMMS&lt;br /&gt;
&lt;br /&gt;
== Objects and Interfaces ==&lt;br /&gt;
''ObjectManager'': Object to create and remove ''MediaPlayer'' object.&lt;br /&gt;
  Path:      /com/UMMS/ObjectManager&lt;br /&gt;
  Interface: com.UMMS.ObjectManager.iface&lt;br /&gt;
&lt;br /&gt;
''MediaPlayer'': Player object to control the playback of media assets.&lt;br /&gt;
  Path:      Returned by ''ObjectManager''&lt;br /&gt;
  Interface: com.UMMS.MediaPlayer&lt;br /&gt;
&lt;br /&gt;
''AudioManager'': Object to manage the system audio output.&lt;br /&gt;
  Path:      /com/UMMS/AudioManager&lt;br /&gt;
  Interface: com.UMMS.AudioManger&lt;br /&gt;
&lt;br /&gt;
''VideoOutput'': Object to control the display.&lt;br /&gt;
  Path:      /com/UMMS/VideoOutput&lt;br /&gt;
  Interface: com.UMMS.VideoOutput&lt;br /&gt;
&lt;br /&gt;
''PlayingContentMetadataViewer'': Object to provide the metadata of all currently playing content.&lt;br /&gt;
  Path:      /com/UMMS/PlayingContentMetadataViewer&lt;br /&gt;
  Interface: com.UMMS.PlayingContentMetadataViewer&lt;br /&gt;
&lt;br /&gt;
== API Reference ==&lt;br /&gt;
* '''''Interface com.UMMS.ObjectManager.iface'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
&lt;br /&gt;
   '''RequestMediaPlayer(s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in attended-execution mode. The ''ObjectManager'' will create a new ''MediaPlayer'' object,&lt;br /&gt;
     register the object on the bus and return the object path to client.&lt;br /&gt;
     Parameters: &lt;br /&gt;
         object_path(out): The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RequestMediaPlayerUnattended(d: time_to_execution, s(out): token, s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in unattended-execution mode. The ''ObjectManager'' will create a new ''MediaPlayer'' object,&lt;br /&gt;
     register it on the bus and return the object path to client.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                time_to_execution: Times in seconds for which this ''MediaPlayer'' object keep alive.&lt;br /&gt;
                token(out):        The unique token belongs to this execution. Application can use it to identify the execution log file which &lt;br /&gt;
                                   named by the token. &lt;br /&gt;
                object_path(out):  The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RequestScheduledRecorder(d: start_time, d: duration, s: uri, s: location, s(out): token, s(out): object_path)'''&lt;br /&gt;
     Request a ''MediaPlayer'' object operate in unattended-execution mode and schedule it to record the media pointed by &amp;quot;uri&amp;quot;. The ''ObjectManager'' will create a &lt;br /&gt;
     new ''MediaPlayer'' object, register it on the bus and return the object path to client.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                start_time:        The delay to start recording in seconds.&lt;br /&gt;
                duration:          How long to record, in seconds.&lt;br /&gt;
                uri:               Specify the media to record.&lt;br /&gt;
                location:          Location to store the recorded media.&lt;br /&gt;
                token(out):        The unique token belongs to this execution. Application can use it to identify the execution log file which &lt;br /&gt;
                                   named by the token. &lt;br /&gt;
                object_path(out):  The object path belongs to the newly created ''MediaPlayer'' object.&lt;br /&gt;
&lt;br /&gt;
   '''RemoveMediaPlayer(s: object_path)'''&lt;br /&gt;
     Remove the ''MediaPlayer'' object which was exposed on the object_path.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                object_path: The path on which this object was exposed.&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''''Interface com.UMMS.MediaPlayer'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
&lt;br /&gt;
   '''SetUri(s: uri)'''&lt;br /&gt;
     Set URI to UMMS.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                uri: URI to set.&lt;br /&gt;
&lt;br /&gt;
   '''SetSubtitleUri(s: sub_uri)'''&lt;br /&gt;
     Set subtitle URI to UMMS.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                sub_uri: URI to identify the subtitle file.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentUri(s(out): current_uri)'''&lt;br /&gt;
     Get current URI.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_uri(out): current URI.&lt;br /&gt;
&lt;br /&gt;
   '''SetTarget(i: type, a{sv}: param)'''&lt;br /&gt;
     Set video target and pass all target parameters to UMMS. The video target is where your decoded video data should be rendered.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                type:  The type of video target.&lt;br /&gt;
                       0:XWindow,       the video data will be rendered on the X Window.&lt;br /&gt;
                       1:DataCopy,      the video data will be copied to a memory instead of directly rendering. E.g. copied to a GL Texture. &lt;br /&gt;
                       2:Socket,        the video data will sent to a socket.&lt;br /&gt;
                       3:ReservedType0, reserved for custom target.&lt;br /&gt;
                       4:ReservedType1, reserved for custom target.&lt;br /&gt;
                       5:ReservedType2, reserved for custom target.&lt;br /&gt;
                       6:ReservedType3, reserved for custom target.&lt;br /&gt;
                param: The list of key-value pair to specify the attributes of the target. The definition of attribute structure is &lt;br /&gt;
                       target-specific and up to the implementor. The UMMS framwork just defined the XWindow target attribute: &lt;br /&gt;
                       Key          Value&lt;br /&gt;
                       &amp;quot;window-id&amp;quot;  value of &amp;quot;i&amp;quot; type indicates the window id. &lt;br /&gt;
&lt;br /&gt;
   '''Play()'''&lt;br /&gt;
&lt;br /&gt;
   '''Pause()'''&lt;br /&gt;
&lt;br /&gt;
   '''Stop()'''&lt;br /&gt;
&lt;br /&gt;
   '''SetPosition(x: pos)'''&lt;br /&gt;
     Seek to position.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pos: Stream position in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetPosition(x(out): pos)'''&lt;br /&gt;
     Get the current position of stream in millisecond.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pos(out): The current stream position.&lt;br /&gt;
&lt;br /&gt;
   '''SetPlaybackRate(d: rate）'''&lt;br /&gt;
      Set the playback rate. &lt;br /&gt;
     Parameters:&lt;br /&gt;
                rate: rate to playback the media asset.&lt;br /&gt;
&lt;br /&gt;
   '''GetPlaybackRate(d(out): rate）'''&lt;br /&gt;
      Get current playback rate.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                rate(out): The current playback rate.&lt;br /&gt;
&lt;br /&gt;
   '''SetVolume(i: volume)'''&lt;br /&gt;
&lt;br /&gt;
   '''GetVolume(i(out): volume)'''&lt;br /&gt;
&lt;br /&gt;
   '''SetVideoSize(u: x, u: y, u: w, u: h)'''&lt;br /&gt;
     Set video dimension.&lt;br /&gt;
     Paramters:&lt;br /&gt;
               x: X coordinate of top-left.&lt;br /&gt;
               y: Y coordinate of top-left.&lt;br /&gt;
               w: Width of video rectangle.&lt;br /&gt;
               h: Height of video rectangle.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoSize(u(out): w, u(out): h)'''&lt;br /&gt;
     Get current width and height of video rectangle.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                w(out): Width of current video rectangle.&lt;br /&gt;
                h(out): Height of current video rectangle.&lt;br /&gt;
&lt;br /&gt;
   '''GetBufferedTime(x(out): length_time)'''&lt;br /&gt;
     Get the approximate duration of playable data downloaded so far in millisecond.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                length_time(out): amount of playable data downloaded so far in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetBufferedBytes(x(out): length_byte)'''&lt;br /&gt;
     Get the approximate amount of playable data downloaded so far in bytes. &lt;br /&gt;
     Parameters:&lt;br /&gt;
                length_byte(out): amount of playable data downloaded so far in byte.&lt;br /&gt;
&lt;br /&gt;
   '''GetMediaSizeTime(x(out): duration)'''&lt;br /&gt;
     Get the duration of the media.&lt;br /&gt;
     Parameters: &lt;br /&gt;
                duration(out): duration in millisecond.&lt;br /&gt;
&lt;br /&gt;
   '''GetMediaSizeBytes(x(out): size)'''&lt;br /&gt;
     Get the total size of the media file.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                size(out): total size of the media file.&lt;br /&gt;
&lt;br /&gt;
   '''HasVideo(b(out): has_video)'''&lt;br /&gt;
     Indicates the existance of video stream in the media asset.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                has_video(out): True if media asset has video. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''HasAudio(b(out): has_audio)'''&lt;br /&gt;
     Indicates the existance of audio stream in the media asset.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                has_audio(out): True if media asset has audio. False otherwise. &lt;br /&gt;
&lt;br /&gt;
   '''IsStreaming(b(out): is_stream)'''&lt;br /&gt;
     Indicates whether the URI represents a streaming media.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_stream(out): True for streamimg media. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''IsSeekable(b(out): is_seekable)'''&lt;br /&gt;
     Indicates whether this media asset is seekable.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_seekable(out): True for seekable. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''SupportFullScreen(b(out): support_fullscreen)'''&lt;br /&gt;
     Indicates whether the backend supports a fullscreen mode.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                support_fullscreen(out): True if backend supports fullscreen. False otherwise.&lt;br /&gt;
&lt;br /&gt;
   '''GetPlayerState(i(out): current_state)'''&lt;br /&gt;
     Get current state of ''MediaPlayer'' object.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_state(out): &lt;br /&gt;
                                   0:Null,&lt;br /&gt;
                                   1:Stopped,&lt;br /&gt;
                                   2:Paused,&lt;br /&gt;
                                   3:Playing&lt;br /&gt;
&lt;br /&gt;
   '''Reply()'''&lt;br /&gt;
     Response the UMMS server’s heartbeat check. In the attended-execution mode, client should connect to NeedReply&lt;br /&gt;
     signal with a callback in which Reply() method should be called.&lt;br /&gt;
&lt;br /&gt;
   '''SetProxy(a{sv}: param)'''&lt;br /&gt;
     Set proxy stuffs.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                param: A list of key-value pair to sepcify the proxy attributes.&lt;br /&gt;
                       The attribute structure is defined as:&lt;br /&gt;
                       Key          Value&lt;br /&gt;
                       &amp;quot;proxy-uri&amp;quot;  value of &amp;quot;s&amp;quot; type indicates HTTP proxy server URIl&lt;br /&gt;
                       &amp;quot;proxy-id&amp;quot;   value of &amp;quot;s&amp;quot; type indicates HTTP proxy user id for authentication.&lt;br /&gt;
                       &amp;quot;proxy-pw&amp;quot;   value of &amp;quot;s&amp;quot; type indicates HTTP proxy user password for authentication&lt;br /&gt;
&lt;br /&gt;
   '''Suspend()'''&lt;br /&gt;
     Suspend current execution of player. After this invoking, all the resources ocuppied by this session will be released.&lt;br /&gt;
&lt;br /&gt;
   '''Restore()'''&lt;br /&gt;
     Play the media asset from the position at where it suspended.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentVideo(i(out): current_video)'''&lt;br /&gt;
     Get current playing video stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_video(out): stream number of current playing video.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentAudio(i(out): current_audio)'''&lt;br /&gt;
     Get current playing audio stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_audio(out): stream number of current playing audio.&lt;br /&gt;
&lt;br /&gt;
   '''GetCurrentSubtitle(i(out): current_sub)'''&lt;br /&gt;
     Get current playing subtitle stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_sub(out): stream number of current playing subtitle.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentVideo(i: current_video)'''&lt;br /&gt;
     Choose the video stream to play.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_video: stream number of video stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentAudio(i: current_audio)'''&lt;br /&gt;
     Choose the audio stream to play.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_audio: stream number of audio stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''SetCurrentSubtitle(i: current_sub)'''&lt;br /&gt;
     Choose the subtitle stream to play. This method is for the media asset with embedded subtitle.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                current_sub: stream number of subtitle stream choosed to play.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoNum(i(out): video_num)'''&lt;br /&gt;
     Get total number of video streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                video_num(out): Total number of video streams.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioNum(i(out): audio_num)'''&lt;br /&gt;
     Get total number of audio streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                audio_num(out): Total number of audio streams.&lt;br /&gt;
        &lt;br /&gt;
   '''SetBufferDepth(i: format, x: buf_depth)'''&lt;br /&gt;
     Set buffer depth when buffering network streams.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                format: 0 for Time, 1 for Btye.&lt;br /&gt;
                buf_depth: The depth to buffer data. &lt;br /&gt;
&lt;br /&gt;
   '''GetBufferDepth(i: format, x(out): buf_depth)'''&lt;br /&gt;
     Get buffer depth.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                format: 0 for Time, 1 for Btye.&lt;br /&gt;
                buf_depth(out): The depth to buffer data. &lt;br /&gt;
&lt;br /&gt;
   '''SetMute(i: is_mute)'''&lt;br /&gt;
     Mute the audio.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                is_mute: 0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
   '''IsMute(i(out): is_mute)'''&lt;br /&gt;
      Get the mute state.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 is_mute(out): 0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
   '''SetScaleMode(i: mode)'''&lt;br /&gt;
      Set the scale mode.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 mode: &lt;br /&gt;
                      0: do not scale.&lt;br /&gt;
                      1: fill entire target, regardless of original video aspect ratio.&lt;br /&gt;
                      2: scale the video with respect to original video aspect ratio.&lt;br /&gt;
                      3: fill the whole screen but keep the ratio, some part of video may out of screen.&lt;br /&gt;
&lt;br /&gt;
   '''GetScaleMode(i(out): mode)'''&lt;br /&gt;
      Get the scale mode.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 mode(out): &lt;br /&gt;
                      0: do not scale.&lt;br /&gt;
                      1: fill entire target, regardless of original video aspect ratio.&lt;br /&gt;
                      2: scale the video with respect to original video aspect ratio.&lt;br /&gt;
                      3: fill the whole screen but keep the ratio, some part of video may out of screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoCodec(i: num, s(out): video_codec)'''&lt;br /&gt;
      Get the codec of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 num: video stream number.&lt;br /&gt;
                 video_codec(out): codec string.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioCodec(i: num, s(out): audio_codec)'''&lt;br /&gt;
      Get the codec of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
      Parameters:&lt;br /&gt;
                 num: audio stream number.&lt;br /&gt;
                 audio_codec(out): codec string.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoBitrate(i: num, i(out): video_bitrate)'''&lt;br /&gt;
     Get the bitrate of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 num: video stream number.&lt;br /&gt;
                 video_bitrate(out): bitrate of the video stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioBitrate(i: channel, i(out): audio_bitrate)'''&lt;br /&gt;
     Get the bitrate of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 num: audio stream number.&lt;br /&gt;
                 audio_bitrate(out): bitrate of the audio stream.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   '''GetEncapsulation(s(out): encapsulation)'''&lt;br /&gt;
     Get the container format.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                encapsulation(out): the container format.&lt;br /&gt;
&lt;br /&gt;
   '''GetAudioSampleRate(i: num, i(out): sample_rate)'''&lt;br /&gt;
     Get the sample rate of audio stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:              audio stream number.&lt;br /&gt;
                sample_rate(out): sample rate of the audio stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoFrameRate(i: num, i(out): frame_rate_num, i(out): frame_rate_denum)'''&lt;br /&gt;
     Get the frame rate of video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:                   video stream number.&lt;br /&gt;
                frame_rate_num(out):   numerator of frame rate.&lt;br /&gt;
                frame_rate_denum(out): denumerator of frame rate.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoResolution(i: num, i(out): width, i(out): height)'''&lt;br /&gt;
     Get the original resolution of the video stream specified by the &amp;quot;num&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:         video stream number.&lt;br /&gt;
                width(out):  width of video.&lt;br /&gt;
                height(out): height of video.&lt;br /&gt;
&lt;br /&gt;
   '''GetVideoAspectRatio(i: num, i(out): ratio_num, i(out): ratio_denum)'''&lt;br /&gt;
     Get the original aspect ratio of the video stream specified by the &amp;quot;num&amp;quot;.      &lt;br /&gt;
     Parameters:&lt;br /&gt;
                num:              video stream number.&lt;br /&gt;
                ratio_num(out):   numerator of the aspect ratio.&lt;br /&gt;
                ratio_denum(out): denumerator of the aspect ratio.&lt;br /&gt;
&lt;br /&gt;
   '''GetProtocolName(s(out): protocol_name)'''&lt;br /&gt;
     Get the tranport protocol name.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                protocol_name(out): name of the protocol.&lt;br /&gt;
&lt;br /&gt;
   '''Record(b: to_record, s: location)'''&lt;br /&gt;
     Start or stop the recording of current playing DVB stream.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                to_record: True to start recording, False to stop recording.&lt;br /&gt;
                location:  path to store the record file.&lt;br /&gt;
&lt;br /&gt;
   '''GetPat(aa{sv}(out): pat)'''&lt;br /&gt;
     Get the &amp;quot;Program Association Table&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                pat(out): the &amp;quot;Program Association Table&amp;quot;. &lt;br /&gt;
                          The structure of pat is a list of mapping table. Each mapping table has two key-value pairs:&lt;br /&gt;
                          Key               Value&lt;br /&gt;
                          &amp;quot;program-number&amp;quot;  value of &amp;quot;u&amp;quot; type which indicates the program number. &lt;br /&gt;
                          &amp;quot;pid&amp;quot;:            value of &amp;quot;u&amp;quot; type which indicates the pid of the pat.&lt;br /&gt;
&lt;br /&gt;
   '''GetPmt(u(out): program_number, u(out): pcr_pid, aa{sv}(out): stream_info)'''&lt;br /&gt;
     Get the &amp;quot;Program Map Table&amp;quot; of current playing DVB program.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                program_number(out): the number of current playing program.&lt;br /&gt;
                pcr_pid(out):        the pcr pid.&lt;br /&gt;
                stream_info(out):    the information of all elementary streams multiplexed in this program.&lt;br /&gt;
                                     The structure of stream_info is a list of mapping table. Each mapping table has two key-value pairs:&lt;br /&gt;
                                     Key            Value&lt;br /&gt;
                                     &amp;quot;stream-type&amp;quot;  value of &amp;quot;u&amp;quot; type indicates the stream type.&lt;br /&gt;
                                     &amp;quot;pid&amp;quot;          value of &amp;quot;u&amp;quot; type indicates the pid of the elementary stream.&lt;br /&gt;
&lt;br /&gt;
   '''GetAssociatedDataChannel(s(out): ip, i(out): port)'''&lt;br /&gt;
     Get the ip and port from which the client can retrive DVB associated data(ts packets).&lt;br /&gt;
     Parameters:&lt;br /&gt;
                ip(out):   ip string&lt;br /&gt;
                port(out): port string&lt;br /&gt;
&lt;br /&gt;
Signals:&lt;br /&gt;
   '''Initialized'''&lt;br /&gt;
     Pipeline engine initialized.&lt;br /&gt;
&lt;br /&gt;
   '''Eof'''&lt;br /&gt;
     End of file or stream.&lt;br /&gt;
&lt;br /&gt;
   '''Error(u: id, s: message)'''&lt;br /&gt;
     Error happened.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                id:      error id.&lt;br /&gt;
                message: error message.&lt;br /&gt;
&lt;br /&gt;
   '''Buffering(i: percent)'''&lt;br /&gt;
     Buffering percent, from 0 to 100.&lt;br /&gt;
&lt;br /&gt;
   '''Seeked'''&lt;br /&gt;
    Seeking done.&lt;br /&gt;
&lt;br /&gt;
   '''Stopped'''&lt;br /&gt;
    Player stopped.&lt;br /&gt;
&lt;br /&gt;
   '''PlayerStateChanged(i: old_state, i: new_state)'''&lt;br /&gt;
    Player state changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               old_state: previous state of player, value definition is the same as state parameter of GetPlayerState. &lt;br /&gt;
               new_state: current state of player, value definition is the same as state parameter of GetPlayerState.&lt;br /&gt;
&lt;br /&gt;
   '''NeedReply'''&lt;br /&gt;
    Singal to request the client to reply. This is used for client existence checking. The client should call the Reply() method to response this &lt;br /&gt;
    signal.&lt;br /&gt;
&lt;br /&gt;
   '''Suspended'''&lt;br /&gt;
    The player has been suspended. That means all the resources ocuppied by this player has been released.&lt;br /&gt;
&lt;br /&gt;
   '''Restored'''&lt;br /&gt;
    The player restored from suspened.&lt;br /&gt;
&lt;br /&gt;
   '''NoResource'''&lt;br /&gt;
    Resource unavailable.&lt;br /&gt;
&lt;br /&gt;
   '''VideoTagChanged(i: video_number)'''&lt;br /&gt;
    The metadata of a video stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               video_number: video stream number.&lt;br /&gt;
&lt;br /&gt;
   '''AudioTagChanged(i: audio_number)'''&lt;br /&gt;
    The metadata of a audio stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               audio_number: audio stream number.&lt;br /&gt;
&lt;br /&gt;
   '''TextTagChanged(i: text_number)'''&lt;br /&gt;
    The metadata of a text stream changed.&lt;br /&gt;
    Parameters:&lt;br /&gt;
               text_number: text stream number.&lt;br /&gt;
&lt;br /&gt;
   '''RecordStart'''&lt;br /&gt;
    The recording started.&lt;br /&gt;
&lt;br /&gt;
   '''RecordStop'''&lt;br /&gt;
    The recording stopped.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.AudioManger'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''SetVolume(i: output_type, i: volume)'''&lt;br /&gt;
     Set the global audio volume on audio output specified by &amp;quot;output_type&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_type: output type id.&lt;br /&gt;
                             0, hdmi&lt;br /&gt;
                             1, spidf&lt;br /&gt;
                             2, i2s0&lt;br /&gt;
                             3, i2s1&lt;br /&gt;
                volume:      volume to set, range [0, 100]&lt;br /&gt;
&lt;br /&gt;
   '''GetVolume(i: output_type, i(out): volume)'''&lt;br /&gt;
     Set the global audio volume on audio output specified by &amp;quot;output_type&amp;quot;.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_type: output type id.&lt;br /&gt;
                volume(out): current volume.&lt;br /&gt;
&lt;br /&gt;
   '''SetState(i: output_type, i: state)'''&lt;br /&gt;
     Mute/Unmute the audio output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 output_type: output type id.&lt;br /&gt;
                 state:       0 to unmute, 1 to mute.&lt;br /&gt;
&lt;br /&gt;
   '''GetState(i: output_type, i(out): state)'''&lt;br /&gt;
     Get the mute state of audio output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                 output_type: output type id.&lt;br /&gt;
                 state(out):  0 for unmute, 1 for mute.&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.VideoOutput'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''GetValidVideoOutput(as(out): outputs)'''&lt;br /&gt;
     Get name of all the outputs.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                outputs(out): output names.&lt;br /&gt;
&lt;br /&gt;
   '''GetValidMode(s:output_name, as(out): modes)'''&lt;br /&gt;
     Get valid display modes of a output specified by output_name&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                modes(out):  valid display modes.&lt;br /&gt;
&lt;br /&gt;
   '''SetMode(s:output_name, s: mode)'''&lt;br /&gt;
     Set display mode of the output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                mode:       mode to set.&lt;br /&gt;
&lt;br /&gt;
   '''GetMode(s:output_name, s(out): mode)'''&lt;br /&gt;
     Get current display mode of the output.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                output_name：output name.&lt;br /&gt;
                mode(out):   current display mode.&lt;br /&gt;
&lt;br /&gt;
* '''''Interface: com.UMMS.PlayingContentMetadataViewer'''''&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
   '''GetPlayingContentMetadata(aa{sv}(out): playing_content_metadata)'''&lt;br /&gt;
     Get the current playing content metadata.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                playing_content_metadata(out): media content metadata&lt;br /&gt;
                                              The structure of playing_content_metadata is a list of mapping table. Each mapping table has 3 key-value pairs:&lt;br /&gt;
                                              Key                 Value&lt;br /&gt;
                                              &amp;quot;URI&amp;quot;               Value of &amp;quot;s&amp;quot; type indicates the current playing URI.&lt;br /&gt;
                                              &amp;quot;Title&amp;quot;             Value of &amp;quot;s&amp;quot; type indicates the title of the playing media content&lt;br /&gt;
                                              &amp;quot;Artist&amp;quot;            Value of &amp;quot;s&amp;quot; type indicates the artist of the playing media content&lt;br /&gt;
&lt;br /&gt;
Signals:&lt;br /&gt;
   '''MetadataUpdated(aa{sv}: metadata)'''&lt;br /&gt;
     Emitted when a metadata changed. e.g. A new player is requested to play a video.&lt;br /&gt;
     Parameters:&lt;br /&gt;
                metadata: The same as playing_content_metadata&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
This is a sample application written in Python to play a URI by requesting an attended-execution media player instance. You can get the latest code from: git://gitorious.org:meego-middleware/umms.git&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import dbus&lt;br /&gt;
import dbus.mainloop.glib&lt;br /&gt;
import dbus.glib&lt;br /&gt;
&lt;br /&gt;
player_iface = None&lt;br /&gt;
loop = None&lt;br /&gt;
&lt;br /&gt;
def need_reply_cb ():&lt;br /&gt;
    player_iface.Reply()&lt;br /&gt;
&lt;br /&gt;
def eof_cb ():&lt;br /&gt;
  print &amp;quot;EOF....&amp;quot;&lt;br /&gt;
  loop.quit()&lt;br /&gt;
&lt;br /&gt;
#event loop&lt;br /&gt;
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)&lt;br /&gt;
&lt;br /&gt;
#get the system message deamon&lt;br /&gt;
bus=dbus.SystemBus()&lt;br /&gt;
&lt;br /&gt;
#get the 'com.UMMS.ObjectManager.iface'&lt;br /&gt;
bus_obj=bus.get_object('com.UMMS', '/com/UMMS/ObjectManager')&lt;br /&gt;
obj_mngr=dbus.Interface(bus_obj, 'com.UMMS.ObjectManager.iface')&lt;br /&gt;
&lt;br /&gt;
#request a media player for attended-execution&lt;br /&gt;
player_obj_path = obj_mngr.RequestMediaPlayer()&lt;br /&gt;
player_obj = bus.get_object(&amp;quot;com.UMMS&amp;quot;, player_obj_path)&lt;br /&gt;
player_iface =  dbus.Interface(player_obj, 'com.UMMS.MediaPlayer')&lt;br /&gt;
&lt;br /&gt;
#for the attended-execution, we must connect to the &amp;quot;NeedReply&amp;quot; signal&lt;br /&gt;
player_iface.connect_to_signal(&amp;quot;NeedReply&amp;quot;, need_reply_cb)&lt;br /&gt;
&lt;br /&gt;
#connect other signals you want&lt;br /&gt;
player_iface.connect_to_signal(&amp;quot;Eof&amp;quot;, eof_cb)&lt;br /&gt;
&lt;br /&gt;
#play a URI&lt;br /&gt;
player_iface.SetUri(&amp;quot;/tmp/sample.mp4&amp;quot;)&lt;br /&gt;
player_iface.Play()&lt;br /&gt;
&lt;br /&gt;
#event loop &lt;br /&gt;
loop = gobject.MainLoop()&lt;br /&gt;
loop.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Tizen_IVI</id>
		<title>Tizen IVI</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Tizen_IVI"/>
				<updated>2012-05-23T21:30:48Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Start OBS Light GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creation of a Tizen IVI with OBS Light ==&lt;br /&gt;
Note this page needs to be moved to Tizen Wiki and image snapshot addition.&lt;br /&gt;
=== Install OBS Light ===&lt;br /&gt;
Select you installation depending of your PC OS.&lt;br /&gt;
[[OBS Light Installation]]&lt;br /&gt;
=== Download a valid Kick Start file ===&lt;br /&gt;
Check which release you want to build an image with.&lt;br /&gt;
Note that new build repo are available every day but they may not be operational.&lt;br /&gt;
See : http://download.tizen.org/previews/ivi/&lt;br /&gt;
&lt;br /&gt;
Recover a .ks file. The following can be used as example.&lt;br /&gt;
http://download.tizen.org/previews/ivi/tizen_20120410.10/images/ivi-min-pc/ivi-min-pc-tizen_20120410.10.ks&lt;br /&gt;
&lt;br /&gt;
=== Start OBS Light GUI ===&lt;br /&gt;
We will not configure any OBS as we are only interested in image creation.&lt;br /&gt;
&lt;br /&gt;
[[File:OBSLightMIC.png]]&lt;br /&gt;
&lt;br /&gt;
* To activate the mode MIC, Click on the second Tab on Top left of the screen&lt;br /&gt;
* Create a new project with the button 'New' on the bottom left of the screen&lt;br /&gt;
* Import the .ks file using the button 'Import Kickstart file'&lt;br /&gt;
* Select your image type (default is fs for file system)&lt;br /&gt;
* You can check the various option by clicking on the various tab.&lt;br /&gt;
* Click 'Create Image'&lt;br /&gt;
* Click 'Show Log' -&amp;gt; Wait about 10mn - once that the cache is created it's quicker&lt;br /&gt;
&lt;br /&gt;
If your .ks file is valid you will have an image located in your project directory.&lt;br /&gt;
OBS Light integrates an option to export of that image via TFTP/NFS for quick test.&lt;br /&gt;
&lt;br /&gt;
Change your config and play with the .ks option as much as desired.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:OBSLightMIC.png</id>
		<title>File:OBSLightMIC.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:OBSLightMIC.png"/>
				<updated>2012-05-23T21:30:03Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: OBS Light Image creation GUI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OBS Light Image creation GUI&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Tizen_IVI</id>
		<title>Tizen IVI</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Tizen_IVI"/>
				<updated>2012-05-23T21:25:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creation of a Tizen IVI with OBS Light ==&lt;br /&gt;
Note this page needs to be moved to Tizen Wiki and image snapshot addition.&lt;br /&gt;
=== Install OBS Light ===&lt;br /&gt;
Select you installation depending of your PC OS.&lt;br /&gt;
[[OBS Light Installation]]&lt;br /&gt;
=== Download a valid Kick Start file ===&lt;br /&gt;
Check which release you want to build an image with.&lt;br /&gt;
Note that new build repo are available every day but they may not be operational.&lt;br /&gt;
See : http://download.tizen.org/previews/ivi/&lt;br /&gt;
&lt;br /&gt;
Recover a .ks file. The following can be used as example.&lt;br /&gt;
http://download.tizen.org/previews/ivi/tizen_20120410.10/images/ivi-min-pc/ivi-min-pc-tizen_20120410.10.ks&lt;br /&gt;
&lt;br /&gt;
=== Start OBS Light GUI ===&lt;br /&gt;
We will not configure any OBS as we are only interested in image creation.&lt;br /&gt;
&lt;br /&gt;
* To activate the mode MIC, Click on the second Tab on Top left of the screen&lt;br /&gt;
* Create a new project with the button 'New' on the bottom left of the screen&lt;br /&gt;
* Import the .ks file using the button 'Import Kickstart file'&lt;br /&gt;
* Select your image type (default is fs for file system)&lt;br /&gt;
* You can check the various option by clicking on the various tab.&lt;br /&gt;
* Click 'Create Image'&lt;br /&gt;
* Click 'Show Log' -&amp;gt; Wait about 10mn - once that the cache is created it's quicker&lt;br /&gt;
&lt;br /&gt;
If your .ks file is valid you will have an image located in your project directory.&lt;br /&gt;
OBS Light integrates an option to export of that image via TFTP/NFS for quick test.&lt;br /&gt;
&lt;br /&gt;
Change your config and play with the .ks option as much as desired.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-05-23T21:08:29Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Why should I use OBS Light ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to create an image for [[Tizen IVI | Tizen IVI Image Creation]]&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image. The name was chosen to express that it remains an OBS base development process, but which is lighter to use, the idea of seeing the project as  a light to guide the user in the flow of tools such as OBS, OSC, MIC, ... only came later. Once you will also see it incorrectly spell as 'OBS Lite'.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= Where to Download OBS Light? =&lt;br /&gt;
&lt;br /&gt;
OBS Light is available either as a ready to run appliance to execute as a virtual machine, ready made packages for common distros and obsviously as source file to build it by yourself.&lt;br /&gt;
&lt;br /&gt;
* [http://susestudio.com/a/e0uuBG/meego-obs-light OBS Light appliance], built thanks to Suse studio &lt;br /&gt;
&lt;br /&gt;
* '''[[OBS Light Installation | Up-to-date Builds]]''' for various Linux Distros.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_Manual</id>
		<title>OBS Light Manual</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_Manual"/>
				<updated>2012-05-08T22:02:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Videos training */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the user manual of the command-line and graphical interface of OBS Light.&lt;br /&gt;
* [[OBS_Light | OBS Light project]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* [[ObsLightDeliverable | Installation]]&lt;br /&gt;
= General principles =&lt;br /&gt;
== Operation modes ==&lt;br /&gt;
OBS Light is available via command line (obslight) and a graphical user interface GUI (obslightgui).&lt;br /&gt;
Independently of that fact that you are using the command line or the GUI, you will get access to the same services.&lt;br /&gt;
&lt;br /&gt;
== Videos training ==&lt;br /&gt;
We have created a set of video which will provide you a quick overview of how to start with OBS Light.&amp;lt;br&amp;gt;&lt;br /&gt;
They cover :&lt;br /&gt;
* Where to find the tool and information&lt;br /&gt;
* How to install OBS Light and get write access to an OBS&lt;br /&gt;
* Creation of you first project and package import&lt;br /&gt;
* Working in the project filesystem&lt;br /&gt;
* Auto creation of patch and upload to OBS&lt;br /&gt;
&lt;br /&gt;
http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training&lt;br /&gt;
&lt;br /&gt;
== Introduction Slides ==&lt;br /&gt;
Presentation done during the Tizen's Developers conference in San Francisco, CA, USA on May 7th, 2012&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Tizen OBS-Light-V2.1.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Step by step ==&lt;br /&gt;
=== Get Login access to an OBS server ===&lt;br /&gt;
OBS Light is a simplified model to develop code via an OBS. It does not replace your OBS.&lt;br /&gt;
&lt;br /&gt;
To use OBS Light you will need a login access to an OBS. You have two simple methods to get a login on an OBS:&lt;br /&gt;
* You can create a login on several &amp;quot;free&amp;quot; OBS :&lt;br /&gt;
** MeeGo Community https://build.pub.meego.com/&lt;br /&gt;
** OpenSUSE https://build.opensuse.org/&lt;br /&gt;
* Run your private OBS instance&lt;br /&gt;
** Select a ready made MeeGo OBS appliance (highly recommended) http://susestudio.com/a/e0uuBG/meego-obs&lt;br /&gt;
** Install your private full appliance (advanced users only) http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
&lt;br /&gt;
Once you have a login on an OBS instance, you will need to copy a project to play with. You can use the utilities ''obstag'' and ''obs2obscopy'' to achieve that in an easy way. See [[ Obstag ]].&lt;br /&gt;
&lt;br /&gt;
=== Configure your OBS servers ===&lt;br /&gt;
OBS Light needs to know on which server you will connect to. As OBS Light does more than the osc tool, more information will be needed. You will be asked the following  :&lt;br /&gt;
* OBS server web URL&lt;br /&gt;
* OBS server API URL&lt;br /&gt;
* OBS repository URL&lt;br /&gt;
* Login&lt;br /&gt;
* Password&lt;br /&gt;
* Alias (note that Alias will need to be different from any Alias already present in your osc configuration and OBS light will enforce that constrain). If you plan to use the import/export functions make sure that you use the same Alias on the sending and receiving hosts.&lt;br /&gt;
&lt;br /&gt;
Even if these information are copied in ''.osrcrc'', they must be maintain via the OBS light command.&lt;br /&gt;
&lt;br /&gt;
=== Import the package(s) to work on ===&lt;br /&gt;
After the configuration of one or more OBS servers, you will be able to import a package to work on.&lt;br /&gt;
You can also create an empty package would you like to.&lt;br /&gt;
&lt;br /&gt;
OBS Light will create a local copy of that package on your workstation in a very similar way to what an osc checkout action would do.&lt;br /&gt;
As osc, OBS Light transparently keeps track directly of the links between the packages and the associated OBS servers.&lt;br /&gt;
&lt;br /&gt;
=== Create the project filesystem ===&lt;br /&gt;
Once that you have loaded the packages, you can request the creation of a &amp;quot;chroot jail&amp;quot; (thereafter referred to as &amp;quot;filesystem&amp;quot; or &amp;quot;project filesystem&amp;quot;), where the packages can be built without interfering with the host's filesystem. The created filesystem is specific to the project and will not be recreated if it's already present.&lt;br /&gt;
During the creation of the filesystem, extra packages imposed by the build dependencies will be loaded automatically. If you are connected on a remote OBS that phase can take some time and may require a bit of patience.&lt;br /&gt;
&lt;br /&gt;
OBS Light tries to load automatically the dependencies from the analysis of the .spec file in the RPM but that is not always possible. The user has the possibility to add manually extra file and/or packages to the filesystem.&lt;br /&gt;
&lt;br /&gt;
Packages can be imported either from a project already present in OBS Light or from any URL.&lt;br /&gt;
&lt;br /&gt;
=== Importing the code in the project filesystem ===&lt;br /&gt;
Once that the filesystem is created, the source from the package can be imported in the filesystem. During that process, OBS Light will load the extra package needed to build that specific imported source and will create a special git tree which will monitor any changes done by the user.&lt;br /&gt;
&lt;br /&gt;
The user can directly open a window on the filesystem from OBS Light. The console program used by default can be defined in the OBS Light configuration file.&lt;br /&gt;
From there direct modification of the code in the filesystem is possible and local build can be run as often as desired.&lt;br /&gt;
&lt;br /&gt;
=== Committing changes ===&lt;br /&gt;
When the user is happy of his change, he can request the change from the filesystem to be committed directly in the package.&lt;br /&gt;
&lt;br /&gt;
A patch will be created and added to the package and configured in the .spec file by OBS Light.&lt;br /&gt;
&lt;br /&gt;
=== Saving changes on the OBS server ===&lt;br /&gt;
Once that changes on a given project (which can work on one or multiple packages) achieve a stage which is worth to push on the OBS server. The user can simply request to save the project and OBS Light will commit the changes automatically.&lt;br /&gt;
&lt;br /&gt;
== Example: patching MeeGo 1.2 ''kernel'' package ==&lt;br /&gt;
&lt;br /&gt;
=== Step1: inform ''obslight'' about your OBS account ===&lt;br /&gt;
 ## synthax: obslight server add server_alias &amp;lt;server_alias&amp;gt; login &amp;lt;login&amp;gt; password &amp;lt;password&amp;gt; api_url &amp;lt;api_url&amp;gt; repository_url &amp;lt;repository_url&amp;gt; web_url &amp;lt;web_url&amp;gt;&lt;br /&gt;
;''server_alias''&lt;br /&gt;
: is the alias you want to use to refer to this server.&lt;br /&gt;
;''api_url''&lt;br /&gt;
: is the URL to the OBS control API. If you are using [http://susestudio.com/a/e0uuBG/meego-obs OBS appliance], it's probably on port 81.&lt;br /&gt;
;''repository_url''&lt;br /&gt;
: is the URL to the OBS package repositories. If you are using [http://susestudio.com/a/e0uuBG/meego-obs OBS appliance], it's probably on port 82.&lt;br /&gt;
;''web_url''&lt;br /&gt;
: is the URL to the OBS web interface.&lt;br /&gt;
&lt;br /&gt;
=== Step2: create a local project related to your OBS project ===&lt;br /&gt;
* The project is created in '''~/OBSLight/ObsProjects/MeeGo_1.2_oss/'''&lt;br /&gt;
 ## synthax: obslight obsproject add &amp;lt;project_alias&amp;gt; &amp;lt;name_on_obs&amp;gt; &amp;lt;target&amp;gt; &amp;lt;arch&amp;gt; &amp;lt;server_alias&amp;gt;&lt;br /&gt;
 obslight obsproject add MeeGo_1.2_oss MeeGo:1.2:oss standard i586 &amp;lt;server_alias&amp;gt;&lt;br /&gt;
;''project_alias''&lt;br /&gt;
: is the name you will use to refer to this project with the ''obslight'' command (e.g. ''MeeGo_1.2_oss'').&lt;br /&gt;
;''name_on_obs''&lt;br /&gt;
: is the name of the project on the OBS (e.g. ''MeeGo:1.2:oss'').&lt;br /&gt;
;''target''&lt;br /&gt;
: is the target against which we will build (''standard'' is the common name when there is only one).&lt;br /&gt;
;''arch''&lt;br /&gt;
: is the target architecture of the project.&lt;br /&gt;
;''server_alias''&lt;br /&gt;
: is the alias of the OBS server from which we get the project (which has been configured in first step).&lt;br /&gt;
&lt;br /&gt;
=== Step3: add the kernel package to your local project ===&lt;br /&gt;
* The package is created in '''~/OBSLight/ObsProjects/MeeGo_1.2_oss/MeeGo:1.2:oss/kernel/'''&lt;br /&gt;
* In this directory, the package is manageable by osc.&lt;br /&gt;
 ## synthax: obslight package add package &amp;lt;package&amp;gt; project_alias &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight package add package kernel project_alias MeeGo_1.2_oss&lt;br /&gt;
;''package''&lt;br /&gt;
: is the name of the package you want to work on (e.g. '''kernel''').&lt;br /&gt;
;''project_alias''&lt;br /&gt;
: is the name of the project you created in step2.&lt;br /&gt;
&lt;br /&gt;
=== Step4: create the filesystem of the project ===&lt;br /&gt;
* The filesystem root directory is '''~/OBSLight/ObsProjects/MeeGo_1.2_oss/aChroot/'''.&lt;br /&gt;
* zypper is included in the filesystem and your OBS project's repository is automatically added.&lt;br /&gt;
 ## synthax: obslight filesystem create &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight filesystem create MeeGo_1.2_oss&lt;br /&gt;
&lt;br /&gt;
=== Step5: add the source of the kernel package into your filesystem ===&lt;br /&gt;
* The source package is extracted in directory '''/root/rpmbuild/BUILD/kernel-X.X.X/linux-X.X.X'''.&lt;br /&gt;
* After the installation, a git repository is initialized in package's directory.&lt;br /&gt;
 ## synthax: obslight rpmbuild prepare package &amp;lt;package&amp;gt; project_alias &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight rpmbuild prepare package kernel project_alias MeeGo_1.2_oss&lt;br /&gt;
&lt;br /&gt;
=== Step6: work as you want into your filesystem ===&lt;br /&gt;
* The directory '''~/OBSLight/ObsProjects/MeeGo_1.2_oss/chrootTransfert/''' is mounted into the chroot jail in '''/chrootTransfert/'''.&lt;br /&gt;
* Every script executed in ''aChroot'', is stored in '''/chrootTransfert/''' as '''runMe_YYYY-MM-DD_HHhMMmSS.sh'''.&lt;br /&gt;
 ## synthax: obslight filesystem enter package &amp;lt;package&amp;gt; project_alias &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight filesystem enter package kernel project_alias MeeGo_1.2_oss&lt;br /&gt;
&lt;br /&gt;
Now you are logged in the chroot jail.&lt;br /&gt;
In this example we just modify the kernel configuration.&lt;br /&gt;
 $ cp configs/kernel-x86.config .config&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&lt;br /&gt;
=== Step7: save your modifications ===&lt;br /&gt;
There are two methods.&lt;br /&gt;
&lt;br /&gt;
==== Method1: by making a patch ====&lt;br /&gt;
 $ cp .config config-x86&lt;br /&gt;
 $ exit&lt;br /&gt;
&lt;br /&gt;
 ## synthax: obslight rpmbuild createpatch &amp;lt;patch&amp;gt; package &amp;lt;package&amp;gt; project_alias &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight rpmbuild createpatch myKernelPatch.patch package kernel project_alias MeeGo_1.2_oss&lt;br /&gt;
&lt;br /&gt;
* The patch is automatically added to the local spec file.&lt;br /&gt;
* '''myKernelPatch.patch''' is automatically added to the local package directory.&lt;br /&gt;
* ''kernel package specific:'' you must move the patch application command '''%patchXXX -p1''' after the command line '''cp $RPM_SOURCE_DIR/config-* .''' in the local spec file&lt;br /&gt;
 vi ~/OBSLight/MeeGo_1.2_oss/MeeGo:1.2:oss/kernel/kernel.spec&lt;br /&gt;
&lt;br /&gt;
==== Method2: by copying the new configuration file in OSC directory ====&lt;br /&gt;
 $ cp .config /chrootTransfert/config-x86&lt;br /&gt;
 $ exit&lt;br /&gt;
 cp ~/OBSLight/ObsProjects/MeeGo_1.2_oss/chrootTransfert/config-x86 ~/OBSLight/ObsProjects/MeeGo_1.2_oss/MeeGo:1.2:oss/kernel/&lt;br /&gt;
&lt;br /&gt;
=== Step8: Upstream your modifications to the OBS server ===&lt;br /&gt;
* The command ''package commit'' checks the additions and deletions of files, before committing the package to the OBS server.&lt;br /&gt;
 ## synthax: obslight package commit &amp;lt;message&amp;gt; package &amp;lt;package&amp;gt; project_alias &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight package commit &amp;quot;Patch kernel&amp;quot; package kernel project_alias MeeGo_1.2_oss&lt;br /&gt;
&lt;br /&gt;
= Command-line =&lt;br /&gt;
&lt;br /&gt;
The help is integrated in the tool. ''obslight help'' will give you an online help.&lt;br /&gt;
&lt;br /&gt;
To get more detail on a specific command you can type ''obslight &amp;lt;command&amp;gt; help''.&lt;br /&gt;
&lt;br /&gt;
 $ obslight help &lt;br /&gt;
 OBSlight:&lt;br /&gt;
    Provides a tool to manage an OBS project on your local machine in command line&lt;br /&gt;
    For informations, see the Help section&lt;br /&gt;
        obslight --Help&lt;br /&gt;
    The gui for OBSlight is obslightgui&lt;br /&gt;
    A FAQ is available at:&lt;br /&gt;
        *http://wiki.meego.com/OBS_Light_FAQ&lt;br /&gt;
    For additional informations, see:&lt;br /&gt;
        *http://wiki.meego.com/OBS_Light&lt;br /&gt;
 Usage: OBSlight [global command] &amp;lt;command&amp;gt; [--command-options]&lt;br /&gt;
 &lt;br /&gt;
 Type OBSlight &amp;lt;command&amp;gt; --Help to get Help on a specific command.&lt;br /&gt;
 Commands:&lt;br /&gt;
 &lt;br /&gt;
    server:                   Manage the OBS server&lt;br /&gt;
    obsproject:               Manage the OBSlight project&lt;br /&gt;
    package:                  Manage the packages of OBSlight project&lt;br /&gt;
    projectfilesystem (projectfs,filesystem,pfs) :&lt;br /&gt;
                              Manage the project filesystem of OBSlight project&lt;br /&gt;
    rpmbuild (rb) :           Manage the rpmbuild of the package into the project filesystem&lt;br /&gt;
    man:                      print the man help document&lt;br /&gt;
 &lt;br /&gt;
 global Options:&lt;br /&gt;
 &lt;br /&gt;
    quiet (-quiet,--quiet) :  run obslight in quiet mode&lt;br /&gt;
    debug (-debug,--debug) :  run obslight in debugger mode&lt;br /&gt;
    version (--version) :     show program's version number and exit&lt;br /&gt;
    help (-h,-help,--help) :  show this help message and exit&lt;br /&gt;
    noaction:                 Execute command but do nothing&lt;br /&gt;
&lt;br /&gt;
= Graphical interface =&lt;br /&gt;
The GUI is launched via the command ''obslightgui''.&lt;br /&gt;
Only the parameter ''--version'' is supported.&lt;br /&gt;
&lt;br /&gt;
It has two main tabs: one for OBS projects, one for MIC projects&lt;br /&gt;
&lt;br /&gt;
The buttons in each section apply to the relative section. They display a tool-tip when the mouse is positioned on them.&lt;br /&gt;
Button are grayed when there are not active or not yet implemented.&lt;br /&gt;
&lt;br /&gt;
== OBS projects tab ==&lt;br /&gt;
[[File: Obslightgui_01.png|600px|OBS Light GUI main window]]&lt;br /&gt;
&lt;br /&gt;
This tab allows you to manage an OBS project, its packages (and their files) and its filesystem.&lt;br /&gt;
&lt;br /&gt;
It has 3 main areas:&lt;br /&gt;
* OBS project&lt;br /&gt;
* Packages&lt;br /&gt;
* local files and project filesystem (on a tab)&lt;br /&gt;
&lt;br /&gt;
=== The project panel ===&lt;br /&gt;
The panel on the left displays the list of OBS projects locally configured, and information about the selected project.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
;New&lt;br /&gt;
: Create a new project. Currently you cannot create a new project from scratch using OBS Light, only import one.&lt;br /&gt;
;Import&lt;br /&gt;
: Import a project from an OBS server.&lt;br /&gt;
;Delete&lt;br /&gt;
: Delete the selected project. The project will be removed locally but will remain on the OBS server.&lt;br /&gt;
;Modify&lt;br /&gt;
: Modify the selected project configuration.&lt;br /&gt;
|&lt;br /&gt;
;Save&lt;br /&gt;
: Save the selected project to a file.&lt;br /&gt;
;Load&lt;br /&gt;
: Load a project from a file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== The package panel ===&lt;br /&gt;
The panel on the middle displays the list of packages of the selected project, and information about the selected package.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
;New&lt;br /&gt;
: Create a new package. Currently you cannot create a new package from scratch using OBS Light, only import one.&lt;br /&gt;
;Import&lt;br /&gt;
: Import a package from an OBS project.&lt;br /&gt;
;Delete&lt;br /&gt;
: Delete the selected package(s). The packages will be removed locally but will remain on the OBS server.&lt;br /&gt;
;Modify&lt;br /&gt;
: Modify the package title and description. Currently not available.&lt;br /&gt;
|&lt;br /&gt;
;Update files&lt;br /&gt;
: Checkout/update files from the OBS (''osc update'' equivalent).&lt;br /&gt;
;Commit changes&lt;br /&gt;
: Commit changes to the OBS (''osc commit'' equivalent).&lt;br /&gt;
;Repair OSC directory&lt;br /&gt;
: Repair the OSC working copy of a package.&lt;br /&gt;
|&lt;br /&gt;
;Refresh status&lt;br /&gt;
: Refresh OBS and Local statuses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== The file panel ===&lt;br /&gt;
The file panel has two tabs: '''Local directory''' and '''Project filesystem'''.&lt;br /&gt;
&lt;br /&gt;
==== The local directory tab ====&lt;br /&gt;
This tab shows the list of files contained in the selected package.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&lt;br /&gt;
;Open terminal&lt;br /&gt;
: Open a terminal in the package directory&lt;br /&gt;
;Package path&lt;br /&gt;
: Location of the package's OSC working copy&lt;br /&gt;
|-&lt;br /&gt;
| File-related buttons&lt;br /&gt;
| Patch-related buttons&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
;New&lt;br /&gt;
: Create a new empty file. Currently not available.&lt;br /&gt;
;Import&lt;br /&gt;
: Add a file from your local filesystem to the package.&lt;br /&gt;
;Delete&lt;br /&gt;
: Delete the selected file from the package.&lt;br /&gt;
;Modify&lt;br /&gt;
: Launch an editor on the selected file.&lt;br /&gt;
|&lt;br /&gt;
;New&lt;br /&gt;
: Generate a patch from the changes made into the project filesystem, and add this patch to the package and in the yaml and/or spec files. This patch becomes the current patch of the package, until the next '%prep'.&lt;br /&gt;
;Import&lt;br /&gt;
: Import an external patch. Currently not available.&lt;br /&gt;
;Delete&lt;br /&gt;
: Delete a patch. Currently not available.&lt;br /&gt;
;Update&lt;br /&gt;
: Update the current patch with new modifications.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== The project filesystem tab ====&lt;br /&gt;
This tab shows the complete file tree of selected project's filesystem.&lt;br /&gt;
If a package is selected and it has previously been imported into the filesystem, its path is expanded by default.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
;Open terminal&lt;br /&gt;
: Open a terminal in the filesystem, using '''chroot''', in the source directory of the current package if it is installed.&lt;br /&gt;
;Chroot path&lt;br /&gt;
: Location of the project filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| Repository-related buttons&lt;br /&gt;
| Filesystem-related buttons&lt;br /&gt;
| Rpmbuild-related buttons&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
;New&lt;br /&gt;
: Make a package repository accessible from zypper inside the filesystem, by URL.&lt;br /&gt;
;Import&lt;br /&gt;
: Make the package repository of another OBS Light project accessible from zypper inside the filesystem.&lt;br /&gt;
;Delete&lt;br /&gt;
: Delete a repository from the filesystem.&lt;br /&gt;
;Modify&lt;br /&gt;
: Modify the URL or alias of a repository.&lt;br /&gt;
|&lt;br /&gt;
;New&lt;br /&gt;
: Create the filesystem of the project.&lt;br /&gt;
;Import&lt;br /&gt;
: Not yet implemented.&lt;br /&gt;
;Delete&lt;br /&gt;
: Delete the filesystem&lt;br /&gt;
;Modify&lt;br /&gt;
: Not yet implemented.&lt;br /&gt;
|&lt;br /&gt;
;%prep&lt;br /&gt;
: Install the sources of a package into the filesystem, execute the %prep section of the spec file and do the first build.&lt;br /&gt;
;%build&lt;br /&gt;
: Execute the %build section of the spec file of the selected package, in an alternative rpmbuild directory.&lt;br /&gt;
;%install&lt;br /&gt;
: Execute the %install section of the spec file of the selected package, in an alternative rpmbuild directory.&lt;br /&gt;
;%files&lt;br /&gt;
: Build the source and binary RPMs of the selected package, in an alternative rpmbuild directory.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MIC projects tab ==&lt;br /&gt;
This tab allows you to manage a MIC (MeeGo Image Creator) project. You can change its architecture and image type, and edit its Kickstart file.&lt;br /&gt;
&lt;br /&gt;
On the left panel you can see a list of MIC projects. Click ''New'' to add one, you will be asked for a name, and an empty Kickstart file will be created.&lt;br /&gt;
&lt;br /&gt;
=== Project options ===&lt;br /&gt;
[[File: Obslightgui_mic_01.png|600px|OBS Light GUI main window - MIC project - Project options]]&lt;br /&gt;
&lt;br /&gt;
In this tab you can:&lt;br /&gt;
* change the generated image type&lt;br /&gt;
** ''fs'': a directory hierarchy containing the whole filesystem&lt;br /&gt;
** ''livecd'': a bootable image suitable for a CD&lt;br /&gt;
** ''liveusb'': a bootable image suitable for a USB key&lt;br /&gt;
** ''loop'': a filesystem image to be mounted with a loop device (with ''mount -o loop'')&lt;br /&gt;
** ''raw''&lt;br /&gt;
* change the architecture of the project (only i686 has been tested)&lt;br /&gt;
* open the directory of the project (with you default file browser)&lt;br /&gt;
* import a Kickstart file (that will overwrite the current file)&lt;br /&gt;
* export the current Kickstart file&lt;br /&gt;
* launch the creation of the image&lt;br /&gt;
&lt;br /&gt;
=== Kickstart options ===&lt;br /&gt;
[[File: Obslightgui_mic_02.png|600px|OBS Light GUI main window - MIC project - Kickstart options]]&lt;br /&gt;
&lt;br /&gt;
In this tab you can add, delete or modify the different options of the project's Kickstart file. These options are documented [http://fedoraproject.org/wiki/Anaconda/Kickstart here].&lt;br /&gt;
&lt;br /&gt;
* To add an option press the ''add'' button, and enter the full option line in the bottom text field, then press ''save''.&lt;br /&gt;
* To modify an option, select it, modify the bottom text field and press ''save''.&lt;br /&gt;
* To delete an option, select it, press ''delete'', and then ''save''.&lt;br /&gt;
&lt;br /&gt;
Notice that some options may have aliases, which will appear on the same line in the option list.&lt;br /&gt;
The ''repo'' option will not be listed here, but in the [[OBS_Light_Manual#Repositories | Repositories]] tab.&lt;br /&gt;
&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
[[File: Obslightgui_mic_03.png|600px|OBS Light GUI main window - MIC project - Kickstart repositories]]&lt;br /&gt;
&lt;br /&gt;
In this tab, you can add, delete, or modify Kickstart repositories.&lt;br /&gt;
&lt;br /&gt;
* To add a repository, there are two possibilities:&lt;br /&gt;
** The repository is from an OBS project you worked on with OBS Light: press ''Import from OBS project'' and select the project.&lt;br /&gt;
** The repository is from an external project: press ''Add by URL'', and you will be asked for an URL and a name.&lt;br /&gt;
* To delete a repository, select it and press ''Delete''.&lt;br /&gt;
* To edit a repository, double-click on the cell of the property you want to edit (or simple click if it is a checkbox).&lt;br /&gt;
The changes are automatically saved.&lt;br /&gt;
&lt;br /&gt;
=== Packages ===&lt;br /&gt;
[[File: Obslightgui_mic_04.png|600px|OBS Light GUI main window - MIC project - Kickstart packages]]&lt;br /&gt;
&lt;br /&gt;
Here you can edit the package list of the project's Kickstart file.&lt;br /&gt;
Notice that multiple ''%package'' sections of original Kickstart file have been merged into one.&lt;br /&gt;
&lt;br /&gt;
Each package has an ''Included'' parameter which tells if it should be included in the generated image. If ''Included'' is not checked, the package will be explicitly excluded in the Kickstart file (its name will be prefixed with '-').&lt;br /&gt;
&lt;br /&gt;
=== Package groups ===&lt;br /&gt;
Here you can edit the list of package groups of the project's Kickstart file.&lt;br /&gt;
At the moment, no verification is done on package groups.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
[[File: Obslightgui_mic_06.png|600px|OBS Light GUI main window - MIC project - Kickstart scripts]]&lt;br /&gt;
&lt;br /&gt;
Here you can add, delete or modify Kickstart scripts.&lt;br /&gt;
&lt;br /&gt;
* To add a script, press ''Add'', write your script in the bottom text field, choose script options in the right panel, and press ''Save''.&lt;br /&gt;
* To delete a script, select it and press ''Delete''.&lt;br /&gt;
* To modify a script, select it, modify the script in the bottom text field or the script options in the right panel, and press ''Save''.&lt;br /&gt;
&lt;br /&gt;
=== Overlay files ===&lt;br /&gt;
[[File: Obslightgui_mic_07.png|600px|OBS Light GUI main window - MIC project - Overlay files]]&lt;br /&gt;
&lt;br /&gt;
Here you can add files that will be included in the project image.&lt;br /&gt;
* To add an overlay file, press ''Add'' and a file browser will appear. Browse to your file and validate. Then a text dialog will appear, enter the path were you want your file to be copied in the image. '''tar''' archives will be extracted at the location you selected, instead of simply being copied.&lt;br /&gt;
* To delete an overlay file, select it and press ''Delete''.&lt;br /&gt;
&lt;br /&gt;
Implementation details:&lt;br /&gt;
* source files are first copied in MIC project's directory&lt;br /&gt;
* each overlay file will appear as a ''%post --nochoot'' script in the Kickstart file (but will be hidden in the ''Scripts'' tab).&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;tt&amp;gt;&amp;quot;Source package 'xxx' not found&amp;quot;&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;&amp;quot;Problem: nothing provides X needed by Y&amp;quot;&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
These message may appear in two situations:&lt;br /&gt;
* The package you are trying to build is missing a dependency. OBS Light is not capable of searching dependencies outside the project from which your package comes. You will need to configure an additional repository in the project filesystem, using command ''filesystem repositories add'' or [[OBS_Light_Manual#The_project_filesystem_tab | the repository-related buttons]] in the GUI.&lt;br /&gt;
* In an ARM project filesystem, zypper or libzypp are broken, they do not see '''noarch''' packages. This problem was reported with zypper 1.5.3 and libzypp 8.12.1. We suggest you to update your zypper version to 1.6+. For convenience, we pre-built zypper 1.6.15 and libzypp 9.10.2 to Meego 1.2.0.&lt;br /&gt;
&lt;br /&gt;
=== How to install zypper 1.6.15 from our repository in an ARM project filesystem ===&lt;br /&gt;
==== From commandline ====&lt;br /&gt;
First add our repository to your filesystem's zypper configuration file:&lt;br /&gt;
 obslight filesystem repositories add http://repo.pub.meego.com/Project:/OBS_Light:/Zypper/MeeGo_1.2_OSS/ &amp;quot;Zypper_1.6.15_backport&amp;quot; $ProjectName&lt;br /&gt;
&lt;br /&gt;
Then chroot in the filesystem and update '''zypper''':&lt;br /&gt;
 obslight filesystem enter $ProjectName&lt;br /&gt;
  $ zypper update zypper&lt;br /&gt;
  $ exit&lt;br /&gt;
==== From GUI ====&lt;br /&gt;
* ''Project filesystem'' tab, ''Repository''-&amp;gt;''New'', URL http://repo.pub.meego.com/Project:/OBS_Light:/Zypper/MeeGo_1.2_OSS/ and alias &amp;quot;Zypper_1.6.15_backport&amp;quot;&lt;br /&gt;
* Then ''Project filesystem''-&amp;gt;''Open terminal''&lt;br /&gt;
 # zypper update zypper&lt;br /&gt;
 # exit&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;tt&amp;gt;&amp;quot;error: Architecture is not included: armv8el&amp;quot;&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
The '''build''' package of your project filesystem does not support armv8el builds. Consider using another version, like the 2011.03.29 of MeeGo's repositories.&lt;br /&gt;
&lt;br /&gt;
=== How to install '''build''' version 2011.03.29 in a MeeGo 1.2.0 project filesystem ===&lt;br /&gt;
First add the MeeGo building tools repository to your project filesystem's zypper configuration file:&lt;br /&gt;
 obslight filesystem repositories add http://download.meego.com/live/Tools:/Building/MeeGo_1.2.0/ &amp;quot;Tools:Building_MeeGo_1.2.0&amp;quot; $ProjectName&lt;br /&gt;
&lt;br /&gt;
Then chroot in the filesystem and update '''build''':&lt;br /&gt;
 obslight filesystem enter $ProjectName&lt;br /&gt;
   # zypper update build&lt;br /&gt;
   # exit&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;tt&amp;gt;&amp;quot;chroot: failed to run command `sh': No such file or directory&amp;quot;&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
This appears when '''binfmt_misc''' is not or badly configured.&lt;br /&gt;
Launch qemu's binfmt configuration script (as root):&lt;br /&gt;
 qemu-binfmt-conf.sh&lt;br /&gt;
If you still get the same message, try this (as root):&lt;br /&gt;
 echo -1 &amp;gt; /proc/sys/fs/binfmt_misc/arm&lt;br /&gt;
 echo &amp;quot;:arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:`which qemu-arm`:&amp;quot; &amp;gt; /proc/sys/fs/binfmt_misc/register&lt;br /&gt;
&lt;br /&gt;
== gnomekeyring.IOError ==&lt;br /&gt;
This error appears on Ubuntu when running obslight from a console, without a graphical environment. At the moment, the only known solution is to run obslight only from a graphical environment (e.g. Gnome).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;tt&amp;gt;&amp;quot;sudo: sorry, you must have a tty to run sudo&amp;quot;&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
This message may appear in logs if the '''requiretty''' option is set in sudo configuration file. Edit ''/etc/sudoers'' and comment out the following line:&lt;br /&gt;
 Defaults    requiretty&lt;br /&gt;
&lt;br /&gt;
= Internals =&lt;br /&gt;
== ObsLight GUI ==&lt;br /&gt;
[[File: ObsLightGui_class_diagram.png|link=http://wiki.meego.com/images/ObsLightGui_class_diagram.png|OBS Light GUI class diagram, click to see full size]]&lt;br /&gt;
&lt;br /&gt;
[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/dia_Resource/ObsLightGui_class_diagram.dia Dia source file]&lt;br /&gt;
&lt;br /&gt;
== ObsLight command line ==&lt;br /&gt;
[[File: Doc_ObsLightCommandLine_class_diagram.png|link=http://wiki.meego.com/File:Doc_ObsLightCommandLine_class_diagram.png|OBS Light command line class diagram, click to see full size]]&lt;br /&gt;
&lt;br /&gt;
[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/dia_Resource/Doc_ObsLightCommandLine_class_diagram.dia Dia source file]&lt;br /&gt;
&lt;br /&gt;
== ObsLight API Manager ==&lt;br /&gt;
[[File: Doc_ObsLight_API_Manager_class_diagram.png|link=http://wiki.meego.com/File:Doc_ObsLight_API_Manager_class_diagram.png|OBS Light API Manager class diagram, click to see full size]]&lt;br /&gt;
&lt;br /&gt;
[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/dia_Resource/Doc_ObsLight_API_Manager_class_diagram.dia Dia source file]&lt;br /&gt;
&lt;br /&gt;
= Testing =&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
You can find in [https://meego.gitorious.org/meego-developer-tools/obs-light OBS Light Git repository] some configuration files for [http://vagrantup.com/ Vagrant] and [https://github.com/jedi4ever/veewee Veewee]. Using them, you can build reference virtual machines (Fedora 16, openSUSE 12.1 and Ubuntu 11.10) and run test suites on them.&lt;br /&gt;
# Make a copy of a base virtual machine&lt;br /&gt;
# Copy test script and associated files in a shared folder&lt;br /&gt;
# Run virtual machine&lt;br /&gt;
# Run test script inside virtual machine with SSH&lt;br /&gt;
# Get results from shared folder&lt;br /&gt;
# Destroy (or just stop in case of failure) virtual machine&lt;br /&gt;
The complete procedure is explained in a [https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/test/veewee/README README].&lt;br /&gt;
&lt;br /&gt;
== Test scenarios ==&lt;br /&gt;
Currently we provide only one test scenario:&lt;br /&gt;
# install OBS Light&lt;br /&gt;
# configure a server&lt;br /&gt;
# import a project&lt;br /&gt;
# create project filesystem&lt;br /&gt;
# import some packages (vim, tzdata, fastinit)&lt;br /&gt;
# execute preparation step of these packages&lt;br /&gt;
# build the RPMs of these packages&lt;br /&gt;
This scenario is implemented in a shell script, available [https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/test/update_and_run_tests.sh here].&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:Tizen_OBS-Light-V2.1.pdf</id>
		<title>File:Tizen OBS-Light-V2.1.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:Tizen_OBS-Light-V2.1.pdf"/>
				<updated>2012-05-08T21:58:38Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: OBS Light presentation done at the Tizen's Developers conference
On May 7th in San Francisco, Ca, USA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OBS Light presentation done at the Tizen's Developers conference&lt;br /&gt;
On May 7th in San Francisco, Ca, USA&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_security</id>
		<title>TV security</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_security"/>
				<updated>2012-05-04T05:43:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: Created page with &amp;quot;= MeeGo TV Security =  == 1, Short expression of the need ==   == 2, Purpose/audience ==   == 3, Overview ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo TV Security =&lt;br /&gt;
&lt;br /&gt;
== 1, Short expression of the need ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2, Purpose/audience ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3, Overview ==&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-05T17:51:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Setup and configure apache2 for the api and webui */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
===Enforce the hostname===&lt;br /&gt;
&lt;br /&gt;
As getting the DNS fully correctly and configured is not that easy and not always under your control, you need to check that the right hostname will be return by the system&lt;br /&gt;
&lt;br /&gt;
  hostname -f&lt;br /&gt;
&lt;br /&gt;
If the result is not obslightserver&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;obslightserver&amp;quot; &amp;gt; /etc/HOSTNAME&lt;br /&gt;
&lt;br /&gt;
Do not let dhcp change the hostname&lt;br /&gt;
  vim /etc/sysconfig/network/dhcp&lt;br /&gt;
  DHCLIENT_SET_HOSTNAME=&amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you configure a mobile OBS (e.g. a laptop for training or demos) or that you are connecting on a network where you IP address or name is not stable (e.g. a VPN), you do '''not''' want to activate ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
In that case comment all related ssh parameter and replace https:// by http:// in config file.&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note &lt;br /&gt;
# a default certificate already exists but re-creating one with the right IP address is good practice.&lt;br /&gt;
# The Common Name [CN] '''must''' be the same than your server name ''(in our case obslightserver)'' or osc ''(V 0.134.1)'' will reject the connection to the API.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
===Deactivate Light HTTPD===&lt;br /&gt;
&lt;br /&gt;
insserv -r lighttpd&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
===The WebUI miss some icons===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current update process seems to create circular links you can find them by running the command&lt;br /&gt;
find /srv/www/obs/ -name package_add.png -exec file {} \;&lt;br /&gt;
&lt;br /&gt;
If that is the case, I have uploaded on this wiki the correct images and icons. You will find them in [[File:Bento-images.tgz]]&lt;br /&gt;
&lt;br /&gt;
  cd /srv/www/obs/webui/public/themes/bento&lt;br /&gt;
  tar xzvf bento-image.tgz&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-04T15:32:48Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Enforce the hostname */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
===Enforce the hostname===&lt;br /&gt;
&lt;br /&gt;
As getting the DNS fully correctly and configured is not that easy and not always under your control, you need to check that the right hostname will be return by the system&lt;br /&gt;
&lt;br /&gt;
  hostname -f&lt;br /&gt;
&lt;br /&gt;
If the result is not obslightserver&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;obslightserver&amp;quot; &amp;gt; /etc/HOSTNAME&lt;br /&gt;
&lt;br /&gt;
Do not let dhcp change the hostname&lt;br /&gt;
  vim /etc/sysconfig/network/dhcp&lt;br /&gt;
  DHCLIENT_SET_HOSTNAME=&amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note &lt;br /&gt;
# a default certificate already exists but re-creating one with the right IP address is good practice.&lt;br /&gt;
# The Common Name [CN] '''must''' be the same than your server name ''(in our case obslightserver)'' or osc ''(V 0.134.1)'' will reject the connection to the API.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
===Deactivate Light HTTPD===&lt;br /&gt;
&lt;br /&gt;
insserv -r lighttpd&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
===The WebUI miss some icons===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current update process seems to create circular links you can find them by running the command&lt;br /&gt;
find /srv/www/obs/ -name package_add.png -exec file {} \;&lt;br /&gt;
&lt;br /&gt;
If that is the case, I have uploaded on this wiki the correct images and icons. You will find them in [[File:Bento-images.tgz]]&lt;br /&gt;
&lt;br /&gt;
  cd /srv/www/obs/webui/public/themes/bento&lt;br /&gt;
  tar xzvf bento-image.tgz&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-04T15:00:06Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Update the internal DB after the upgrade */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
===Enforce the hostname===&lt;br /&gt;
&lt;br /&gt;
As getting the DNS fully correctly and configured is not that easy and not always under your control, you need to check that the right hostname will be return by the system&lt;br /&gt;
&lt;br /&gt;
  hostname -f&lt;br /&gt;
&lt;br /&gt;
If the result is not obslightserver&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;obslightserver&amp;quot; &amp;gt; /etc/HOSTNAME&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note &lt;br /&gt;
# a default certificate already exists but re-creating one with the right IP address is good practice.&lt;br /&gt;
# The Common Name [CN] '''must''' be the same than your server name ''(in our case obslightserver)'' or osc ''(V 0.134.1)'' will reject the connection to the API.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
===Deactivate Light HTTPD===&lt;br /&gt;
&lt;br /&gt;
insserv -r lighttpd&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
===The WebUI miss some icons===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current update process seems to create circular links you can find them by running the command&lt;br /&gt;
find /srv/www/obs/ -name package_add.png -exec file {} \;&lt;br /&gt;
&lt;br /&gt;
If that is the case, I have uploaded on this wiki the correct images and icons. You will find them in [[File:Bento-images.tgz]]&lt;br /&gt;
&lt;br /&gt;
  cd /srv/www/obs/webui/public/themes/bento&lt;br /&gt;
  tar xzvf bento-image.tgz&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-04T14:56:44Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Setup and configure apache2 for the api and webui */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note &lt;br /&gt;
# a default certificate already exists but re-creating one with the right IP address is good practice.&lt;br /&gt;
# The Common Name [CN] '''must''' be the same than your server name ''(in our case obslightserver)'' or osc ''(V 0.134.1)'' will reject the connection to the API.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
===Deactivate Light HTTPD===&lt;br /&gt;
&lt;br /&gt;
insserv -r lighttpd&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
===The WebUI miss some icons===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current update process seems to create circular links you can find them by running the command&lt;br /&gt;
find /srv/www/obs/ -name package_add.png -exec file {} \;&lt;br /&gt;
&lt;br /&gt;
If that is the case, I have uploaded on this wiki the correct images and icons. You will find them in [[File:Bento-images.tgz]]&lt;br /&gt;
&lt;br /&gt;
  cd /srv/www/obs/webui/public/themes/bento&lt;br /&gt;
  tar xzvf bento-image.tgz&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-04T13:54:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Restart apache2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note a default certificate already exists but re-creating one with the right IP address is prefereable.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
===Deactivate Light HTTPD===&lt;br /&gt;
&lt;br /&gt;
insserv -r lighttpd&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
===The WebUI miss some icons===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current update process seems to create circular links you can find them by running the command&lt;br /&gt;
find /srv/www/obs/ -name package_add.png -exec file {} \;&lt;br /&gt;
&lt;br /&gt;
If that is the case, I have uploaded on this wiki the correct images and icons. You will find them in [[File:Bento-images.tgz]]&lt;br /&gt;
&lt;br /&gt;
  cd /srv/www/obs/webui/public/themes/bento&lt;br /&gt;
  tar xzvf bento-image.tgz&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-02T16:28:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Changing the default URLs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note a default certificate already exists but re-creating one with the right IP address is prefereable.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
===The WebUI miss some icons===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current update process seems to create circular links you can find them by running the command&lt;br /&gt;
find /srv/www/obs/ -name package_add.png -exec file {} \;&lt;br /&gt;
&lt;br /&gt;
If that is the case, I have uploaded on this wiki the correct images and icons. You will find them in [[File:Bento-images.tgz]]&lt;br /&gt;
&lt;br /&gt;
  cd /srv/www/obs/webui/public/themes/bento&lt;br /&gt;
  tar xzvf bento-image.tgz&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:Bento-images.tgz</id>
		<title>File:Bento-images.tgz</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:Bento-images.tgz"/>
				<updated>2012-04-02T16:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: Icons for OBS V 2.3 when upgrade mess up the system and creates circular links

see http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Icons for OBS V 2.3 when upgrade mess up the system and creates circular links&lt;br /&gt;
&lt;br /&gt;
see http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3</id>
		<title>HowTo upgrade from OBS server 2.2 to 2.3</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/HowTo_upgrade_from_OBS_server_2.2_to_2.3"/>
				<updated>2012-04-02T16:16:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: Created page with &amp;quot;== Standard upgrade == Simply update your OpenSUSE distro which is the base of the OBS server appliance.   zypper update  * If you are lucky and that every thing works find. Don'...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Standard upgrade ==&lt;br /&gt;
Simply update your OpenSUSE distro which is the base of the OBS server appliance.&lt;br /&gt;
  zypper update&lt;br /&gt;
&lt;br /&gt;
* If you are lucky and that every thing works find. Don't go through the following process.&lt;br /&gt;
* If after the update, nothing works, I hepe the following instruction will help you.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This file briefly describes how to setup an OBS Light Server&lt;br /&gt;
(OBS) after an update to the version 2.3.xxx&lt;br /&gt;
(note the v 2.2.992 behaves like a 2.3)&lt;br /&gt;
&lt;br /&gt;
You will not the problem as after that upgrade nothing work :-(&lt;br /&gt;
&lt;br /&gt;
You will need :&lt;br /&gt;
&lt;br /&gt;
 - upgrade your databased schema&lt;br /&gt;
 - move from lighthttpd to apache2 (the best thing in that move)&lt;br /&gt;
 - move to https&lt;br /&gt;
 - change your default OBS config in OBS light to point to https and the new api port.&lt;br /&gt;
 - potentially recover some icons (sse joined tar file in this wiki page)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Update the internal DB after the upgrade===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stop all the OBS services&lt;br /&gt;
&lt;br /&gt;
    find /etc/init.d/ -name obs\* -exec echo {} stop \;&lt;br /&gt;
&lt;br /&gt;
* install the package require to run the DB upgrade.&lt;br /&gt;
&lt;br /&gt;
    zypper in rubygem-rdoc&lt;br /&gt;
&lt;br /&gt;
* re- populate the database&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/api/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
    cd /srv/www/obs/webui/&lt;br /&gt;
    sudo RAILS_ENV=&amp;quot;production&amp;quot; rake db:setup&lt;br /&gt;
    sudo chown -R wwwrun.www log tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Setup and configure apache2 for the api and webui===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to configure the webserver. By default, you can reach the&lt;br /&gt;
familiar web user interface on port 443 (e.g: https://localhost), the api&lt;br /&gt;
on port 444 (e.g. https://localhost:444), and the repos on port 82 (once&lt;br /&gt;
some packages are built).&lt;br /&gt;
&lt;br /&gt;
Note these is a change from the previous ports allocation. You can either change &lt;br /&gt;
the new default port back to the previous 80 and 82 or keep the new one and change your&lt;br /&gt;
OBS configuration (I assume the later as I prefer to be in line with new documentation)&lt;br /&gt;
&lt;br /&gt;
An overview page about your OBS instance can be found behind http://obslightserver&lt;br /&gt;
&lt;br /&gt;
The obs-api package comes with a apache vhost file, which does not need to get&lt;br /&gt;
modified when you stay with these defaults: /etc/apache2/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
Install the required packages via&lt;br /&gt;
&lt;br /&gt;
  zypper in obs-api apache2 apache2-mod_xforward rubygem-passenger-apache2&lt;br /&gt;
&lt;br /&gt;
Add the follwing apache modules in /etc/sysconfig/apache2:&lt;br /&gt;
 &lt;br /&gt;
  APACHE_MODULES=&amp;quot;... passenger rewrite proxy proxy_http xforward headers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable SSL in /etc/sysconfig/apache2 via&lt;br /&gt;
&lt;br /&gt;
  APACHE_SERVER_FLAGS=&amp;quot;-DSSL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enable a local config to force server name to be obslightserver&lt;br /&gt;
   &lt;br /&gt;
   APACHE_CONF_INCLUDE_DIRS=&amp;quot;local.d/*.config&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the apapche local config files&lt;br /&gt;
&lt;br /&gt;
  mkdir /etc/apache2/local.d/&lt;br /&gt;
  echo &amp;quot;ServerName obslightserver&amp;quot; &amp;gt; /etc/apache2/local.d/serverName.conf&lt;br /&gt;
&lt;br /&gt;
Correct the name of the server in the default static page&lt;br /&gt;
(depending of your dns configuration, it might be incorrect)&lt;br /&gt;
&lt;br /&gt;
   vi /srv/www/obs/overview/index.html&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver&amp;quot;&amp;gt;The OBS webui&amp;lt;/a&amp;gt; can be used to setup OBS, browse the content and to build packages.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;https://obslightserver:444&amp;quot;&amp;gt;The OBS api URL(https://obslightserver:444)&amp;lt;/a&amp;gt; can be used in clients like osc and to manage user accounts via a browser.&lt;br /&gt;
      &amp;lt;a href=&amp;quot;http://obslightserver:82&amp;quot;&amp;gt;The OBS repositories&amp;lt;/a&amp;gt; contain the build results, the repositories can be added to package managers like zypper or apt.&lt;br /&gt;
&lt;br /&gt;
Generate an ssl certificate via following commands:&lt;br /&gt;
Note a default certificate already exists but re-creating one with the right IP address is prefereable.&lt;br /&gt;
&lt;br /&gt;
  mkdir /srv/obs/certs&lt;br /&gt;
  openssl genrsa -out /srv/obs/certs/server.key 1024 &lt;br /&gt;
  openssl req -new -key /srv/obs/certs/server.key \&lt;br /&gt;
          -out /srv/obs/certs/server.csr&lt;br /&gt;
  openssl x509 -req -days 365 -in /srv/obs/certs/server.csr \&lt;br /&gt;
          -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt&lt;br /&gt;
  cat /srv/obs/certs/server.key /srv/obs/certs/server.crt \&lt;br /&gt;
      &amp;gt; /srv/obs/certs/server.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===/srv/www/obs/webui/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/IPs of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/webui/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the WebUI hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Change /srv/www/obs/api/config/options.yml===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you change the hostnames/ips of the api, you need to adjust &lt;br /&gt;
&amp;quot;source_server_url&amp;quot; accordingly in&lt;br /&gt;
&lt;br /&gt;
  /srv/www/obs/api/config/options.yml&lt;br /&gt;
&lt;br /&gt;
You should set &amp;quot;exception_recipients&amp;quot; to a valid mail address which&lt;br /&gt;
should receive notification mail if the API hits any program exception.&lt;br /&gt;
&lt;br /&gt;
It is recommended to enable &lt;br /&gt;
&lt;br /&gt;
  use_xforward:true&lt;br /&gt;
&lt;br /&gt;
as well here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Restart apache2===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afterwards you can start the OBS web api via &lt;br /&gt;
&lt;br /&gt;
  rcapache2 start        # use &amp;quot;insserv apache2&amp;quot; for permanent start&lt;br /&gt;
  rcobsapidelayed start  # use &amp;quot;insserv obsapidelayed&amp;quot; for permanent start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changing the default URLs===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To change (if needed) the default URLs of the api, configure the apache2 vhosts&lt;br /&gt;
accordingly. Edit /etc/apache2/vhosts.d/obs.conf and add the new virtual&lt;br /&gt;
hostnames.&lt;br /&gt;
&lt;br /&gt;
Then change the FRONTEND_HOST variable in &lt;br /&gt;
/srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
to also point to the new api URL.&lt;br /&gt;
&lt;br /&gt;
The config.yml from chap. 3 and 4 lust be in line with that config&lt;br /&gt;
as well as the file /srv/www/obs/overview/index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using osc with your local build service:===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to use the command line tool for the build service, run osc with&lt;br /&gt;
&lt;br /&gt;
  osc -A https://obslightserver:444 ls&lt;br /&gt;
&lt;br /&gt;
for example. osc asks the first time for a user and password pair.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous notes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 * logs are located in various directories.&lt;br /&gt;
&lt;br /&gt;
       apache2: /var/log/apache2&lt;br /&gt;
       obs: /srv/obs/log&lt;br /&gt;
       api: /srv/www/obs/api/log&lt;br /&gt;
       webui: /srv/www/obs/webui/log&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-04-02T16:08:11Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Where to send bug reports ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
Each OBS project has its own directory in '''~/OBSLight/ObsProjects/''', each MIC project has its own directory in '''~/OBSLight/MicProjects/'''.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/ObslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
While running an OBS Light appliance is simple and easy and just requires 1GB of RAM allocated to the virtual machine, running an OBS server appliance can be much more demanding but running the OBS server server appliance on your desktop or laptop (a minimum 4GB of RAM is mandatory) via a virtual machine can be very handy during evaluation tests.&amp;lt;br/&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare. You need to patch on the OBS server appliance ''(need to be root)'' the file '''/etc/sysconfig/obs-worker''' to set the variable OBS_WORKER_INSTANCES to 1 (default is zero) to limit the RAM resources requires by your appliance during build process.&lt;br /&gt;
If you plan to build large packages such as Chromium you will need more than 2GB of RAM allocated (actually on my desktop I have 16GB). &amp;lt;br/&amp;gt;&lt;br /&gt;
You can overcome that limit with the addition of an obsworker appliance on a separate server. OBS Light project provides one pre-configured to work with and OBS Light server appliance.&amp;lt;br/&amp;gt;&lt;br /&gt;
If you use the Bridge mode, external OBS work appliance will be detected and used automatically (NAT more would require a complex configuration). The Worker can be running on a more powerfull unit and speed the preparation work before for example leaving the office with a complete fully built project on a laptop.&lt;br /&gt;
You can stop the worker on the laptop by the command '''rcobsworker stop''' ''(need to be root)''. You can check that your OBS Worker appliance can see your OBS Light Server Appliance with the command '''slptool findsrvs obs.source_server'''&amp;lt;br/&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br/&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running, there is a button under the progress bar.&lt;br /&gt;
* A log file is written in &amp;lt;tt&amp;gt;~/OBSLight/obslight.log&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the project filesystem? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your project filesystem's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 ## obslight filesystem repositories add &amp;lt;repository_url&amp;gt; &amp;lt;repository_alias&amp;gt; &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight filesystem repositories add http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ MeeGo_non-oss MeeGo_1.2_oss&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 ## obslight filesystem repositories add from &amp;lt;source_project_alias&amp;gt; &amp;lt;project_alias&amp;gt;&lt;br /&gt;
 obslight filesystem repositories add from MeeGo_1.2_non-oss MeeGo_1.2_oss&lt;br /&gt;
&lt;br /&gt;
== How to create a new package ? (from an existing SPEC file) ==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
* A project on an OBS server (public or [http://susestudio.com/a/e0uuBG/meego-obs private]) where you have maintainer rights (for example your home project), and with a [http://en.opensuse.org/openSUSE:Build_Service_Tutorial#Step_Three.C2.A0.E2.80.93_Choose_build_targets build target] already configured.&lt;br /&gt;
* An archive of your program, named like &amp;lt;tt&amp;gt;program-version.tar.gz&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;tar.bz2&amp;lt;/tt&amp;gt; is OK).&lt;br /&gt;
* A valid SPEC file, named &amp;lt;tt&amp;gt;program.spec&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Procedure ===&lt;br /&gt;
[[OBS Light]] cannot create new packages at the moment. You have to use the web UI or ''osc'' first.&lt;br /&gt;
# Using the web UI:&lt;br /&gt;
#* Go to the project you want to add your package to.&lt;br /&gt;
#* Go to ''Packages'' tab.&lt;br /&gt;
#* Click ''Create package''.&lt;br /&gt;
#* Give a name to the package (we recommend the same name as your program, in lower-case), a title and a description (optional but recommended).&lt;br /&gt;
# Now you should be able to import this package in [[OBS Light]].&lt;br /&gt;
#* Run &amp;lt;tt&amp;gt;obslightgui&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#* Click ''Import project'' button (on the left-bottom).&lt;br /&gt;
#* Select a server from the list or configure a new one.&lt;br /&gt;
#* Select your project in the list.&lt;br /&gt;
#* Select a target and an architecture.&lt;br /&gt;
#* Give an alias to the project (can be the name of the project without &amp;quot;''':'''&amp;quot;, we suggest suffixing with the architecture).&lt;br /&gt;
#* You should now see a list of packages, with the one you created in web UI.&lt;br /&gt;
#* Select it and press ''finish''.&lt;br /&gt;
# The package is now imported into OBS Light, with status ''broken'' (because it has no files).&lt;br /&gt;
#* In the right panel, select tab ''Local directory'', click ''Import file''.&lt;br /&gt;
#* Select your SPEC file and archive (and YAML file if you have one).&lt;br /&gt;
#* The files appear in the list with status ''Added''.&lt;br /&gt;
#* In the middle panel, click ''Commit changes'', and enter a commit message.&lt;br /&gt;
#* The files are uploaded, and the package starts to build on the OBS server.&lt;br /&gt;
&lt;br /&gt;
== How to prepare a Spec file using Spectacle ? ==&lt;br /&gt;
*Official documentation: [[Spectacle]]&lt;br /&gt;
*Why using Spectacle: [[Packaging/Guidelines#Writing_a_package_from_scratch]]&lt;br /&gt;
&lt;br /&gt;
=== Generate a YAML file from scratch ===&lt;br /&gt;
==== Manually ====&lt;br /&gt;
Run the following command:&lt;br /&gt;
 specify --new=your_package_name&lt;br /&gt;
It will create a new YAML file from a template, and ask you to edit the file. Just replace &amp;quot;&amp;lt;tt&amp;gt;^^^&amp;lt;/tt&amp;gt;&amp;quot; occurrences by which seems appropriate, and got to the [[#Customize_the_Spec_and_YAML_files | Spec and YAML customization section]].&lt;br /&gt;
&lt;br /&gt;
==== Automatically ====&lt;br /&gt;
[https://meego.gitorious.org/meego-developer-tools/autospectacle autospectacle] can analyze source archives and generate an appropriate YAML file, but has no documentation.&lt;br /&gt;
&lt;br /&gt;
=== Generate a YAML file from a Spec file ===&lt;br /&gt;
If you already have a Spec file for your program, you may still want to create a YAML file in order to standardize or simplify it. Run the following command:&lt;br /&gt;
 spec2spectacle your_package_name.spec&lt;br /&gt;
It will parse your Spec file, generate a YAML file, and generate a new Spec file from the YAML file. Notice that the conversion is not perfect, and you may lost information.&lt;br /&gt;
&lt;br /&gt;
=== Customize the Spec and YAML files ===&lt;br /&gt;
Except from lines between &amp;quot;&amp;lt;tt&amp;gt;# &amp;gt;&amp;gt; &amp;lt;/tt&amp;gt;&amp;quot; and &amp;quot;&amp;lt;tt&amp;gt;# &amp;lt;&amp;lt; &amp;lt;/tt&amp;gt;&amp;quot; tags, the content of the Spec file should not be modified by you, because it will be re-written by &amp;lt;tt&amp;gt;specify&amp;lt;/tt&amp;gt; each time you modify the YAML file. So if you see a line you don't like, you have to find which option of the YAML file has generated it (or can prevent it to be generated), change it, and run the following command to update the Spec file:&lt;br /&gt;
 specify your_package_name.yaml&lt;br /&gt;
Complete list of Spectacle options is here: [[Spectacle#Syntax_of_spectacle_YAML | Syntax of spectacle YAML]]&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
== Help I have updated and broken my OBS server appliance ==&lt;br /&gt;
The move to OBS 2.3 seems to be far less transparent that it should.&lt;br /&gt;
But the facilities offered by the V 2.3 are valuable and move to it is worthwhile.&amp;lt;br&amp;gt;&lt;br /&gt;
You will find here how I did it, it might work for you but it is without guaranty.&lt;br /&gt;
'''Do a snapshot of your appliance before starting'''.&amp;lt;br&amp;gt;&lt;br /&gt;
[[HowTo upgrade from OBS server 2.2 to 2.3]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[OBS_Light_Installation | OBS Light installation]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-04-02T15:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Where to Download OBS Light? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image. The name was chosen to express that it remains an OBS base development process, but which is lighter to use, the idea of seeing the project as  a light to guide the user in the flow of tools such as OBS, OSC, MIC, ... only came later. Once you will also see it incorrectly spell as 'OBS Lite'.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= Where to Download OBS Light? =&lt;br /&gt;
&lt;br /&gt;
OBS Light is available either as a ready to run appliance to execute as a virtual machine, ready made packages for common distros and obsviously as source file to build it by yourself.&lt;br /&gt;
&lt;br /&gt;
* [http://susestudio.com/a/e0uuBG/meego-obs-light OBS Light appliance], built thanks to Suse studio &lt;br /&gt;
&lt;br /&gt;
* '''[[OBS Light Installation | Up-to-date Builds]]''' for various Linux Distros.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-04-02T15:31:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Download OBS Light? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image. The name was chosen to express that it remains an OBS base development process, but which is lighter to use, the idea of seeing the project as  a light to guide the user in the flow of tools such as OBS, OSC, MIC, ... only came later. Once you will also see it incorrectly spell as 'OBS Lite'.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= Where to Download OBS Light? =&lt;br /&gt;
&lt;br /&gt;
OBS Light is available either as a ready to run appliance to execute as a virtual machine, ready made packages for common distros and obsviously as source file to build it by yourself.&lt;br /&gt;
&lt;br /&gt;
* [http://susestudio.com/a/e0uuBG/meego-obs-light OBS Light appliance], built thanks to Suse studio &lt;br /&gt;
&lt;br /&gt;
* [[OBS Light Installation | Uptodate Build]] for various Linux Distros.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-04-02T15:31:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How to test or download OBS Light? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image. The name was chosen to express that it remains an OBS base development process, but which is lighter to use, the idea of seeing the project as  a light to guide the user in the flow of tools such as OBS, OSC, MIC, ... only came later. Once you will also see it incorrectly spell as 'OBS Lite'.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= Download OBS Light? =&lt;br /&gt;
&lt;br /&gt;
OBS Light is available either as a ready to run appliance to execute as a virtual machine, ready made packages for common distros and obsviously as source file to build it by yourself.&lt;br /&gt;
&lt;br /&gt;
* [http://susestudio.com/a/e0uuBG/meego-obs-light OBS Light appliance], built thanks to Suse studio &lt;br /&gt;
&lt;br /&gt;
* [[OBS Light Installation | Uptodate Build]] for various Linux Distros.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-04-02T15:31:00Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How to test or use OBS Light? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image. The name was chosen to express that it remains an OBS base development process, but which is lighter to use, the idea of seeing the project as  a light to guide the user in the flow of tools such as OBS, OSC, MIC, ... only came later. Once you will also see it incorrectly spell as 'OBS Lite'.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= How to test or download OBS Light? =&lt;br /&gt;
&lt;br /&gt;
OBS Light is available either as a ready to run appliance to execute as a virtual machine, ready made packages for common distros and obsviously as source file to build it by yourself.&lt;br /&gt;
&lt;br /&gt;
* [http://susestudio.com/a/e0uuBG/meego-obs-light OBS Light appliance], built thanks to Suse studio &lt;br /&gt;
&lt;br /&gt;
* [[OBS Light Installation | Uptodate Build]] for various Linux Distros.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_Installation</id>
		<title>OBS Light Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_Installation"/>
				<updated>2012-03-20T11:38:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* For OpenSUSE 12.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OBS Light Deliverable =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[OBS Light]] project deliverable which are available are listed on this page. Publication of the information will follow the progress of the implementation (yes, we do publish early draft versions, using them is at your risk)&lt;br /&gt;
&lt;br /&gt;
== Packaged versions ==&lt;br /&gt;
Packaged versions of the OBS Light client (still in development) are available for OpenSUSE, MeeGo, Debian and Ubuntu.&lt;br /&gt;
=== For OpenSUSE 11.4 ===&lt;br /&gt;
The repository is [http://repo.pub.meego.com/Project:/OBS_Light/openSUSE_11.4/ here].&lt;br /&gt;
There are 2 packages:&lt;br /&gt;
* ''obslight'', which contains the API, a commandline client, and [[obstag | obstag, obs2obscopy and obsextractgroups]]&lt;br /&gt;
* ''obslight-gui'', which contains the graphical user interface&lt;br /&gt;
To install ''obslight'':&lt;br /&gt;
 zypper ar -f http://repo.pub.meego.com/Project:/OBS_Light/openSUSE_11.4/ OBS_Light&lt;br /&gt;
optional, to disable GPG checks and prevent &amp;quot;File 'repomd.xml' from repository 'OBS_Light' is unsigned&amp;quot; messages&lt;br /&gt;
 echo &amp;quot;gpgcheck=0&amp;quot; &amp;gt;&amp;gt; /etc/zypp/repos.d/OBS_Light.repo&lt;br /&gt;
 zypper --gpg-auto-import-keys ref&lt;br /&gt;
 zypper in obslight&lt;br /&gt;
To install the GUI, you will need PySide:&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/home:/cgoncalves:/pyside:/shiboken/openSUSE_11.4/ pyside&lt;br /&gt;
 zypper --gpg-auto-import-keys ref&lt;br /&gt;
 zypper in obslight-gui&lt;br /&gt;
&lt;br /&gt;
=== For OpenSUSE 12.1 ===&lt;br /&gt;
There are 2 packages:&lt;br /&gt;
* ''obslight'', which contains the API, a commandline client, and [[obstag | obstag, obs2obscopy and obsextractgroups]]&lt;br /&gt;
* ''obslight-gui'', which contains the graphical user interface&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/OBS_Light:/openSUSE:/12.1/openSUSE_12.1/Project:OBS_Light:openSUSE:12.1.repo OBS_Light&lt;br /&gt;
optional, to disable GPG checks and prevent &amp;quot;File 'repomd.xml' from repository 'OBS_Light' is unsigned&amp;quot; messages&lt;br /&gt;
 echo &amp;quot;gpgcheck=0&amp;quot; &amp;gt;&amp;gt; &amp;quot;/etc/zypp/repos.d/OBS_Light.repo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To install the GUI, you will need PySide:&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/home:/Fisiu:/pyside/openSUSE_12.1/home:Fisiu:pyside.repo Pyside&lt;br /&gt;
 zypper --gpg-auto-import-keys ref&lt;br /&gt;
&lt;br /&gt;
 zypper in obslight obslight-gui&lt;br /&gt;
&lt;br /&gt;
=== For Ubuntu ===&lt;br /&gt;
The repositories are [http://repo.pub.meego.com/Project:/OBS_Light/ here]. Available Ubuntu versions are '''10.04''', '''11.04''' and '''11.10'''.&lt;br /&gt;
There is only one package, ''obslight'', which contains the commandline, the GUI and the utilities. Add the following line to your '''/etc/apt/sources.list''' file (or to a new file '''/etc/apt/sources.list.d/obslight.list'''), replacing '''&amp;lt;version&amp;gt;''' by the appropriate version:&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/OBS_Light/Ubuntu_&amp;lt;version&amp;gt;/ ./&lt;br /&gt;
You also need a recent version of [http://www.pyside.org/ PySide]:&lt;br /&gt;
 sudo apt-add-repository ppa:pyside/ppa&lt;br /&gt;
If you have Ubuntu 10.04 and an old version of '''osc''' (&amp;lt; 0.132) we suggest also adding:&lt;br /&gt;
 deb http://download.opensuse.org/repositories/openSUSE:/Tools/xUbuntu_10.04/ ./&lt;br /&gt;
Refresh the APT database and install OBS Light:&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install obslight&lt;br /&gt;
Add yourself to the '''users''' group:&lt;br /&gt;
 sudo usermod -a -G users `whoami`&lt;br /&gt;
You should log out so that the system takes into account your new group.&lt;br /&gt;
If you don't want to log out, you can use &amp;quot;''newgrp users''&amp;quot; before running obslight (but it will only work in the current console).&lt;br /&gt;
&lt;br /&gt;
=== For Debian ===&lt;br /&gt;
[''Not tested'']&lt;br /&gt;
The repository is [http://repo.pub.meego.com/home:/ronan:/OBS_Light/Debian_6.0/ here].&lt;br /&gt;
&lt;br /&gt;
''Note'': the '''obslight''' package has a dependency to [http://www.pyside.org/ PySide], which is not included in Debian &amp;quot;stable&amp;quot;. So you will need Debian &amp;quot;testing&amp;quot; if you want to test.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To get a brief overview of all available commands, just type:&lt;br /&gt;
 obslight --help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OBS Tagging and Project copying ==&lt;br /&gt;
One of the problem that any user of a private OBS will quickly face, is the need to tag specific version of a project and allow the copy of the project from an OBS to an other OBS or from one project to an other project.&lt;br /&gt;
&lt;br /&gt;
More details on obstag and obs2obscopy can be found [[obstag | here]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS Light | OBS Light main page]]&lt;br /&gt;
* [[OBS_Light_FAQ | OBS Light Frequently Asked Questions]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light Manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_Installation</id>
		<title>OBS Light Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_Installation"/>
				<updated>2012-03-20T11:17:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* For OpenSUSE 12.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OBS Light Deliverable =&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[OBS Light]] project deliverable which are available are listed on this page. Publication of the information will follow the progress of the implementation (yes, we do publish early draft versions, using them is at your risk)&lt;br /&gt;
&lt;br /&gt;
== Packaged versions ==&lt;br /&gt;
Packaged versions of the OBS Light client (still in development) are available for OpenSUSE, MeeGo, Debian and Ubuntu.&lt;br /&gt;
=== For OpenSUSE 11.4 ===&lt;br /&gt;
The repository is [http://repo.pub.meego.com/Project:/OBS_Light/openSUSE_11.4/ here].&lt;br /&gt;
There are 2 packages:&lt;br /&gt;
* ''obslight'', which contains the API, a commandline client, and [[obstag | obstag, obs2obscopy and obsextractgroups]]&lt;br /&gt;
* ''obslight-gui'', which contains the graphical user interface&lt;br /&gt;
To install ''obslight'':&lt;br /&gt;
 zypper ar -f http://repo.pub.meego.com/Project:/OBS_Light/openSUSE_11.4/ OBS_Light&lt;br /&gt;
optional, to disable GPG checks and prevent &amp;quot;File 'repomd.xml' from repository 'OBS_Light' is unsigned&amp;quot; messages&lt;br /&gt;
 echo &amp;quot;gpgcheck=0&amp;quot; &amp;gt;&amp;gt; /etc/zypp/repos.d/OBS_Light.repo&lt;br /&gt;
 zypper --gpg-auto-import-keys ref&lt;br /&gt;
 zypper in obslight&lt;br /&gt;
To install the GUI, you will need PySide:&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/home:/cgoncalves:/pyside:/shiboken/openSUSE_11.4/ pyside&lt;br /&gt;
 zypper --gpg-auto-import-keys ref&lt;br /&gt;
 zypper in obslight-gui&lt;br /&gt;
&lt;br /&gt;
=== For OpenSUSE 12.1 ===&lt;br /&gt;
There are 2 packages:&lt;br /&gt;
* ''obslight'', which contains the API, a commandline client, and [[obstag | obstag, obs2obscopy and obsextractgroups]]&lt;br /&gt;
* ''obslight-gui'', which contains the graphical user interface&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/OBS_Light:/openSUSE:/12.1/openSUSE_12.1/Project:OBS_Light:openSUSE:12.1.repo Project_OBS_Light&lt;br /&gt;
optional, to disable GPG checks and prevent &amp;quot;File 'repomd.xml' from repository 'OBS_Light' is unsigned&amp;quot; messages&lt;br /&gt;
 echo &amp;quot;gpgcheck=0&amp;quot; &amp;gt;&amp;gt; /etc/zypp/repos.d/Project_OBS_Light.repo&lt;br /&gt;
&lt;br /&gt;
To install the GUI, you will need PySide:&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/home:/Fisiu:/pyside/openSUSE_12.1/home:Fisiu:pyside.repo pyside&lt;br /&gt;
 zypper --gpg-auto-import-keys ref&lt;br /&gt;
&lt;br /&gt;
 zypper in obslight obslight-gui&lt;br /&gt;
&lt;br /&gt;
=== For Ubuntu ===&lt;br /&gt;
The repositories are [http://repo.pub.meego.com/Project:/OBS_Light/ here]. Available Ubuntu versions are '''10.04''', '''11.04''' and '''11.10'''.&lt;br /&gt;
There is only one package, ''obslight'', which contains the commandline, the GUI and the utilities. Add the following line to your '''/etc/apt/sources.list''' file (or to a new file '''/etc/apt/sources.list.d/obslight.list'''), replacing '''&amp;lt;version&amp;gt;''' by the appropriate version:&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/OBS_Light/Ubuntu_&amp;lt;version&amp;gt;/ ./&lt;br /&gt;
You also need a recent version of [http://www.pyside.org/ PySide]:&lt;br /&gt;
 sudo apt-add-repository ppa:pyside/ppa&lt;br /&gt;
If you have Ubuntu 10.04 and an old version of '''osc''' (&amp;lt; 0.132) we suggest also adding:&lt;br /&gt;
 deb http://download.opensuse.org/repositories/openSUSE:/Tools/xUbuntu_10.04/ ./&lt;br /&gt;
Refresh the APT database and install OBS Light:&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install obslight&lt;br /&gt;
Add yourself to the '''users''' group:&lt;br /&gt;
 sudo usermod -a -G users `whoami`&lt;br /&gt;
You should log out so that the system takes into account your new group.&lt;br /&gt;
If you don't want to log out, you can use &amp;quot;''newgrp users''&amp;quot; before running obslight (but it will only work in the current console).&lt;br /&gt;
&lt;br /&gt;
=== For Debian ===&lt;br /&gt;
[''Not tested'']&lt;br /&gt;
The repository is [http://repo.pub.meego.com/home:/ronan:/OBS_Light/Debian_6.0/ here].&lt;br /&gt;
&lt;br /&gt;
''Note'': the '''obslight''' package has a dependency to [http://www.pyside.org/ PySide], which is not included in Debian &amp;quot;stable&amp;quot;. So you will need Debian &amp;quot;testing&amp;quot; if you want to test.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
To get a brief overview of all available commands, just type:&lt;br /&gt;
 obslight --help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OBS Tagging and Project copying ==&lt;br /&gt;
One of the problem that any user of a private OBS will quickly face, is the need to tag specific version of a project and allow the copy of the project from an OBS to an other OBS or from one project to an other project.&lt;br /&gt;
&lt;br /&gt;
More details on obstag and obs2obscopy can be found [[obstag | here]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS Light | OBS Light main page]]&lt;br /&gt;
* [[OBS_Light_FAQ | OBS Light Frequently Asked Questions]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light Manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-03-19T08:49:32Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* What is OBS Light ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image. The name was chosen to express that it remains an OBS base development process, but which is lighter to use, the idea of seeing the project as  a light to guide the user in the flow of tools such as OBS, OSC, MIC, ... only came later. Once you will also see it incorrectly spell as 'OBS Lite'.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= How to test or use OBS Light? =&lt;br /&gt;
You can find a OBS Light appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susestudio.com/a/e0uuBG/meego-obs-light&lt;br /&gt;
&lt;br /&gt;
* uptodate Build for various distros can be found in the [[ObsLightDeliverable]] page.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-03-02T18:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* What difference between OBS and OBS Light? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= How to test or use OBS Light? =&lt;br /&gt;
You can find a OBS Light appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susestudio.com/a/e0uuBG/meego-obs-light&lt;br /&gt;
&lt;br /&gt;
* uptodate Build for various distros can be found in the [[ObsLightDeliverable]] page.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation have differed from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-03-02T18:26:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How to test or use OBS Light? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= How to test or use OBS Light? =&lt;br /&gt;
You can find a OBS Light appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susestudio.com/a/e0uuBG/meego-obs-light&lt;br /&gt;
&lt;br /&gt;
* uptodate Build for various distros can be found in the [[ObsLightDeliverable]] page.&lt;br /&gt;
&lt;br /&gt;
* Videos training and intro [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation are likely differ from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light</id>
		<title>OBS Light</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light"/>
				<updated>2012-03-02T18:24:51Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Why not use OBS Light ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OBSLightWiki.png‎ ]]&lt;br /&gt;
[http://blynt.canalblog.com/ Blynt]&lt;br /&gt;
&lt;br /&gt;
= Why should I use OBS Light ?=&lt;br /&gt;
* I want to create a [https://meego.com/ MeeGo-based] distribution for my target ([https://meego.com/devices/smart-tv Smart TV], [https://meego.com/devices/in-vehicle In-Vehicle], [https://meego.com/devices/media-phone Media phone], [https://meego.com/devices/netbook Netbook], [https://meego.com/devices/handset Handset] ...).&lt;br /&gt;
* I want to include private code into my [https://meego.com/ MeeGo-based] distribution.&lt;br /&gt;
* I want to be fast from the beginning of my project to the first boot of my target.&lt;br /&gt;
* I want to use the same tools throughout my development cycle.&lt;br /&gt;
&lt;br /&gt;
= Why not use OBS Light ?=&lt;br /&gt;
OBS Light is targeting the development of variants of MeeGo distribution (or any OBS build distro) to either add extra features to a MeeGo product or adapt a MeeGo distribution to different hardware configurations.&lt;br /&gt;
It is not an another SDK, if you want to develop applications for a MeeGo product you should have a look at the [https://meego.com/developers MeeGo SDK] which likely will better fit your need.&lt;br /&gt;
&lt;br /&gt;
= What is OBS Light ?=&lt;br /&gt;
The project 'OBS Light' (or also obslight) , creates an encapsulation of OBS which presents a lighter face of OBS that we have called OBS light which could be delivered (if desired) with a pre-packaged MeeGo TV stack (or any other MeeGo vertical) released on a DVD image.&lt;br /&gt;
&lt;br /&gt;
If you have (or are thinking about) selecting MeeGo but you cannot put all the code you want to build on OBS, the public, cloud-based MeeGo building tool, or if you are more comfortable with the tradition of local build tools based on a chroot than with a full cloud-based system like OBS, you might find the learning curve a bit steep.&lt;br /&gt;
&lt;br /&gt;
While OBS will provide you with a very powerful and adapted tool for your long-term needs, the entry cost can be perceived to be too high.&lt;br /&gt;
This issue is particularly strongly perceived in the TV or IVI segments where recompilation of the Linux kernel and adding drivers is required even during the very early phases of a project and compiling in the public domain is out of the question.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a second phase we hope to add a simple UI to it. It reuses the osc command line tools delivered with OBS to which a set of extra plugins have been added, including an extension of mic. All this remains compatible with a full implementation of OBS. It will be published under License: GPLv2.&lt;br /&gt;
&lt;br /&gt;
The osc plugin for automatic patch creation are designed to be reusable in a full OBS environment.&lt;br /&gt;
&lt;br /&gt;
The coding is under work and changes are likely to occur during the development process.&lt;br /&gt;
&lt;br /&gt;
Note that under the hood, OBS light still is 100% OBS code and the building process is the same as what you could achieve by running your own private OBS.&lt;br /&gt;
OBS Light mainly pre-configures an OBS with a few osc plugins to ease the learning curve.&lt;br /&gt;
 &lt;br /&gt;
Note that some OBS feature are hidden to simplify the learning phase. As the service is run locally, you can mix Open Source and private code should you need to do so.&lt;br /&gt;
&lt;br /&gt;
= How to test or use OBS Light? =&lt;br /&gt;
You can find a OBS Light appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susestudio.com/a/e0uuBG/meego-obs-light&lt;br /&gt;
&lt;br /&gt;
* Current progress an deliveries can be found in [[ObsLightDeliverable]] page.&lt;br /&gt;
&lt;br /&gt;
* Videos [http://www.dailymotion.com/playlist/x1t5ll_dominigarfoll_obs-light-training Starting with OBS Light]&lt;br /&gt;
&lt;br /&gt;
= Where is the information about OBS Light? =&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [[OBS_Light_FAQ | Frequently Asked Questions]]&lt;br /&gt;
* You can file bugs on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla]. The bug list for the project can be reached [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;amp;component=OBS%20Light here]. To easily file a new bug, use [https://bugs.meego.com/enter_bug.cgi?product=Development%20Tools this link]&lt;br /&gt;
 &lt;br /&gt;
All discussions are run on the MeeGo-distribution-tools mailing list.&lt;br /&gt;
http://lists.meego.com/listinfo/meego-distribution-tools&lt;br /&gt;
&lt;br /&gt;
= Where can I find a private OBS appliance? =&lt;br /&gt;
You can find a OBS appliance, build in [http://susestudio.com suse studio]:&lt;br /&gt;
 http://susegallery.com/a/e0uuBG/meego-obs&lt;br /&gt;
&lt;br /&gt;
For more information about private OBS: http://en.opensuse.org/openSUSE:Build_Service_private_instance&lt;br /&gt;
 &lt;br /&gt;
You can Download the boot strap of Meego 1.2.0 here (saveOBS.tar.aa   -&amp;gt; saveOBS.tar.ba).&lt;br /&gt;
 http://www.cc-e.co.uk/Meego/MeeGo-1.2.0/&lt;br /&gt;
reassembled the file&lt;br /&gt;
 cat saveOBS.tar.??  &amp;gt;&amp;gt; saveOBS.tar.gz &lt;br /&gt;
Thanks to Julien Snell and Cocom for the ftp server.&lt;br /&gt;
http://www.cc-e.co.uk&lt;br /&gt;
&lt;br /&gt;
= What difference between OBS and OBS Light? =&lt;br /&gt;
OBS Light use an OBS server.&lt;br /&gt;
{|&lt;br /&gt;
|      ||   '''OBS Light'''   ||   '''Full OBS'''&lt;br /&gt;
|-&lt;br /&gt;
|   Cross compilation    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Local and remote reference    ||   Yes     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Automatic creation of patch    ||   Yes     ||   Not Yet (will if the same osc plugin is loaded)&lt;br /&gt;
|-&lt;br /&gt;
|   Bootable Image creation    ||   Yes     ||   Add on&lt;br /&gt;
|-&lt;br /&gt;
|   Integrated version control    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-user    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Multi-target by project    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Auto built    ||   Hidden     ||   Yes&lt;br /&gt;
|-&lt;br /&gt;
|   Signing service   ||   Hidden     ||   Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initial Specifications (final implementation are likely differ from the initial concept) :[[https://meego.gitorious.org/meego-developer-tools/obs-light/blobs/master/Doc/SpecOBSLight-1_V-0-6.pdf SpecOBSLight-1_V-0-6]]&lt;br /&gt;
&lt;br /&gt;
= Where is the OBS Light code? =&lt;br /&gt;
GIT: https://meego.gitorious.org/meego-developer-tools/obs-light&lt;br /&gt;
&lt;br /&gt;
OBS: https://build.pub.meego.com/project/show?project=Project%3AOBS_Light&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-17T13:15:17Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How do I run OBS light server appliance on my Desktop ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
While running an OBS Light appliance is simple and easy and just requires 1GB of RAM allocated to the virtual machine, running an OBS server appliance can be much more demanding but running the OBS server server appliance on your desktop or laptop (a minimum 4GB of RAM is mandatory) via a virtual machine can be very handy during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare. You need to patch on the OBS server appliance ''(need to be root)'' the file '''/etc/sysconfig/obs-worker''' to set the variable OBS_WORKER_INSTANCES to 1 (default is zero) to limit the RAM resources requires by your appliance during build process.&lt;br /&gt;
If you plan to build large packages such as Chromium you will need more than 2GB of RAM allocated (actually on my desktop I have 16GB). &amp;lt;br&amp;gt;&lt;br /&gt;
You can overcome that limit with the addition of an obsworker appliance on a separate server. OBS Light project provides one pre-configured to work with and OBS Light server appliance. &amp;lt;br&amp;gt;&lt;br /&gt;
If you use the Bridge mode, external OBS work appliance will be detected and used automatically (NAT more would require a complex configuration). The Worker can be running on a more powerfull unit and speed the preparation work before for example leaving the office with a complete fully built project on a laptop.&lt;br /&gt;
You can stop the worker on the laptop by the command '''rcobsworker stop''' ''(need to be root)''. You can check that your OBS Worker appliance can see your OBS Light Server Appliance with the command '''slptool findsrvs obs.source_server'''&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-17T13:13:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How do I run OBS light server appliance on my Desktop ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
While running an OBS Light appliance is simple and easy and just requires 1GB of RAM allocated to the virtual machine, running an OBS server appliance can be much more demanding but running the OBS server server appliance on your desktop or laptop (a minimum 4GB of RAM is mandatory) via a virtual machine can be very handy during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare. You need to patch on the OBS server appliance ''(need to be root)'' the file '''/etc/sysconfig/obs-worker''' to set the variable OBS_WORKER_INSTANCES to 1 (default is zero) to limit the RAM resources requires by your appliance during build process.&lt;br /&gt;
If you plan to build large packages such as Chromium you will need more than 2GB of RAM allocated (actually on my desktop I have 16GB). &amp;lt;br&amp;gt;&lt;br /&gt;
You can overcome that limit with the addition of an obsworker appliance on a separate server. OBS Light project provides one pre-configured to work with and OBS Light server appliance. &amp;lt;br&amp;gt;&lt;br /&gt;
If you are not in NAT, external OBS work appliance will be detected and used automatically (NAT more would require a complex configuration). The Worker can be running on a more powerfull unit and speed the preparation work before for example leaving the office with a complete fully built project on a laptop.&lt;br /&gt;
You can stop the worker on the laptop by the command '''rcobsworker stop''' ''(need to be root)''. You can check that your OBS Worker appliance can see your OBS Light Server Appliance with the command '''slptool findsrvs obs.source_server'''&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-17T11:47:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How do I run OBS light server appliance on my Desktop ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
While running an OBS Light appliance is simple and easy and just requires 1GB of RAM allocated to the virtual machine, running an OBS server appliance can be much more demanding but running the OBS server server appliance on your desktop or laptop (a minimum 4GB of RAM is mandatory) via a virtual machine can be very handy during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare. You need to patch on the OBS server appliance ''(need to be root)'' the file '''/etc/sysconfig/obs-worker''' to set the variable OBS_WORKER_INSTANCES to 1 (default is zero) to limit the RAM resources requires by your appliance during build process.&lt;br /&gt;
If you plan to build large packages such as Chromium you will need more than 2GB of RAM allocated (actually on my desktop I have 16GB). &amp;lt;br&amp;gt;&lt;br /&gt;
You can overcome that limit with the addition of an obsworker appliance on a separate server. OBS Light project provides one pre-configured to work with and OBS Light server appliance. &amp;lt;br&amp;gt;&lt;br /&gt;
If you are not in NAT, external OBS work appliance will be detected and used automatically (NAT more would require a complex configuration). The Worker can be running on a more powerfull unit and speed the preparation work before for example leaving the office with a complete fully built project on a laptop.&lt;br /&gt;
You can stop the worker on the laptop by the command '''rcobsworker stop''' ''(need to be root)''. You can check that your OBS Worker appliance can see your OBS Kight Server Appliance with the command '''slptool findsrvs obs.source_server'''&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-17T11:15:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How do I run OBS light server appliance on my Desktop ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
While running an OBS Light appliance is simple and easy and just requires 1GB of RAM allocated to the virtual machine, running an OBS server appliance can be much more demanding but running the OBS server server appliance on your desktop or laptop (a minimum 4GB of RAM is mandatory) via a virtual machine can be very handy during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare. You need to patch on the OBS server appliance ''(need to be root)'' the file '''/etc/sysconfig/obs-worker''' to set the variable OBS_WORKER_INSTANCES to 1 (default is zero) to limit the RAM resources requires by your appliance during build process.&lt;br /&gt;
If you plan to build large packages such as Chromium you will need more than 2GB of RAM allocated (actually on my desktop I have 16GB). &amp;lt;br&amp;gt;&lt;br /&gt;
You can overcome that limit with the addition of an obsworker appliance on a separate server. OBS Light project provides one pre-configured to work with and OBS Light server appliance. &amp;lt;br&amp;gt;&lt;br /&gt;
If you are not in NAT, external OBS work appliance will be detected and used automatically (NAT more would require a complex configuration). The Worker can be running on a more powerfull unit and speed the preparation work before for example leaving the office with a complete fully built project on a laptop.&lt;br /&gt;
You can stop the worker on the laptop by the command '''rcobsworker stop''' ''(need to be root)''&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-17T10:52:48Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How do I run OBS light server appliance on my Desktop ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
While running an OBS Light appliance is simple and easy and just requires 1GB of RAM allocated to the virtual machine, running an OBS server appliance can be much more demanding but running the OBS server server appliance on your desktop or laptop (a minimum 4GB of RAM is mandatory) via a virtual machine can be very handy during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare. You need to patch on the OBS server appliance ''(need to be root)'' the file '''/etc/sysconfig/obs-worker''' to set the variable OBS_WORKER_INSTANCES to 1 (default is zero) to limit the RAM resources requires by your appliance during build process.&lt;br /&gt;
If you plan to build large packages such as Chromium you will need more than 2GB of RAM allocated (actually I succeed with 3GB but the more is the best, on my desktop I use 16GB). &amp;lt;br&amp;gt;&lt;br /&gt;
You can overcome that limit with the addition of an obsworker appliance on a separate server. OBS Light project provides one pre-configured to work with and OBS Light server appliance. &amp;lt;br&amp;gt;&lt;br /&gt;
If you are not in NAT, external OBS work appliance will be detected and used automatically (NAT more would require a complex configuration). The Worker can be running on a more powerfull unit and speed the preparation work before for example leaving the office with a complete fully built project on a laptop.&lt;br /&gt;
You can stop the worker on the laptop by the command '''rcobsworker stop''' ''(need to be root)''&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-10T17:24:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* How do I run OBS light server appliance on my Desktop ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
Running the OBS server server appliance on your desktop or laptop via a virtual machine is a common practice during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing but you need to allocate at least 2GB to the appliance and as many CPU cores that you can spare.&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable. Note ''this is '''not''' the default option of VirtualBox''.&amp;lt;br&amp;gt;&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN or for unconnected demos. In that case you will need to declare NAT rules in your Vitual Machine Manager redirecting the ports 80, 81 and 82 from your local host to your OBS appliance internal NAT address ''(with VitualBox under Linux rerouting port bellow 1000 is reserved for root only)''.&amp;lt;br&amp;gt;&lt;br /&gt;
Do not forget to add a host name &amp;quot;obslightserver&amp;quot; in your workstation pointing to the OBS Light server appliance IP address or localhost in the case of a NAT configuration.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/OBS_Light_FAQ</id>
		<title>OBS Light FAQ</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/OBS_Light_FAQ"/>
				<updated>2012-02-10T17:15:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* Frequently Asked Questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
== Where does ''obslight'' store its data? ==&lt;br /&gt;
All data is stored in '''~/OBSLight''' and subdirectories.&lt;br /&gt;
&lt;br /&gt;
== Is there a configuration file ? ==&lt;br /&gt;
Configuration file is '''~/OBSLight/obslightConfig'''.&lt;br /&gt;
&lt;br /&gt;
== How do I run OBS light server appliance on my Desktop ? ==&lt;br /&gt;
Running the OBS server server appliance on your desktop or laptop via a virtual machine is a common practice during evaluation tests.&amp;lt;br&amp;gt;&lt;br /&gt;
The main advantage is that you do not need a special authorisation from your IT department to start playing.&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule using the bridge mode is advisable.''' This option must be selected at the creation time''' of your appliance &amp;lt;br&amp;gt;''Note this is '''not''' the default option of VirtualBox''.&amp;lt;br&amp;gt;&lt;br /&gt;
The decision to use the bridge or NAT mode must be done before running the appliance for the first time.&amp;lt;br&amp;gt;&lt;br /&gt;
The NAT mode is interesting to run an OBS Light server via a VPN. In that case you need to declare NAT rules to redirect your port 80, 81 and 82 from your local host to your appliance ''(under Linux rerouting port bellow 1000 is reserved for root only)''.&lt;br /&gt;
&lt;br /&gt;
== How to show the log ? ==&lt;br /&gt;
* From the menu: ''Window'' -&amp;gt; ''Show log''&lt;br /&gt;
* When a long operation is running: right click on progress bar and click ''Show log''.&lt;br /&gt;
&lt;br /&gt;
== Why does MeeGo's '''kernel''' package fail to build for ARM? ==&lt;br /&gt;
The '''kernel''' package has flags to prevent builds on ARM.&lt;br /&gt;
To compile an ARM kernel, you must use another package, for example the '''kernel-adaptation-n900''' package.&lt;br /&gt;
&lt;br /&gt;
== How install the dependency of a package into the chroot? ==&lt;br /&gt;
If the project on your OBS doesn’t provide some dependencies and you must add a repository to your chroot's zypper configuration, you have two choices:&lt;br /&gt;
* First one, use an URL and an alias:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --url http://download.meego.com/live/MeeGo:/1.2:/non-oss/MeeGo_1.2/ --alias &amp;quot;MeeGo_non-oss&amp;quot;&lt;br /&gt;
* Second one, add the repository of another local project:&lt;br /&gt;
 obslight addRepoInChRoot --projectLocalName MeeGo_1.2_oss --fromProject $ProjectName&lt;br /&gt;
&lt;br /&gt;
== Where to send bug reports ? ==&lt;br /&gt;
Bugs are centralized on [https://bugs.meego.com/buglist.cgi?product=Development%20Tools&amp;amp;component=OBS%20Light MeeGo's bugzilla].&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[OBS_Light | OBS Light main page]]&lt;br /&gt;
* [[ObsLightDeliverable | OBS Light deliverables]]&lt;br /&gt;
* [[OBS_Light_Manual | OBS Light manual]]&lt;br /&gt;
* [https://meego.gitorious.org/meego-developer-tools/obs-light/ OBS Light project on Gitorious]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=Project%3AOBS_Light OBS Light project on MeeGo build service]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Transparency_Management</id>
		<title>TV Browser Transparency Management</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Transparency_Management"/>
				<updated>2012-01-27T13:50:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: Created page with &amp;quot;= Translucency Solution for Intel® CE Media Processor Based Flash Plug-in on MeeGo = This page describe how the  MeeGo TV Browser accelerate video by using the G...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Translucency Solution for Intel® CE Media Processor Based Flash Plug-in on MeeGo =&lt;br /&gt;
This page describe how the [[TV Browser | MeeGo TV Browser]] accelerate video by using the GDL planes.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' This implementation is specific to Intel CE4xxx HW. Other HW architecture will need modification of the code.&lt;br /&gt;
&lt;br /&gt;
== 1. INTRODUCTION ==&lt;br /&gt;
&lt;br /&gt;
The Intel® Atom™ processors CE4xxx have four Universal Pixel Planes (UPP) for graphics and video rendering. The hardware cursor uses the UPP_D, the X window system uses the UPP_C, and the hardware accelerated video is rendered on UPP_B or UPP_A in a typical environment.&lt;br /&gt;
&lt;br /&gt;
For hardware accelerated video playback, specific plug-ins such as the Adobe Flash® Player plug-in (hereafter referred to as “Flash plug-in”) or a commercial Blue-ray stack need to render the graphics overlay on the X window system and render the videos on the underlying planes. This requires that the alpha values of the graphics overlay be applied to the plane level to see through the X window system and display the videos.&lt;br /&gt;
&lt;br /&gt;
'''Note :''' The Flash plug-in is not available as open source and requires specific license from Adobe®.&lt;br /&gt;
&lt;br /&gt;
== 2. BROWSER REQUIREMENT ==&lt;br /&gt;
&lt;br /&gt;
In MeeGo TV, mutter is the compositing window manager and provides the capability to manage the plane level alpha values. X client applications may send commands to mutter through window manager hints to make a window translucent or transparent. The commands will need to provide the XID of the window and specify a rectangle that needs to be translucent or transparent. Since all sub-windows share the same off-screen pixel buffer with the top level window, mutter only handles the XIDs that belong to a top level window.&lt;br /&gt;
&lt;br /&gt;
The first thing browser needs to do is setting mutter hints to the top level window of the browser (the first level window) and apply mutter hints to it. The hint string is “meego-tv-cutout-x=0:meego-tv-cutout-y=0:meego-tv-cutout-width=0:meego-tv-cutout-height=0:meego-tv-half-trans=1:meego-tv-full-window=1”, which means the whole browser window can be translucent and the opacity is defined by alpha values (areas outside the Flash plug-in has alpha value 255, so won’t be seen through).&lt;br /&gt;
&lt;br /&gt;
According to the Flash plug-in usage scenario, the Flash plug-in will use a 32 bpp surface and the pixel values including the alpha channel need to be applied to the top level window. In this way, mutter will be able to apply the 32 bpp window‘s alpha values to the hardware plane.&lt;br /&gt;
&lt;br /&gt;
In windowed mode, the Flash plug-in owns its own sub-window. To apply alpha values to the top level window’s pixel buffer, all its ancestor windows need to be 32 bpp. In the Chromium browser, the window chain includes 5 layers. And in the Flash plug-in there can be several levels according to the Flash plug-in implementation.&lt;br /&gt;
&lt;br /&gt;
A list of the window hierarchy in the chromium browser is shown in the following table.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|'''Level'''|| '''Window'''|| '''Function'''|| '''Creation'''||&lt;br /&gt;
|+&lt;br /&gt;
|1|| Browser Window|| This is the top most window|| chrome/browser/ui/gtk/browser_window_gtk.cc||&lt;br /&gt;
|+&lt;br /&gt;
|2|| Tab Window|| Each tab will create a tab window|| chrome/browser/renderer_host/render_widget_host_view_gtk.cc||&lt;br /&gt;
|+&lt;br /&gt;
|3|| Plugin Container|| Created for container manager use.|| webkit/plugins/npapi/gtk_plugin_container_manager.cc||&lt;br /&gt;
|+&lt;br /&gt;
|4|| !GtkPlug|| The top level window of plugin process and the !GtkPlug mechanism for embedding into other process ||webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc||&lt;br /&gt;
|+&lt;br /&gt;
|5|| !GtkSocket|| The !GtkSocket ID will be passed to plugin process|| webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc||&lt;br /&gt;
|}&lt;br /&gt;
The key modification is to change the window that is 24 bpp to 32 bpp. This can be done by getting the rgba colormap from the screen and setting the colormap to the corresponding GtkWidget.&lt;br /&gt;
If a customer wants to apply this change to the WebKit browser, similar changes need to be made in WebKit and the WebView container.&lt;br /&gt;
&lt;br /&gt;
In windowless mode, the browser provides a pixmap to the flash plugin as a canvas to draw on. If the “wmode” property is set to “opaque”, the pixmap is filled with an opaque color “0xFF000000”. If the “wmode” property is set to “transparent”, the pixmap is filled with the background image which is composed of HTML elements in the underlying layers. To enable multi-plane transparency, the browser should meet three preconditions.&lt;br /&gt;
&lt;br /&gt;
# Provide a 32 bpp pixmap to the flash plugin. It is created at webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc. The information of visual and depth should be told to the flash plugin.&lt;br /&gt;
&lt;br /&gt;
# Fill the pixmap appropriately before sending to the flash plugin. In “transparent” mode, the pixmap created by browser should be filled with the backgournd image whose alpha values are 0xFF. In “opaque” mode, the pixmap should be filled with color “0xFF000000”. The fill operation should be a Source Blit operation.&lt;br /&gt;
&lt;br /&gt;
# Keep the alpha channel in the pixmap returned by the flash plugin and render it to top level window. The pixmap should be source blitted to share memory in chromium browser. And when the data in share memory is rendered to backing store and X window, the visual format should always have the depth of 32 and class of TrueColor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 3. PLUGIN REQUIREMENT ==&lt;br /&gt;
&lt;br /&gt;
The plug-in need to differentiate whether the usage scenario is hardware accelerated video. If not, everything should be rendered to the plugin window with alpha values 255 (Fully opaque). Otherwise, it needs to apply mutter translucency to render translucent graphics overlay on X window system.&lt;br /&gt;
&lt;br /&gt;
A list of window hierarchy in plugin.&lt;br /&gt;
{|&lt;br /&gt;
|Level|| Window|| Function|| Creation||&lt;br /&gt;
|+&lt;br /&gt;
|6|| !GtkPlug|| The fifth layer !GtkSocket is the window ID plugin will get. Plugin will first create a !GtkPlug widget as child of !GtkSocket and as the container for other widgets ||Plugin SetWindow Function||&lt;br /&gt;
|+&lt;br /&gt;
|7|| Canvas Widget|| Plugin draw everything in this widget|| In the Plugin||&lt;br /&gt;
|}&lt;br /&gt;
To apply the alpha channel of the 32bpp pixbuf to UPP_C, you have to draw the 32bpp pixel buffer to the 7th level window. This could be done by cairo graphics engine. We tried to use the gtk functions gdk_pixbuf_render_to_drawable, but the alpha channel does not apply to the 7th window level, but to the background of the widget, so do not use it.&lt;br /&gt;
&lt;br /&gt;
For windowless mode, the plugin needs to draw the 32 bpp pixel buffer to the pixmap provided by a browser. And the draw operation should be a source blit instead of blending.&lt;br /&gt;
&lt;br /&gt;
Please notice that any top level window created by the flash plugin does not have the mutter hints set already, and the flash plugin is responsible to set hints by itself if this window needs to apply multi-plane transparency. A good example of this scenario is the full screen playback.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. BUILD INSTRUCTION ==&lt;br /&gt;
1. Browser:&lt;br /&gt;
# mic-chroot to meego image file system:&lt;br /&gt;
# Install tool chain: such as make, gcc, libtool, rpm-build, etc.&lt;br /&gt;
# zypper si chromium # This will install build dependencies and source code at ~/rpmbuild&lt;br /&gt;
# cp the patch to ~/rpmbuild/SOURCE&lt;br /&gt;
# cd ~/rpmbuild/SPEC, edit the spec file to add the patch into build&lt;br /&gt;
# rpmbuild -ba chromium.spec&lt;br /&gt;
# find the rpm at ~/rpmbuild/RPMS&lt;br /&gt;
&lt;br /&gt;
2. DiamondX Sample Plugin&lt;br /&gt;
* ./configure&lt;br /&gt;
* make&lt;br /&gt;
* make install-plugin&lt;br /&gt;
&lt;br /&gt;
3. Test:&lt;br /&gt;
* play a video at UPP_B using gst-launch or cl_app&lt;br /&gt;
* chromium-browser play an HD H.264 video from any flash based web site such as YouTube.&lt;br /&gt;
&lt;br /&gt;
== 5. KNOWN ISSUES ==&lt;br /&gt;
Setting the browser sub-window chain to 32 bpp will cause the software version of the Flash plug-in from Adobe’s official website to fail. A simple solution is to use an environment variable to indicate to the browser which version of the Flash plug-in it’s using and have the browser base its behavior on that information.&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Video_HW_acceleration</id>
		<title>TV Browser Video HW acceleration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Video_HW_acceleration"/>
				<updated>2012-01-27T13:33:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* HTML5 Video Hardware Acceleration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5 Video Hardware Acceleration =&lt;br /&gt;
&lt;br /&gt;
This page describe how the [[TV Browser | MeeGo TV Browser]] accelerate video by using UMMS to replace FFMPEG.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' This implementation is specific to Intel CE4xxx HW. Other HW architecture will need modification of the code.&lt;br /&gt;
&lt;br /&gt;
This concept was presented during the [http://sf2011.meego.com/program/sessions/hardware-accelerated-html5-video-solution-meego-browser MeeGo conference in San Francisco].&lt;br /&gt;
== MeeGo TV Hardware Capability ==&lt;br /&gt;
&lt;br /&gt;
* Video Display Controller Architecture&lt;br /&gt;
[[File:MeeGoTV-vdc.png]]&lt;br /&gt;
&lt;br /&gt;
* 4-5 Universal Pixel Plane for graphics and video rendering&lt;br /&gt;
* Hardware blender supports IAP and ARGB pixel format UPP&lt;br /&gt;
* Two hardware decoders - H.264, VC1, MPEG2. support 2-way 1080p video decoding&lt;br /&gt;
* Hardware Scaler&lt;br /&gt;
* PVR SGX Graphics Core&lt;br /&gt;
&lt;br /&gt;
== Multi-plane Solution ==&lt;br /&gt;
[[File:MeeGoTV-mp-solution.png]]&lt;br /&gt;
&lt;br /&gt;
* Render Process:&lt;br /&gt;
** Replace the FFMPEG based !WebMediaPlayer with UMMS based !UmmsWebMediaPlayer&lt;br /&gt;
** Webkit calculates video destination area and transparent area.&lt;br /&gt;
* Browser Process:&lt;br /&gt;
** DBus bridge in browser to adapt security sandbox&lt;br /&gt;
** Issue plane level transparency commands&lt;br /&gt;
* Unified Multimedia Service&lt;br /&gt;
** The actual playback engine&lt;br /&gt;
** Playback and media control&lt;br /&gt;
** DBus interface&lt;br /&gt;
** Multi-session support&lt;br /&gt;
** Multi media engines(Gstreamer, !OpenMax…)&lt;br /&gt;
* mutter-meego-tv: Handle hints for transparency&lt;br /&gt;
** Facts:&lt;br /&gt;
*** Browser rendered on X window&lt;br /&gt;
*** X rendered on above plane,&lt;br /&gt;
*** Hardware accelerated video is rendered on underneath plane.&lt;br /&gt;
*** X server does not handle alpha channel by default&lt;br /&gt;
*** Alpha channel is used in plane level with Pixel format ARGB&lt;br /&gt;
** Solution: Windows manager handles the alpha channel when compositing&lt;br /&gt;
** Result: See through the right area of X to show video&lt;br /&gt;
&lt;br /&gt;
== Video As Texture ==&lt;br /&gt;
[[File:MeeGoTV-vat-solution.png]]&lt;br /&gt;
* Render &amp;amp; Browser processes co work to redirect playback commands to UMMS&lt;br /&gt;
* UMMS is responsible for hardware accelerated video decoding and color conversion.&lt;br /&gt;
* RGBA data is shared between UMMS and render process&lt;br /&gt;
* Render process renders the texture to the video area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tradeoff ==&lt;br /&gt;
* Multi-plane&lt;br /&gt;
** Pursues maximized performance&lt;br /&gt;
** Depend on wm, currently only mutter is enhanced.&lt;br /&gt;
** Video/browser display memory separated, advanced feature not available&lt;br /&gt;
* Video as Texture&lt;br /&gt;
** Keep the integrity of the browser window’s display memory, which enables a lot of advanced HTML5 features.&lt;br /&gt;
** Involve color conversion and memory copy that can be expensive for HD videos&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Video_HW_acceleration</id>
		<title>TV Browser Video HW acceleration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Video_HW_acceleration"/>
				<updated>2012-01-27T11:25:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* HTML5 Video Hardware Acceleration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5 Video Hardware Acceleration =&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This implementation is specific to Intel CE4xxx HW. Other HW architecture will need modification of the code.&lt;br /&gt;
&lt;br /&gt;
This concept was presented during the [http://sf2011.meego.com/program/sessions/hardware-accelerated-html5-video-solution-meego-browser MeeGo conference in San Francisco].&lt;br /&gt;
== MeeGo TV Hardware Capability ==&lt;br /&gt;
&lt;br /&gt;
* Video Display Controller Architecture&lt;br /&gt;
[[File:MeeGoTV-vdc.png]]&lt;br /&gt;
&lt;br /&gt;
* 4-5 Universal Pixel Plane for graphics and video rendering&lt;br /&gt;
* Hardware blender supports IAP and ARGB pixel format UPP&lt;br /&gt;
* Two hardware decoders - H.264, VC1, MPEG2. support 2-way 1080p video decoding&lt;br /&gt;
* Hardware Scaler&lt;br /&gt;
* PVR SGX Graphics Core&lt;br /&gt;
&lt;br /&gt;
== Multi-plane Solution ==&lt;br /&gt;
[[File:MeeGoTV-mp-solution.png]]&lt;br /&gt;
&lt;br /&gt;
* Render Process:&lt;br /&gt;
** Replace the FFMPEG based !WebMediaPlayer with UMMS based !UmmsWebMediaPlayer&lt;br /&gt;
** Webkit calculates video destination area and transparent area.&lt;br /&gt;
* Browser Process:&lt;br /&gt;
** DBus bridge in browser to adapt security sandbox&lt;br /&gt;
** Issue plane level transparency commands&lt;br /&gt;
* Unified Multimedia Service&lt;br /&gt;
** The actual playback engine&lt;br /&gt;
** Playback and media control&lt;br /&gt;
** DBus interface&lt;br /&gt;
** Multi-session support&lt;br /&gt;
** Multi media engines(Gstreamer, !OpenMax…)&lt;br /&gt;
* mutter-meego-tv: Handle hints for transparency&lt;br /&gt;
** Facts:&lt;br /&gt;
*** Browser rendered on X window&lt;br /&gt;
*** X rendered on above plane,&lt;br /&gt;
*** Hardware accelerated video is rendered on underneath plane.&lt;br /&gt;
*** X server does not handle alpha channel by default&lt;br /&gt;
*** Alpha channel is used in plane level with Pixel format ARGB&lt;br /&gt;
** Solution: Windows manager handles the alpha channel when compositing&lt;br /&gt;
** Result: See through the right area of X to show video&lt;br /&gt;
&lt;br /&gt;
== Video As Texture ==&lt;br /&gt;
[[File:MeeGoTV-vat-solution.png]]&lt;br /&gt;
* Render &amp;amp; Browser processes co work to redirect playback commands to UMMS&lt;br /&gt;
* UMMS is responsible for hardware accelerated video decoding and color conversion.&lt;br /&gt;
* RGBA data is shared between UMMS and render process&lt;br /&gt;
* Render process renders the texture to the video area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tradeoff ==&lt;br /&gt;
* Multi-plane&lt;br /&gt;
** Pursues maximized performance&lt;br /&gt;
** Depend on wm, currently only mutter is enhanced.&lt;br /&gt;
** Video/browser display memory separated, advanced feature not available&lt;br /&gt;
* Video as Texture&lt;br /&gt;
** Keep the integrity of the browser window’s display memory, which enables a lot of advanced HTML5 features.&lt;br /&gt;
** Involve color conversion and memory copy that can be expensive for HD videos&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser</id>
		<title>TV Browser</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser"/>
				<updated>2012-01-27T11:22:46Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* MeeGo TV Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo TV Browser =&lt;br /&gt;
&lt;br /&gt;
  1 Short expression of the need&lt;br /&gt;
--------------------------------&lt;br /&gt;
TV industry and in particular IPTV has used browsers for years to create TV portals. In IPTV specialised companies such as ANT (Cambridge, UK), Opera (Oslo, Norway) or Access (Tokyo, Japan) have created specialised browser for these use cases.&lt;br /&gt;
These specialised browsers were optimized for TV at the detriment of their possibility to surf the open internet.&lt;br /&gt;
As today the requirement to browse the open internet is imposed on TV, there is a need to provide an “open internet” capable browser which can be integrated in a TV and can be used to create TV portals.&lt;br /&gt;
These portals are commonly used to provide the business logic which run locally on the device an is written in AJAX. To enable the control of the TV and Media Centre an API accessible from JavaScript must be added to the Browser.&lt;br /&gt;
&lt;br /&gt;
  2 Purpose/audience&lt;br /&gt;
--------------------&lt;br /&gt;
The purpose of this document is to provide an understanding of the solution which has been developed by the MeeGo TV project. It addresses the developers who will have to deliver a working implementation.&lt;br /&gt;
&lt;br /&gt;
  3 Overview&lt;br /&gt;
-------------&lt;br /&gt;
The internet world has created browser for PC. Assuming not only a mouse and a keyboard, but also a 50 cm viewing with a multi windows presentation layer and a skilled human who drive the beast.&lt;br /&gt;
Unfortunately, a TV has neither a keyboard or a mouse, the vision is done from 3m, there is no windowing concept and the Live TV presentation remains in control of the UI all the time. TV needs is a browser which address some critical issues.&lt;br /&gt;
Controllable by an external application.&lt;br /&gt;
* Instant start&lt;br /&gt;
* Accept alternative input method&lt;br /&gt;
* Support HW accelerated Video&lt;br /&gt;
* Give access to all the TV features from Javascript&lt;br /&gt;
** System configuration&lt;br /&gt;
** Asset browsing&lt;br /&gt;
** Video and Audio&lt;br /&gt;
** PVR and Pause live TV.&lt;br /&gt;
** Video and Audio output &lt;br /&gt;
** Input devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  4 Documentation&lt;br /&gt;
----------------------------&lt;br /&gt;
&lt;br /&gt;
Requirements&lt;br /&gt;
* [[File:Meego TV JavaScriptAPI requirement.pdf | Requirement for a TV Javascript API]]&amp;lt;br&amp;gt;&lt;br /&gt;
* [[File:Meego TV Browser V0.2.odt | Requirement for TV Browser]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User Manual&lt;br /&gt;
* [[TV Browser Javascript D-Bus API design]]&lt;br /&gt;
* [[TV Browser Control API]]&lt;br /&gt;
* [[TV Browser Javascript API]]&lt;br /&gt;
* [[TV Browser Video HW acceleration]]&lt;br /&gt;
* [[TV Browser Transparency Management]]&lt;br /&gt;
&lt;br /&gt;
Related Topics&lt;br /&gt;
* Universal Multi Media Service [[umms | UMMS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  5 Where is the code&lt;br /&gt;
-----------------&lt;br /&gt;
Visit MeeGo OBS and search for meego-tv-browser &lt;br /&gt;
https://build.meego.com&lt;br /&gt;
&lt;br /&gt;
or directly in the GIT repo&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/meego-tv-browser&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/mutter-meego-tv&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Video_HW_accelleration</id>
		<title>TV Browser Video HW accelleration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Video_HW_accelleration"/>
				<updated>2012-01-27T11:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: moved TV Browser Video HW accelleration to TV Browser Video HW acceleration: Spelling error correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[TV Browser Video HW acceleration]]&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Video_HW_acceleration</id>
		<title>TV Browser Video HW acceleration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Video_HW_acceleration"/>
				<updated>2012-01-27T11:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: moved TV Browser Video HW accelleration to TV Browser Video HW acceleration: Spelling error correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5 Video Hardware Acceleration =&lt;br /&gt;
&lt;br /&gt;
== MeeGo TV Hardware Capability ==&lt;br /&gt;
&lt;br /&gt;
* Video Display Controller Architecture&lt;br /&gt;
[[Image(vdc.PNG)]]&lt;br /&gt;
&lt;br /&gt;
* 4-5 Universal Pixel Plane for graphics and video rendering&lt;br /&gt;
* Hardware blender supports IAP and ARGB pixel format UPP&lt;br /&gt;
* Two hardware decoders - H.264, VC1, MPEG2. support 2-way 1080p video decoding&lt;br /&gt;
* Hardware Scaler&lt;br /&gt;
* PVR SGX Graphics Core&lt;br /&gt;
&lt;br /&gt;
== Multi-plane Solution ==&lt;br /&gt;
[[Image(mp-solution.PNG)]]&lt;br /&gt;
&lt;br /&gt;
* Render Process:&lt;br /&gt;
** Replace the FFMPEG based !WebMediaPlayer with UMMS based !UmmsWebMediaPlayer&lt;br /&gt;
** Webkit calculates video destination area and transparent area.&lt;br /&gt;
* Browser Process:&lt;br /&gt;
** DBus bridge in browser to adapt security sandbox&lt;br /&gt;
** Issue plane level transparency commands&lt;br /&gt;
* Unified Multimedia Service&lt;br /&gt;
** The actual playback engine&lt;br /&gt;
** Playback and media control&lt;br /&gt;
** DBus interface&lt;br /&gt;
** Multi-session support&lt;br /&gt;
** Multi media engines(Gstreamer, !OpenMax…)&lt;br /&gt;
* mutter-meego-tv: Handle hints for transparency&lt;br /&gt;
** Facts:&lt;br /&gt;
*** Browser rendered on X window&lt;br /&gt;
*** X rendered on above plane,&lt;br /&gt;
*** Hardware accelerated video is rendered on underneath plane.&lt;br /&gt;
*** X server does not handle alpha channel by default&lt;br /&gt;
*** Alpha channel is used in plane level with Pixel format ARGB&lt;br /&gt;
** Solution: Windows manager handles the alpha channel when compositing&lt;br /&gt;
** Result: See through the right area of X to show video&lt;br /&gt;
&lt;br /&gt;
== Video As Texture ==&lt;br /&gt;
[[Image(vat-solution.PNG)]]&lt;br /&gt;
* Render &amp;amp; Browser processes co work to redirect playback commands to UMMS&lt;br /&gt;
* UMMS is responsible for hardware accelerated video decoding and color conversion.&lt;br /&gt;
* RGBA data is shared between UMMS and render process&lt;br /&gt;
* Render process renders the texture to the video area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tradeoff ==&lt;br /&gt;
* Multi-plane&lt;br /&gt;
** Pursues maximized performance&lt;br /&gt;
** Depend on wm, currently only mutter is enhanced.&lt;br /&gt;
** Video/browser display memory separated, advanced feature not available&lt;br /&gt;
* Video as Texture&lt;br /&gt;
** Keep the integrity of the browser window’s display memory, which enables a lot of advanced HTML5 features.&lt;br /&gt;
** Involve color conversion and memory copy that can be expensive for HD videos&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:MeeGoTV-vdc.png</id>
		<title>File:MeeGoTV-vdc.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:MeeGoTV-vdc.png"/>
				<updated>2012-01-27T11:09:41Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:MeeGoTV-vat-solution.png</id>
		<title>File:MeeGoTV-vat-solution.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:MeeGoTV-vat-solution.png"/>
				<updated>2012-01-27T11:09:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:MeeGoTV-mp-solution.png</id>
		<title>File:MeeGoTV-mp-solution.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:MeeGoTV-mp-solution.png"/>
				<updated>2012-01-27T11:08:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Video_HW_acceleration</id>
		<title>TV Browser Video HW acceleration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Video_HW_acceleration"/>
				<updated>2012-01-27T11:07:03Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: Created page with &amp;quot;= HTML5 Video Hardware Acceleration =  == MeeGo TV Hardware Capability ==  * Video Display Controller Architecture Image(vdc.PNG)  * 4-5 Universal Pixel Plane for graphics an...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5 Video Hardware Acceleration =&lt;br /&gt;
&lt;br /&gt;
== MeeGo TV Hardware Capability ==&lt;br /&gt;
&lt;br /&gt;
* Video Display Controller Architecture&lt;br /&gt;
[[Image(vdc.PNG)]]&lt;br /&gt;
&lt;br /&gt;
* 4-5 Universal Pixel Plane for graphics and video rendering&lt;br /&gt;
* Hardware blender supports IAP and ARGB pixel format UPP&lt;br /&gt;
* Two hardware decoders - H.264, VC1, MPEG2. support 2-way 1080p video decoding&lt;br /&gt;
* Hardware Scaler&lt;br /&gt;
* PVR SGX Graphics Core&lt;br /&gt;
&lt;br /&gt;
== Multi-plane Solution ==&lt;br /&gt;
[[Image(mp-solution.PNG)]]&lt;br /&gt;
&lt;br /&gt;
* Render Process:&lt;br /&gt;
** Replace the FFMPEG based !WebMediaPlayer with UMMS based !UmmsWebMediaPlayer&lt;br /&gt;
** Webkit calculates video destination area and transparent area.&lt;br /&gt;
* Browser Process:&lt;br /&gt;
** DBus bridge in browser to adapt security sandbox&lt;br /&gt;
** Issue plane level transparency commands&lt;br /&gt;
* Unified Multimedia Service&lt;br /&gt;
** The actual playback engine&lt;br /&gt;
** Playback and media control&lt;br /&gt;
** DBus interface&lt;br /&gt;
** Multi-session support&lt;br /&gt;
** Multi media engines(Gstreamer, !OpenMax…)&lt;br /&gt;
* mutter-meego-tv: Handle hints for transparency&lt;br /&gt;
** Facts:&lt;br /&gt;
*** Browser rendered on X window&lt;br /&gt;
*** X rendered on above plane,&lt;br /&gt;
*** Hardware accelerated video is rendered on underneath plane.&lt;br /&gt;
*** X server does not handle alpha channel by default&lt;br /&gt;
*** Alpha channel is used in plane level with Pixel format ARGB&lt;br /&gt;
** Solution: Windows manager handles the alpha channel when compositing&lt;br /&gt;
** Result: See through the right area of X to show video&lt;br /&gt;
&lt;br /&gt;
== Video As Texture ==&lt;br /&gt;
[[Image(vat-solution.PNG)]]&lt;br /&gt;
* Render &amp;amp; Browser processes co work to redirect playback commands to UMMS&lt;br /&gt;
* UMMS is responsible for hardware accelerated video decoding and color conversion.&lt;br /&gt;
* RGBA data is shared between UMMS and render process&lt;br /&gt;
* Render process renders the texture to the video area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tradeoff ==&lt;br /&gt;
* Multi-plane&lt;br /&gt;
** Pursues maximized performance&lt;br /&gt;
** Depend on wm, currently only mutter is enhanced.&lt;br /&gt;
** Video/browser display memory separated, advanced feature not available&lt;br /&gt;
* Video as Texture&lt;br /&gt;
** Keep the integrity of the browser window’s display memory, which enables a lot of advanced HTML5 features.&lt;br /&gt;
** Involve color conversion and memory copy that can be expensive for HD videos&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser_Javascript_D-Bus_API_design</id>
		<title>TV Browser Javascript D-Bus API design</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser_Javascript_D-Bus_API_design"/>
				<updated>2012-01-27T11:00:27Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: Created page with &amp;quot;== Javascript D-Bus API Overview == This document is a design of  JavaScript D-Bus API for  MeeGo TV browser  === What does D-Bus API provide? === The D-Bus API ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Javascript D-Bus API Overview ==&lt;br /&gt;
This document is a design of  JavaScript D-Bus API for [[ TV Browser | MeeGo TV browser]]&lt;br /&gt;
&lt;br /&gt;
=== What does D-Bus API provide? ===&lt;br /&gt;
The D-Bus API provides interface to acces D-Bus service with Javascript language bindings.&lt;br /&gt;
There are actually multiple D-Bus message buses running on MeeGo (and on your average Linux system) at any one time, of two types:&lt;br /&gt;
 * The system bus is a machine-global, single instance of the daemon with security restrictions on what messages it will accept. It's used for system-wide communication and communication between the user desktop and the operating system.&lt;br /&gt;
 * A session bus is created for each user session. It allows applications within that user session to communicate. Most MeeGo D-Bus services (connman etc.) communicate via the session bus.&lt;br /&gt;
&lt;br /&gt;
To get system bus, use the following code snippet:&lt;br /&gt;
&lt;br /&gt;
 var system = dbuslib.system_bus();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get session bus,&lt;br /&gt;
&lt;br /&gt;
 var session = dbuslib.session_bus();&lt;br /&gt;
&lt;br /&gt;
=== The services, interfaces and objects ===&lt;br /&gt;
Interfaces are the contract between an object and its callers, much like interfaces in Java, GObject etc.. An interface, as in most object-oriented programming environments, defines the methods and properties an object exposes. In addition, D-Bus interfaces can also contain signals. Signals provide a way for objects to notify other objects about events which happen to them: for example, a Door interface might provide a signal to other objects when it is opened, perhaps called door-opened. (A nearby Doorman object might listen out for door-opened signals, so it knows when people come into the building.)&lt;br /&gt;
&lt;br /&gt;
Each D-Bus object implements one or more interfaces. Most implement two standard interfaces as a minimum, org.freedesktop.DBus.Introspectable and org.freedesktop.DBus.Properties.&lt;br /&gt;
&lt;br /&gt;
The following code gives an example of get interface object with given arguments&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 var iface = dbuslib.get_interface(session,      //the bus&lt;br /&gt;
                                  &amp;quot;org.freedesktop.compiz&amp;quot;,   //the service name&lt;br /&gt;
                                  &amp;quot;/org/freedesktop/compiz&amp;quot;,  //the object path&lt;br /&gt;
                                  &amp;quot;org.freedesktop.compiz&amp;quot;);  //the interface&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The returned interface also retrieves the method and signal interfaces&lt;br /&gt;
{|&lt;br /&gt;
| '''Type''' || '''Prototype''' || '''ProtoType In js''' ||&lt;br /&gt;
|&lt;br /&gt;
+&lt;br /&gt;
| Method     || getPlugins()    ||  iface.getPlugins() ||&lt;br /&gt;
|+&lt;br /&gt;
| Method     || getPluginMetaData(String) || iface.getPluginMetaData(String) ||&lt;br /&gt;
|+&lt;br /&gt;
| Signal     || pluginChanged()  || iface.pluginChanged() ||&lt;br /&gt;
|}&lt;br /&gt;
=== The method call ===&lt;br /&gt;
The call message will contain any arguments to the method. The reply message may indicate an error, or may contain data returned by the method.&lt;br /&gt;
&lt;br /&gt;
 var return_value = iface.GetPlugins();&lt;br /&gt;
 console.log(return_value);&lt;br /&gt;
&lt;br /&gt;
=== The signal emitting ===&lt;br /&gt;
A signal in DBus consists of a single message, sent by one process to any number of other processes.&lt;br /&gt;
&lt;br /&gt;
 iface.pluginChanged.onemit = funcion() {&lt;br /&gt;
    console.log(&amp;quot;plugin changed callback&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== The sample code ===&lt;br /&gt;
The following is the full sample code&lt;br /&gt;
&lt;br /&gt;
 var session = dbuslib.session_bus();&lt;br /&gt;
 var iface = dbuslib.get_interface(session,      //the bus&lt;br /&gt;
                                  &amp;quot;org.freedesktop.compiz&amp;quot;,   //the service name&lt;br /&gt;
                                  &amp;quot;/org/freedesktop/compiz&amp;quot;,  //the object path&lt;br /&gt;
                                  &amp;quot;org.freedesktop.compiz&amp;quot;);  //the interface&lt;br /&gt;
 &lt;br /&gt;
 var return_value = iface.GetPlugins();&lt;br /&gt;
 console.log(return_value);&lt;br /&gt;
 &lt;br /&gt;
 iface.pluginChanged.onemit = funcion() {&lt;br /&gt;
    console.log(&amp;quot;plugin changed callback&amp;quot;);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser</id>
		<title>TV Browser</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser"/>
				<updated>2012-01-27T10:53:16Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* MeeGo TV Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo TV Browser =&lt;br /&gt;
&lt;br /&gt;
  1 Short expression of the need&lt;br /&gt;
--------------------------------&lt;br /&gt;
TV industry and in particular IPTV has used browsers for years to create TV portals. In IPTV specialised companies such as ANT (Cambridge, UK), Opera (Oslo, Norway) or Access (Tokyo, Japan) have created specialised browser for these use cases.&lt;br /&gt;
These specialised browsers were optimized for TV at the detriment of their possibility to surf the open internet.&lt;br /&gt;
As today the requirement to browse the open internet is imposed on TV, there is a need to provide an “open internet” capable browser which can be integrated in a TV and can be used to create TV portals.&lt;br /&gt;
These portals are commonly used to provide the business logic which run locally on the device an is written in AJAX. To enable the control of the TV and Media Centre an API accessible from JavaScript must be added to the Browser.&lt;br /&gt;
&lt;br /&gt;
  2 Purpose/audience&lt;br /&gt;
--------------------&lt;br /&gt;
The purpose of this document is to provide an understanding of the solution which has been developed by the MeeGo TV project. It addresses the developers who will have to deliver a working implementation.&lt;br /&gt;
&lt;br /&gt;
  3 Overview&lt;br /&gt;
-------------&lt;br /&gt;
The internet world has created browser for PC. Assuming not only a mouse and a keyboard, but also a 50 cm viewing with a multi windows presentation layer and a skilled human who drive the beast.&lt;br /&gt;
Unfortunately, a TV has neither a keyboard or a mouse, the vision is done from 3m, there is no windowing concept and the Live TV presentation remains in control of the UI all the time. TV needs is a browser which address some critical issues.&lt;br /&gt;
Controllable by an external application.&lt;br /&gt;
* Instant start&lt;br /&gt;
* Accept alternative input method&lt;br /&gt;
* Support HW accelerated Video&lt;br /&gt;
* Give access to all the TV features from Javascript&lt;br /&gt;
** System configuration&lt;br /&gt;
** Asset browsing&lt;br /&gt;
** Video and Audio&lt;br /&gt;
** PVR and Pause live TV.&lt;br /&gt;
** Video and Audio output &lt;br /&gt;
** Input devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  4 Documentation&lt;br /&gt;
----------------------------&lt;br /&gt;
&lt;br /&gt;
Requirements&lt;br /&gt;
* [[File:Meego TV JavaScriptAPI requirement.pdf | Requirement for a TV Javascript API]]&amp;lt;br&amp;gt;&lt;br /&gt;
* [[File:Meego TV Browser V0.2.odt | Requirement for TV Browser]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User Manual&lt;br /&gt;
* [[TV Browser Javascript D-Bus API design]]&lt;br /&gt;
* [[TV Browser Control API]]&lt;br /&gt;
* [[TV Browser Javascript API]]&lt;br /&gt;
* [[TV Browser Video HW accelleration]]&lt;br /&gt;
* [[TV Browser Transparency Management]]&lt;br /&gt;
&lt;br /&gt;
Related Topics&lt;br /&gt;
* Universal Multi Media Service [[umms | UMMS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  5 Where is the code&lt;br /&gt;
-----------------&lt;br /&gt;
Visit MeeGo OBS and search for meego-tv-browser &lt;br /&gt;
https://build.meego.com&lt;br /&gt;
&lt;br /&gt;
or directly in the GIT repo&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/meego-tv-browser&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/mutter-meego-tv&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser</id>
		<title>TV Browser</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser"/>
				<updated>2012-01-26T19:02:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* MeeGo TV Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo TV Browser =&lt;br /&gt;
&lt;br /&gt;
  1 Short expression of the need&lt;br /&gt;
--------------------------------&lt;br /&gt;
TV industry and in particular IPTV has used browsers for years to create TV portals. In IPTV specialised companies such as ANT (Cambridge, UK), Opera (Oslo, Norway) or Access (Tokyo, Japan) have created specialised browser for these use cases.&lt;br /&gt;
These specialised browsers were optimized for TV at the detriment of their possibility to surf the open internet.&lt;br /&gt;
As today the requirement to browse the open internet is imposed on TV, there is a need to provide an “open internet” capable browser which can be integrated in a TV and can be used to create TV portals.&lt;br /&gt;
These portals are commonly used to provide the business logic which run locally on the device an is written in AJAX. To enable the control of the TV and Media Centre an API accessible from JavaScript must be added to the Browser.&lt;br /&gt;
&lt;br /&gt;
  2 Purpose/audience&lt;br /&gt;
--------------------&lt;br /&gt;
The purpose of this document is to provide an understanding of the solution which has been developed by the MeeGo TV project. It addresses the developers who will have to deliver a working implementation.&lt;br /&gt;
&lt;br /&gt;
  3 Overview&lt;br /&gt;
-------------&lt;br /&gt;
The internet world has created browser for PC. Assuming not only a mouse and a keyboard, but also a 50 cm viewing with a multi windows presentation layer and a skilled human who drive the beast.&lt;br /&gt;
Unfortunately, a TV has neither a keyboard or a mouse, the vision is done from 3m, there is no windowing concept and the Live TV presentation remains in control of the UI all the time. TV needs is a browser which address some critical issues.&lt;br /&gt;
Controllable by an external application.&lt;br /&gt;
* Instant start&lt;br /&gt;
* Accept alternative input method&lt;br /&gt;
* Support HW accelerated Video&lt;br /&gt;
* Give access to all the TV features from Javascript&lt;br /&gt;
** System configuration&lt;br /&gt;
** Asset browsing&lt;br /&gt;
** Video and Audio&lt;br /&gt;
** PVR and Pause live TV.&lt;br /&gt;
** Video and Audio output &lt;br /&gt;
** Input devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  4 Documentation&lt;br /&gt;
----------------------------&lt;br /&gt;
&lt;br /&gt;
Requirements&lt;br /&gt;
* [[File:Meego TV JavaScriptAPI requirement.pdf | Requirement for a TV Javascript API]]&amp;lt;br&amp;gt;&lt;br /&gt;
* [[File:Meego TV Browser V0.2.odt | Requirement for TV Browser]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User Manual&lt;br /&gt;
* [[TV Browser Control API]]&lt;br /&gt;
* [[TV Browser Javascript API]]&lt;br /&gt;
* [[TV Browser Transparency Management]]&lt;br /&gt;
&lt;br /&gt;
Related Topics&lt;br /&gt;
* Universal Multi Media Service [[umms | UMMS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  5 Where is the code&lt;br /&gt;
-----------------&lt;br /&gt;
Visit MeeGo OBS and search for meego-tv-browser &lt;br /&gt;
https://build.meego.com&lt;br /&gt;
&lt;br /&gt;
or directly in the GIT repo&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/meego-tv-browser&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/mutter-meego-tv&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/TV_Browser</id>
		<title>TV Browser</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/TV_Browser"/>
				<updated>2012-01-26T19:02:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dominig: /* MeeGo TV Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo TV Browser =&lt;br /&gt;
&lt;br /&gt;
  1 Short expression of the need&lt;br /&gt;
--------------------------------&lt;br /&gt;
TV industry and in particular IPTV has used browsers for years to create TV portals. In IPTV specialised companies such as ANT (Cambridge, UK), Opera (Oslo, Norway) or Access (Tokyo, Japan) have created specialised browser for these use cases.&lt;br /&gt;
These specialised browsers were optimized for TV at the detriment of their possibility to surf the open internet.&lt;br /&gt;
As today the requirement to browse the open internet is imposed on TV, there is a need to provide an “open internet” capable browser which can be integrated in a TV and can be used to create TV portals.&lt;br /&gt;
These portals are commonly used to provide the business logic which run locally on the device an is written in AJAX. To enable the control of the TV and Media Centre an API accessible from JavaScript must be added to the Browser.&lt;br /&gt;
&lt;br /&gt;
  2 Purpose/audience&lt;br /&gt;
--------------------&lt;br /&gt;
The purpose of this document is to provide an understanding of the solution which has been developed by the MeeGo TV project. It addresses the developers who will have to deliver a working implementation.&lt;br /&gt;
&lt;br /&gt;
  3 Overview&lt;br /&gt;
-------------&lt;br /&gt;
The internet world has created browser for PC. Assuming not only a mouse and a keyboard, but also a 50 cm viewing with a multi windows presentation layer and a skilled human who drive the beast.&lt;br /&gt;
Unfortunately, a TV has neither a keyboard or a mouse, the vision is done from 3m, there is no windowing concept and the Live TV presentation remains in control of the UI all the time. TV needs is a browser which address some critical issues.&lt;br /&gt;
Controllable by an external application.&lt;br /&gt;
* Instant start&lt;br /&gt;
* Accept alternative input method&lt;br /&gt;
* Support HW accelerated Video&lt;br /&gt;
* Give access to all the TV features from Javascript&lt;br /&gt;
** System configuration&lt;br /&gt;
** Asset browsing&lt;br /&gt;
** Video and Audio&lt;br /&gt;
** PVR and Pause live TV.&lt;br /&gt;
** Video and Audio output &lt;br /&gt;
** Input devices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  4 Documentation&lt;br /&gt;
----------------------------&lt;br /&gt;
&lt;br /&gt;
Requirements&lt;br /&gt;
* [[File:Meego TV JavaScriptAPI requirement.pdf | Requirement for a TV Javascript API]]&amp;lt;br&amp;gt;&lt;br /&gt;
* [[File:Meego TV Browser V0.2.odt | Requirement for TV Browser]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User Manual&lt;br /&gt;
* [[TV Browser Control API]]&lt;br /&gt;
* [[TV Browser Javascript API]]&lt;br /&gt;
* [[TV Browser Transparency Management]]&lt;br /&gt;
&lt;br /&gt;
Related Topics&lt;br /&gt;
* Universal Multi Media Service [[umms]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  5 Where is the code&lt;br /&gt;
-----------------&lt;br /&gt;
Visit MeeGo OBS and search for meego-tv-browser &lt;br /&gt;
https://build.meego.com&lt;br /&gt;
&lt;br /&gt;
or directly in the GIT repo&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/meego-tv-browser&amp;lt;br&amp;gt;&lt;br /&gt;
http://meego.gitorious.org/meego-middleware/mutter-meego-tv&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dominig</name></author>	</entry>

	</feed>