Creating Lists in Sympa
Creating a list in Sympa involves a whole host of files interacting with each other, and all sorts of configuration snippets are used to create the filename of a resource needed to build the list. This attempts to describe what is taken from where, when a list is created from the command-line with a “sympa.pl --create_list” command.
The command (run as root) is
sympa.pl --create_list --input_file=<xml-file>
<xml-file> is a copy of /etc/sympa/sotontemplate.xml with tokens substituted in to set values which are inserted into the template config file. The <xml-file> can be deleted immediately after the list is created, it is not needed.
The <xml-file> looks like this (note the *1* and so on for footnotes):
Notes:
The XML file is meshed into the template config file in /etc/sympa/create_list_templates/<type>/config.tt2 and then interpreted as a TT2 template (see www.tt2.org), and the output goes into the list's own individual config file which is at
/var/lib/sympa/list_data/all.soton.ac.uk/<listname>/config
That file is compiled by Sympa automatically when needed. It can be edited manually at any time, and Sympa will automatically recompile it as and when needed, without you needing to tell it about the change.
Note that the syntax of the template config file config.tt2 is very strict. It is constructed of a series of "paragraphs" which are a bunch of lines, with a blank line terminating the paragraph. It does not support comments, blank lines are *very* important, and leading white space on a line breaks everything. You have been warned!
"Editors" is what Sympa calls list moderators. When they are used depends on the setting of the "send" parameter in the list config file. See the section on "Authorisation Scenarios".
The editors of a list are not statically defined, but are pulled from a SQL database query as needed. The data is cached by Sympa for speed.
If the list has any editors, the editors are defined in the list's config file by a "paragraph" like this:
Notes:
The data source file looks like this:
Note this file *does* handle leading white space on lines.
Most of this is obvious, and it can handle any <db_type> that is available in the Perl DBI modules.
The "source_parameters" from the list's config file are received as the "param" array, and the data source file is again a TT2 file (see www.tt2.org).
The default editor address for every list is “postmaster@ecs.soton.ac.uk".
"Subscribers" are what Sympa calls list members. Only list subscribers receive a copy of postings to the list. So people can be able to post to a list without being able to receive a copy of their own posting. Posters who are subscribers always receive a copy of their own posting.
The subscriber list for a list is generated by an SQL query defined directly in the list's config file, it does not use a .incl file like the editors. The paragraphs defining the subscribers (taken from the template config file, not a list's real config file) look like this:
Notes:
The list of subscribers for each list is cached by Sympa for a length of time defined by the /etc/sympa/sympa.conf setting "default_ttl" and is set to 3600 seconds (1 hour) at the time of writing. So all changes to the table of list subscribers in the "all_lists" database will take up to 1 hour to propagate to the lists. There is no way for force an update of a list's subscribers.
For the purposes of my project, virtually everything is closed and blocked, as users don't need to be able to use the capabilities of the email-driven or web-driven interface to manage lists, as they are all done automatically anyway. The only time authorisation scenari are used is to control who can post to a list.
The people that can post to a list are defined in the list's config file by the paragraph:
/etc/sympa/scenari/send.<scenario-name>
There is also a zero-length file
/etc/sympa/scenari/send.<scenario-name>:ignore
which tells Sympa not to tell anyone about the name or details of the scenario in the web management interface (which we're not using anyway).
The scenario file looks like this:
No comments are allowed. The syntax is strict. Each rule contains a condition, a list of methods, "->" and an action. The "smtp" method is the one we're interested in, it takes the address from the "From:" line of the email message. Rule conditions are matched in order from top to bottom, and the first matching rule is used, at which point rule processing stops.
This returns true or false. If true and the method used is listed, the action happened. You can include single-quoted strings like 'uos-staff', aliases for the name of the list, address of the sender and so on, function calls, all sorts of stuff. The '[sender]' can also be a regexp like '/\@soton\.ac\.uk$/' to cause regexp matches instead of simple string comparison. You can also calls Perl functions, SQL queries, LDAP queries, all sorts of stuff. In a Perl condition, the name of the file is taken from "CustomCondition::<custom-filename>" and the file is located in
/etc/sympa/custom_conditions/<custom-filename>.pm
In this example the list of "Received:" headers is passed to it as a parameter. If it returns 1, the action is executed. If it returns 0, the action is not executed. If it returns undef, there was an error. Changes to the <custom-filename>.pm file only take effect if Sympa is restarted with "service sympa restart".
I have created a send.<scenario-name> file for each type of list we use. Sympa does not notice changes to the scenari unless the datestamp on the list's config file is updated, at which point it updates the scenari for that one list. If you change a scenario file, you have to update the datestamp of the config files for all the lists that use it, forcing on-the-fly recompilation of the lists' config files.
You can change every bit of text ever output by Sympa, and the whole thing is multilingual too. I have stuck with en_US.
All the text output by email to users is contained in the TT2 files in
/etc/sympa/mail_tt2
Changes to files in this directory are automatically noticed by Sympa and processed immediately. Note this does not apply to the file "sympa.po" below.
For example, the "<reason_code>" above, used as a parameter to the "reject()" action, is defined in
/etc/sympa/mail_tt2/authorization_reject.tt2
The best way of finding which file contains the string you are trying to change is to search for a small bit of it in all the mail_tt2/*.tt2 files. Beware the actual text output will not be in these files, but something very close to it will be if you are working in English. Continue reading to find out why...
Let's take the example of the <reason_code> being "send_building". The "reject()" output messages are all defined in the file mentioned above, which is basically a huge "if...then...elsif...elsif...else" statement with hundreds of conditional expressions defined to test the "reason" parameter it is passed by Sympa.
Look through that file and find the "send_building" "ELSIF" condition. That will produce this bit of code:
The actual text output to the user is taken by internationalising the string "send_building", which is passed to the "loc()" function which does the translation. The "loc()" function can have parameters passed to it which are used to insert various bits of text into the translated text. Most of the original text to be translated is *almost* exactly the same as the output of the English translation, but not quite. More fun that way round. A few greps will find the text you're looking to change.
The translation (into better English) is done using the file
/usr/share/locale/en_US/LC_MESSAGES/sympa.mo
This file is a compiled version of the file
/etc/sympa/sympa.po
You can compile it by running
cd /etc/sympa && msgfmt -c -o /usr/share/locale/en_US/LC_MESSAGES/sympa.mo sympa.po
In sympa.po there are multiple definitions which look like this:
service sympa restart
Changes will not take effect until Sympa restarts.
Many mailing lists email all their subscribers automatically at the start of each month telling them they are subscribed to that list, and how to unsubscribe and post successfully. The frequency of such actions are given in the list's config file by the paragraphs:
/etc/sympa/list_task_models/<action>.<task_model>.task
so "expire_task never" is described in
/etc/sympa/list_task_models/expire.never.task
In my project expiry and reminders are not needed nor wanted. So to stop them working, their frequencies have been set to 1000 years. The reason for this is fairly obvious if you look at the structure and syntax of one of the task model files.
The command (run as root) is
sympa.pl --create_list --input_file=<xml-file>
<xml-file> is a copy of /etc/sympa/sotontemplate.xml with tokens substituted in to set values which are inserted into the template config file. The <xml-file> can be deleted immediately after the list is created, it is not needed.
The <xml-file> looks like this (note the *1* and so on for footnotes):
<?xml version="1.0" ?>
<list>
<listname>comp3020</listname> *1*
<type>soton</type> *2*
<listtitle>comp3020</listtitle> *3*
<subject>Students enrolled on COMP3020</subject>
<editor>false</editor>
<replypolicy>other_email</replypolicy>
<replyaddress>god@ecs.soton.ac.uk</replyaddress>
<tag>true</tag>
<ismodule>true</ismodule>
<isbuilding>false</isbuilding>
<isuos>false</isuos>
<owner multiple="1"><email>jkf@ecs.soton.ac.uk</email></owner> *4*
</list>
Notes:
- Sets the name of the list. Must be set in the XML file, not the template config file.
- Sets the value of "type" which is used to determine the location of the template config file used to construct the list's own config file. Must be set in the XML file. Location is /etc/sympa/create_list_templates/<type>/config.tt2
- These all set lower-case-named variables which are referenced in the template config file just mentioned.
- This sets the owner(s) of the list. Must be set in the XML file, not the template config file.
- Any characters such as “&”, "<" and ">" must be encoded as XML entities “&", “<” and “>” or it errors out.
The XML file is meshed into the template config file in /etc/sympa/create_list_templates/<type>/config.tt2 and then interpreted as a TT2 template (see www.tt2.org), and the output goes into the list's own individual config file which is at
/var/lib/sympa/list_data/all.soton.ac.uk/<listname>/config
That file is compiled by Sympa automatically when needed. It can be edited manually at any time, and Sympa will automatically recompile it as and when needed, without you needing to tell it about the change.
Note that the syntax of the template config file config.tt2 is very strict. It is constructed of a series of "paragraphs" which are a bunch of lines, with a blank line terminating the paragraph. It does not support comments, blank lines are *very* important, and leading white space on a line breaks everything. You have been warned!
Editors / Moderators
"Editors" is what Sympa calls list moderators. When they are used depends on the setting of the "send" parameter in the list config file. See the section on "Authorisation Scenarios".
The editors of a list are not statically defined, but are pulled from a SQL database query as needed. The data is cached by Sympa for speed.
If the list has any editors, the editors are defined in the list's config file by a "paragraph" like this:
editor_include
source editors *1*
reception mail
visibility conceal
source_parameters fpas-ecs-sys *2*
Notes:
- The <source> name is used to tell Sympa where to get the SQL query that will produce a list of the email addresses of the editors. The SQL query is defined in a data source file at
/etc/sympa/data_sources/<source>.incl - The comma-separated list of source_parameters are passed into the SQL data source file as param.0, param.1 and so on.
The data source file looks like this:
include_sql_query
db_type mysql
host localhost
db_name all_lists
user secretusername!
passwd secretpassword!
sql_query SELECT email FROM list_moderators WHERE list_address='[% param.0 %]'
Note this file *does* handle leading white space on lines.
Most of this is obvious, and it can handle any <db_type> that is available in the Perl DBI modules.
The "source_parameters" from the list's config file are received as the "param" array, and the data source file is again a TT2 file (see www.tt2.org).
The default editor address for every list is “postmaster@ecs.soton.ac.uk".
Subscribers / Members
"Subscribers" are what Sympa calls list members. Only list subscribers receive a copy of postings to the list. So people can be able to post to a list without being able to receive a copy of their own posting. Posters who are subscribers always receive a copy of their own posting.
The subscriber list for a list is generated by an SQL query defined directly in the list's config file, it does not use a .incl file like the editors. The paragraphs defining the subscribers (taken from the template config file, not a list's real config file) look like this:
user_data_source include2 *1*
include_sql_queryname subscribers *2*
db_type mysql *3*
host localhost
db_name all_lists
user secretusername!
passwd secretpassword!
sql_query SELECT email FROM list_members WHERE list_address='[% listname %]' *4*
Notes:
- This tells Sympa what sort of data source it is. Only "include2" exists in Sympa now.
- Note this is for information only, and has no apparent effect.
- The database type can be anything supported by the Perl DBI modules.
- The [% listname %] is replaced with the name of the list when the list is created, it cannot be written indirectly like that in the list's own config file.
The list of subscribers for each list is cached by Sympa for a length of time defined by the /etc/sympa/sympa.conf setting "default_ttl" and is set to 3600 seconds (1 hour) at the time of writing. So all changes to the table of list subscribers in the "all_lists" database will take up to 1 hour to propagate to the lists. There is no way for force an update of a list's subscribers.
Authorisation Scenari (Who Can Post?)
For the purposes of my project, virtually everything is closed and blocked, as users don't need to be able to use the capabilities of the email-driven or web-driven interface to manage lists, as they are all done automatically anyway. The only time authorisation scenari are used is to control who can post to a list.
The people that can post to a list are defined in the list's config file by the paragraph:
send <scenario-name>
where <scenario-name> tells it to read the rules of the scenario from/etc/sympa/scenari/send.<scenario-name>
There is also a zero-length file
/etc/sympa/scenari/send.<scenario-name>:ignore
which tells Sympa not to tell anyone about the name or details of the scenario in the web management interface (which we're not using anyway).
The scenario file looks like this:
title.gettext Building list, Private, moderated for University staff
CustomCondition::not_from_campus([msg_header->Received]) smtp,dkim,smime,md5 -> reject(reason='from_offcampus')
is_subscriber([listname],[sender]) smtp,dkim,md5,smime -> do_it
is_editor([listname],[sender]) smtp,dkim,md5,smime -> do_it
is_subscriber('uos-staff',[sender]) smtp,dkim,md5,smime -> editorkey
true() smtp,dkim,smime,md5 -> reject(reason='send_building')
No comments are allowed. The syntax is strict. Each rule contains a condition, a list of methods, "->" and an action. The "smtp" method is the one we're interested in, it takes the address from the "From:" line of the email message. Rule conditions are matched in order from top to bottom, and the first matching rule is used, at which point rule processing stops.
Condition
This returns true or false. If true and the method used is listed, the action happened. You can include single-quoted strings like 'uos-staff', aliases for the name of the list, address of the sender and so on, function calls, all sorts of stuff. The '[sender]' can also be a regexp like '/\@soton\.ac\.uk$/' to cause regexp matches instead of simple string comparison. You can also calls Perl functions, SQL queries, LDAP queries, all sorts of stuff. In a Perl condition, the name of the file is taken from "CustomCondition::<custom-filename>" and the file is located in
/etc/sympa/custom_conditions/<custom-filename>.pm
In this example the list of "Received:" headers is passed to it as a parameter. If it returns 1, the action is executed. If it returns 0, the action is not executed. If it returns undef, there was an error. Changes to the <custom-filename>.pm file only take effect if Sympa is restarted with "service sympa restart".
Method
- "smtp" is the one we're interested in. This takes the [sender] from the "From:" line of the incoming email message.
Action
- "do_it" says the operation should be done (in this case, the message should be posted).
- "reject(reason='<reason_code>')" says the message should be rejected and a message sent to the sender explaining why. See the "Responses and Messages" section below for information about the <reason_code>.
- "editorkey" says the message should be saved locally and sent to all the editors of the list with an MD5 checksum. If the editor then sends Sympa the MD5 checksum in an email message telling it to proceed, the message will be posted. If the editor tells Sympa the message should be rejected, it is rejected (don't know what the sender is sent in this case). There are many other actions.
I have created a send.<scenario-name> file for each type of list we use. Sympa does not notice changes to the scenari unless the datestamp on the list's config file is updated, at which point it updates the scenari for that one list. If you change a scenario file, you have to update the datestamp of the config files for all the lists that use it, forcing on-the-fly recompilation of the lists' config files.
Responses and Messages
You can change every bit of text ever output by Sympa, and the whole thing is multilingual too. I have stuck with en_US.
All the text output by email to users is contained in the TT2 files in
/etc/sympa/mail_tt2
Changes to files in this directory are automatically noticed by Sympa and processed immediately. Note this does not apply to the file "sympa.po" below.
For example, the "<reason_code>" above, used as a parameter to the "reject()" action, is defined in
/etc/sympa/mail_tt2/authorization_reject.tt2
The best way of finding which file contains the string you are trying to change is to search for a small bit of it in all the mail_tt2/*.tt2 files. Beware the actual text output will not be in these files, but something very close to it will be if you are working in English. Continue reading to find out why...
Let's take the example of the <reason_code> being "send_building". The "reject()" output messages are all defined in the file mentioned above, which is basically a huge "if...then...elsif...elsif...else" statement with hundreds of conditional expressions defined to test the "reason" parameter it is passed by Sympa.
Look through that file and find the "send_building" "ELSIF" condition. That will produce this bit of code:
[% ELSIF reason == 'send_building' -%]
[%|loc()%]send_building[%END%]
The actual text output to the user is taken by internationalising the string "send_building", which is passed to the "loc()" function which does the translation. The "loc()" function can have parameters passed to it which are used to insert various bits of text into the translated text. Most of the original text to be translated is *almost* exactly the same as the output of the English translation, but not quite. More fun that way round. A few greps will find the text you're looking to change.
The translation (into better English) is done using the file
/usr/share/locale/en_US/LC_MESSAGES/sympa.mo
This file is a compiled version of the file
/etc/sympa/sympa.po
You can compile it by running
cd /etc/sympa && msgfmt -c -o /usr/share/locale/en_US/LC_MESSAGES/sympa.mo sympa.po
In sympa.po there are multiple definitions which look like this:
msgid "send_building"
msgstr "University Building lists are restricted to occupants of the building, and Estates and Facilities staff.\n\n"
"If you think you should be able to post to this list, use http://all.soton.ac.uk/search to search for yourself by staff/student number, and be sure you are sending from the correct address."
- msgid -- This is the text value passed to loc() in the file authorization_reject.tt2 described above.
- msgstr -- This line, and every line starting '"' immediately after it, define the actual text that is sent to the user.
service sympa restart
Changes will not take effect until Sympa restarts.
Regular Tasks
Many mailing lists email all their subscribers automatically at the start of each month telling them they are subscribed to that list, and how to unsubscribe and post successfully. The frequency of such actions are given in the list's config file by the paragraphs:
expire_task never
remind_task never
The frequency in the "<action>_task <task_model>" statement is described in the list task model file/etc/sympa/list_task_models/<action>.<task_model>.task
so "expire_task never" is described in
/etc/sympa/list_task_models/expire.never.task
In my project expiry and reminders are not needed nor wanted. So to stop them working, their frequencies have been set to 1000 years. The reason for this is fairly obvious if you look at the structure and syntax of one of the task model files.
Comments
VLC and Bluray discs
No-one much seems to know how to import Bluray discs using VLC (once you’ve gotten rid of the copy protection so you can actually make a backup!). So here’s how I have done it. This is all done with a recent copy of VLC on Windows. The user interface on the other versions of VLC is rather different, so your mileage will vary.
First of all, use AnyDVD HD to remove all the copy protection from the disc. Then use “AnyDVD Ripper” (comes with AnyDVD HD) to copy the useful bits of the disc onto your PC. You’ll need a fair bit of space, a Bluray disc can require several tens of gigabytes of space.
So now, in the “STREAM” directory within the ripped copy of the disc, you’ve got a bunch of *.m2ts files. The biggest of these will be the main feature film/movie. If AnyDVD HD did its stuff, VLC will be able to play the *.m2ts directly, and you need to open the m2ts in VLC to see the codec information. Particularly, check what video codec is used (H.264 makes life easier as then you won’t have to transcode the video), and note down the audio stream ID of the first audio track, or the first AC-3 audio track. It will often be a number like 4353. Also note the bitrate (e.g. 320kb/s) and the sample rate (e.g. 48000).
VLC will by default always use the first audio track, whether that will fit into the output format you have chosen or not. The result is you often get no audio in your output file at all. So go into Tools / Preferences, and show all settings (see the bottom left corner of the dialog). In the “Input / Codecs” first page, set the “Audio track ID” to the number you noted down earlier (my example was 4353). Save the preferences.
Go into the Tools menu and select “Messages” to view the messages window. Set the “Verbosity level” to 2 and press the “Clear” button. Leave this window on the screen, you will probably need it later.
In VLC, go to Media / “Convert/Save…”. Add the m2ts file. Choose “Convert” from the Open button. Set the output filename to something ending in “.mp4”. Edit the top settings profile “Video - H.264 + AAC (MP4)” by clicking the little spanners button, and note down all the settings, including any that are blank or 0. Return to the Convert dialog and click on the “New Profile” button (it’s to the right of the red “X” button). Enter everything you noted down, including all zeros and blanks.
In the “Video codec” page, tick “Keep original video track” if the codec of the original video was H.264. If it wasn’t, then tell it to convert it to H.264. Set the “Scale” to 1. You should copy the nitrate and frame rate from the original settings in the codec information you saw earlier.
In the “Audio codec” page, things get a little trickier. By default, VLC will always convert the first audio track it finds. If that is not “MPEG 4 Audio ( AAC )” then you will probably end up with no audio at all. By now you should have already set the audio track ID in VLC’s Preferences. So just choose “MPEG 4 Audio ( AAC )” here, and do not tick “Keep original audio track”. Set the nitrate and sample rate to the numbers you noted down earlier. Set the Channels to 2.
Save those settings and you will return to the “Convert” dialog box. Set the Destination file to wherever you want the output file to go, and make it end in “.mp4”.
Click “Start”.
It will probably race through the film, as it’s not having to transcode all the video. But when the progress bar gets to the end, it will sit there and hammer your hard disk. Let it continue, don’t press anything until the word “Streaming” has disappeared from the VLC window. Then it has finished.
Try playing your new video. If you are missing the audio, look back in the “Messages” window for any lines that mention “audio” or “a52” as that will tell you it is writing some audio. Also check the “Codec information” for your new video file and see if it wrote an audio track at all. If it didn’t, you might have the wrong audio Track ID set in the Preferences. You should get some clues as to why it didn’t work. Explaining how to fix all the problems that might arise is way beyond the scope of this document, sorry.
First of all, use AnyDVD HD to remove all the copy protection from the disc. Then use “AnyDVD Ripper” (comes with AnyDVD HD) to copy the useful bits of the disc onto your PC. You’ll need a fair bit of space, a Bluray disc can require several tens of gigabytes of space.
So now, in the “STREAM” directory within the ripped copy of the disc, you’ve got a bunch of *.m2ts files. The biggest of these will be the main feature film/movie. If AnyDVD HD did its stuff, VLC will be able to play the *.m2ts directly, and you need to open the m2ts in VLC to see the codec information. Particularly, check what video codec is used (H.264 makes life easier as then you won’t have to transcode the video), and note down the audio stream ID of the first audio track, or the first AC-3 audio track. It will often be a number like 4353. Also note the bitrate (e.g. 320kb/s) and the sample rate (e.g. 48000).
VLC will by default always use the first audio track, whether that will fit into the output format you have chosen or not. The result is you often get no audio in your output file at all. So go into Tools / Preferences, and show all settings (see the bottom left corner of the dialog). In the “Input / Codecs” first page, set the “Audio track ID” to the number you noted down earlier (my example was 4353). Save the preferences.
Go into the Tools menu and select “Messages” to view the messages window. Set the “Verbosity level” to 2 and press the “Clear” button. Leave this window on the screen, you will probably need it later.
In VLC, go to Media / “Convert/Save…”. Add the m2ts file. Choose “Convert” from the Open button. Set the output filename to something ending in “.mp4”. Edit the top settings profile “Video - H.264 + AAC (MP4)” by clicking the little spanners button, and note down all the settings, including any that are blank or 0. Return to the Convert dialog and click on the “New Profile” button (it’s to the right of the red “X” button). Enter everything you noted down, including all zeros and blanks.
In the “Video codec” page, tick “Keep original video track” if the codec of the original video was H.264. If it wasn’t, then tell it to convert it to H.264. Set the “Scale” to 1. You should copy the nitrate and frame rate from the original settings in the codec information you saw earlier.
In the “Audio codec” page, things get a little trickier. By default, VLC will always convert the first audio track it finds. If that is not “MPEG 4 Audio ( AAC )” then you will probably end up with no audio at all. By now you should have already set the audio track ID in VLC’s Preferences. So just choose “MPEG 4 Audio ( AAC )” here, and do not tick “Keep original audio track”. Set the nitrate and sample rate to the numbers you noted down earlier. Set the Channels to 2.
Save those settings and you will return to the “Convert” dialog box. Set the Destination file to wherever you want the output file to go, and make it end in “.mp4”.
Click “Start”.
It will probably race through the film, as it’s not having to transcode all the video. But when the progress bar gets to the end, it will sit there and hammer your hard disk. Let it continue, don’t press anything until the word “Streaming” has disappeared from the VLC window. Then it has finished.
Try playing your new video. If you are missing the audio, look back in the “Messages” window for any lines that mention “audio” or “a52” as that will tell you it is writing some audio. Also check the “Codec information” for your new video file and see if it wrote an audio track at all. If it didn’t, you might have the wrong audio Track ID set in the Preferences. You should get some clues as to why it didn’t work. Explaining how to fix all the problems that might arise is way beyond the scope of this document, sorry.
HOWTO Install Mac OS X 10.7 Lion From DVD
23/06/11 12:07 Filed in: Mac
Apple would have you believe that the only way to install Lion on a Mac is to install 10.6 Snow Leopard, update it to the latest revision, go to the Mac App Store, download Lion from there and run it.
Cobblers.
It is trivially simple to burn Lion to a DVD or USB stick so you can install it onto a clean Mac without having to install anything first. Obviously firstly you need to get a copy of Lion from the Mac App Store, but only bother doing that once.
Then all you need to do is use Disk Utility to either burn that to a DVD or write it to a USB stick.
Burn InstallESD.dmg to DVD
Write InstallESD.dmg to USB stick
Now you can put the DVD or USB stick into the Mac you want to use for Lion, and hold down the Option/Alt key while you power on the Mac. Keep Option/Alt held down until a picture of your bootable devices appears. Select the DVD or USB device you want to boot from (the one you just wrote) and the standard Lion installer will appear in a while.
Cobblers.
It is trivially simple to burn Lion to a DVD or USB stick so you can install it onto a clean Mac without having to install anything first. Obviously firstly you need to get a copy of Lion from the Mac App Store, but only bother doing that once.
- Right-click on the Lion application and choose “Show Package Contents”.
- Navigate into the Contents/SharedSupport folder.
- In there you will see a huge file called “InstallESD.dmg”.
Then all you need to do is use Disk Utility to either burn that to a DVD or write it to a USB stick.
Burn InstallESD.dmg to DVD
- Run Disk Utility.
- Drag InstallESD.dmg from a Finder window into the bottom left pane in Disk Utility.
- Click the “Burn” button in the toolbar.
Write InstallESD.dmg to USB stick
- Run Disk Utility.
- Insert your USB stick and wait for it to appear in the list of devices in the top-left pane in Disk Utility.
- Select your USB stick in Disk Utility.
- Click on “Erase” in the right pane, enter the name “Lion” and click the “Erase...” button. Note: This will totally wipe all of your USB stick. Make sure there are no files or apps on there that you need!
- After it has erased, click on “Restore” in the right pane.
- Drag InstallESD.dmg from a Finder window into the “Source” box.
- Drag the “Lion” icon (immediately below your USB stick) from the top-left pane to the “Destination” box.
- Ensure the “Erase destination” box is ticked.
- Click the “Restore” button.
Now you can put the DVD or USB stick into the Mac you want to use for Lion, and hold down the Option/Alt key while you power on the Mac. Keep Option/Alt held down until a picture of your bootable devices appears. Select the DVD or USB device you want to boot from (the one you just wrote) and the standard Lion installer will appear in a while.
Installing Mac OS X Lion Developer Preview 4 on 2011 MacBook Pro
09/06/11 09:09 Filed in: Mac
If you try to install Lion Developer Preview 4 on a 2011 MacBook Pro (certainly the 13” model, not sure about 15” or 17&rdquo
, it will crash the first time it tries to boot in order to do the bulk of the installation.
Here is how to work round it:
Let us hope they fix this shortly!
Here is how to work round it:
- Get a copy of the whole of /System/Library/Extensions/IO80211Family.kext from Developer Preview 3. Alternatively I have a copy stashed away (zipped, unpack it first). Put that copy on another Mac, or another bootable partition.
- Run the “Mac OS X Lion Developer Preview 4” app.
- Keep your eyes on it. As soon as it starts to reboot, hold down the Shift key.
- The installer will now run — if it doesn’t, do step 7 now and try again. I’m unsure exactly what will stop the installer from running.
- At the end of the installation, it will reboot and crash.
- Hold down the power button until it switches off.
- Using either Target Disk Mode or your other bootable partition, overwrite the whole of /System/Library/Extensions/IO80211Family.kext with the copy you saved earlier.
- Reboot. Lion Developer Preview 4 will now boot normally.
Let us hope they fix this shortly!
Shrinking VMDK virtual hard disks in vSphere
There is a bug in VMware vSphere 4.1.
You should be able to reclaim the space in a virtual hard disk (VMDK) by zeroing out all the free virtual disk space with “sdelete” or “dd”, and then migrate it (Storage vMotion) to a different datastore as a Thin provisioned disk. VMware will look for all the blocks full of zeroes and remove them from the VMDK image, often drastically reducing the amount of physical disk space it occupies.
The bug is that if the 2 datastores (source and destination of the migration) have the same block size, VMware does not remove the blocks of zeroes.
To make it work, just migrate it to a datastore with a different block size, and migrate it back where you want to keep it.
To find the block size of a datastore, in vSphere Client go to Home —> Inventory —> Datastores. Select the datastore, and switch to the “Configuration” tab on the right-hand side of the window.
I appreciate that most people format all their datastores with 8MB block size, as that allows the greatest maximum VMDK file size (2Tbytes). This is a very good reason to keep at least 1 datastore with a different block size!
So the full procedure for Windows is
For Linux, it’s like this
You should be able to reclaim the space in a virtual hard disk (VMDK) by zeroing out all the free virtual disk space with “sdelete” or “dd”, and then migrate it (Storage vMotion) to a different datastore as a Thin provisioned disk. VMware will look for all the blocks full of zeroes and remove them from the VMDK image, often drastically reducing the amount of physical disk space it occupies.
The bug is that if the 2 datastores (source and destination of the migration) have the same block size, VMware does not remove the blocks of zeroes.
To make it work, just migrate it to a datastore with a different block size, and migrate it back where you want to keep it.
To find the block size of a datastore, in vSphere Client go to Home —> Inventory —> Datastores. Select the datastore, and switch to the “Configuration” tab on the right-hand side of the window.
I appreciate that most people format all their datastores with 8MB block size, as that allows the greatest maximum VMDK file size (2Tbytes). This is a very good reason to keep at least 1 datastore with a different block size!
So the full procedure for Windows is
- Download “sdelete” from Microsoft.
- Run the command “sdelete -c C:” from a Command Prompt, while logged in as an Administrator.
- Migrate the VM from its current datastore to one with a different block size. Be sure to select “Thin provisioned format”.
- Migrate it back again.
- Bingo! You have all your unused disk space back.
For Linux, it’s like this
- Run the command “dd if=/dev/zero of=BIGFILE bs=1024000 ; rm -f BIGFILE”. If you have several large filesystems in the VM, then do this while your current directory is inside each one in turn. You only need to be root if you have user quotas enforced (most people don’t). But it does no harm to run the command as root if you want to.
- Migrate the VM from its current datastore to one with a different block size. Be sure to select “Thin provisioned format”.
- Migrate it back again.
- Bingo! You have all your unused disk space back.